A step-by-step guide for creating and reading TANS match chartings.
The TANS charting format encodes every point in a tennis match into concise, algebraic-like notation. Each rally is timestamped and broken down into strokes, player positions, and outcomes. This guide helps you create your own charting or interpret existing ones.
A typical match chart begins with header information enclosed in brackets:
[Event: 2025 Mutua Madrid Open Women's Singles Final] [Players: X = Coco Gauff, Y = Aryna Sabalenka] [Video Url: https://www.youtube.com/watch?v=_O-4_IJFIjQ]
Each rally starts with a # Time line indicating when the point begins in the video.
The following numbered lines describe each stroke in sequence. The rally ends with the point outcome marker.
# Time: 1:47 1. XsA6, (D0, A9) 2. YfD2, (C1, A9) 3. XfB7, (E0, A9) 4. YfD6, (D0, B9) 5. XfB6, (D0, C9) 6. YfA1, (C0, C9) YV
1. – Stroke number within the rally.XsA6 – The player (X), stroke type and target coordinates (A6).(D0, A9) – Positions of the players when the shot was hit.YV – Rally winner (Y) with result.The TANS charting system uses concise symbolic encodings to represent shots, directions, player positions, and outcomes. This section explains each encoding in detail.
| Code | Description |
|---|---|
| s | Serve |
| f | Forehand groundstroke |
| b | Backhand groundstroke |
| v | Volley |
| c | Slice |
| o | Overhead (smash) |
| l | Lob |
| d | Drop shot |
When the ball is intercepted by a volleyer or the shot's intent is important to record, an additional character can follow the shot type encoding to indicate intended direction:
| Code | Direction | Example |
|---|---|---|
| i | Down the line | WbiB6 → Backhand down the line |
| x | Cross court | WbxB6 → Backhand cross court |
| m | Down the middle | WbmB6 → Backhand down the middle |
Player positions are recorded as tuples showing their court locations immediately before each shot:
| Format | Usage |
|---|---|
(X, Y) | Singles – positions of Player X and Player Y |
(X, Y, Z, W) | Doubles – positions of all four players |
Each rally ends with a marker denoting the winner and outcome type:
| Code | Meaning | Example |
|---|---|---|
V | Winner point | |
E | Forced error of opponent | |
U | Unforced error of opponent | |
n | Error type – net | YU(n) → Y loses with unforced net error |
w | Error type – wide | XE(w) → X wins by opponent's forced wide error |
h | Error type – long (high) | YU(h) → Y loses with unforced long error |