The light gray-shaded areas show a fundamental domain of a torus under modular transformations. The diagram shows the region in the complex plane that uniquely parametrizes inequivalent tori, bounded by the modular projective special linear group PSL(2,Z) transformations that identify physically equivalent fundamental domains for the action of on the upper half-plane.
\documentclass[tikz,svgnames]{standalone}
\usetikzlibrary{backgrounds}
\begin{document}
\begin{tikzpicture}[scale=3]
\def\xmin{-1} \def\xmax{1}
\def\ymin{-0.1} \def\ymax{2}
\draw [thick,->] (\xmin,0) -- (\xmax,0);
\draw [thick,->] (0,\ymin) -- (0,\ymax);
\draw [thick] (-0.5,-0.02) -- (-0.5,0.02) node [below=2] {$-\frac{1}{2}$};
\draw [thick] (0.5,-0.02) -- (0.5,0.02) node [below=2] {$\frac{1}{2}$};
\draw [thick] (-0.02,1) -- (0.02,1) node [below right=-2] {$i$};
\node at (0,3*\ymax/4) [right] {$F_0$};
\node at (0,0.8) [left] {$F_0^\prime$};
\begin{pgfonlayer}{background}
\draw [DarkBlue,->] (-0.5,0) -- (-0.5,\ymax) node [pos=0.7,above left] {$A$};
\draw [DarkBlue,->] (0.5,0) -- (0.5,\ymax) node [pos=0.7,above right] {$A^\prime$};
\draw [DarkRed] (1,0) arc (0:180:1) node [auto,swap,pos=0.55] {$B$} node [auto,swap,pos=0.45] {$B^\prime$};
\draw [DarkGreen] (0,0) arc (0:90:1) node [auto,pos=0.4] {$C$};
\draw [DarkGreen] (1,1) arc (90:180:1) node [auto,pos=0.6] {$C^\prime$};
\path[clip] (1,\ymax) -- (1,1) arc (90:180:1) -- (0,0) arc (0:90:1) -- (-1,\ymax) -- cycle;
\begin{scope}
\path[clip] (1,\ymax) -- (1,1) arc (90:180:1) -- (0,0) arc (0:90:1) -- (-1,\ymax) -- cycle;
\fill[gray,opacity=0.3] (-0.5,0) rectangle (0.5,\ymax);
\fill[gray,opacity=0.6] (1,0) arc (0:180:1);
\end{scope}
\end{pgfonlayer}
\end{tikzpicture}
\end{document}
#import "@preview/cetz:0.3.4": canvas, draw
#import draw: line, content, arc, rect
#set page(width: auto, height: auto, margin: 1pt)
#let (xmin, xmax) = (-1, 1)
#let (ymin, ymax) = (-0.5, 2.4)
// Set global styles
#let arrow-style = (
mark: (end: "stealth", fill: black, scale: 0.2),
stroke: (thickness: 0.4pt),
)
#set text(size: 8pt)
// TODO this figure needs revisiting to get the gray-shaded areas right without overlaying white fills once CaTZ implements path clipping
// https://github.com/cetz-package/cetz/discussions/813#discussioncomment-12218646
#canvas({
draw.set-style(stroke: (thickness: 0.4pt))
draw.set-viewport((0, 0), (20, 20), bounds: (12, 12))
// Light gray vertical strip
rect(
(-0.5, 0),
(0.5, ymax),
fill: rgb(128, 128, 128).lighten(80%),
stroke: none,
)
// Draw semicircle B and B' (dark red)
arc(
(0, 0),
radius: 1,
start: 0deg,
stop: 180deg,
stroke: (paint: red),
fill: gray.transparentize(30%),
name: "B-arc",
anchor: "origin",
)
// Draw the extended green arcs (C and C') first
arc(
(0, 0),
radius: 1,
start: 0deg,
stop: 90deg,
mode: "PIE",
stroke: (paint: green),
fill: white,
name: "C-arc",
anchor: "start",
)
content("C-arc.20%", $C$, fill: green, anchor: "north-east", padding: 2pt)
arc(
(0, 0),
radius: 1,
start: 90deg,
stop: 180deg,
mode: "PIE",
stroke: (paint: green),
fill: white,
name: "C-prime-arc",
anchor: "arc-end",
)
content("C-prime-arc.25%", $C'$, fill: green, anchor: "north-west", padding: 2pt)
// Draw semicircle B and B' (dark red)
arc(
(0, 0),
radius: 1,
start: 0deg,
stop: 180deg,
stroke: (paint: red),
name: "B-arc",
anchor: "origin",
)
// Draw axes
line((xmin, 0), (xmax, 0), ..arrow-style, name: "x-axis")
line((0, ymin), (0, ymax), ..arrow-style, name: "y-axis")
// Draw tick marks with labels
line((-0.5, -0.02), (-0.5, 0.02), name: "x-tick")
content((-0.5, -0.1), $-1 / 2$, anchor: "north")
line((0.5, -0.02), (0.5, 0.02), name: "x-tick")
content((0.5, -0.1), $1 / 2$, anchor: "north")
line((-0.02, 1), (0.02, 1), name: "i-tick", stroke: (thickness: 0.6pt))
content("i-tick", $i$, anchor: "north-west", padding: 1pt)
content("B-arc.60%", $B$, fill: red, anchor: "south", padding: (0, 0, 3pt))
content("B-arc.40%", $B'$, fill: red, anchor: "south", padding: (0, 0, 3pt))
// Draw vertical lines A and A' (dark blue)
line(
(-0.5, 0),
(-0.5, ymax),
stroke: (paint: blue),
mark: (end: "stealth", fill: blue, scale: 0.2),
name: "A-line",
)
content("A-line.80%", $A$, fill: blue, anchor: "east", padding: (0, 4pt, 0, 0))
line(
(0.5, 0),
(0.5, ymax),
stroke: (paint: blue),
mark: (end: "stealth", fill: blue, scale: 0.2),
name: "A-prime-line",
)
content("A-prime-line.80%", $A'$, fill: blue, anchor: "west", padding: (0, 0, 0, 4pt))
// Add F₀ labels
content("y-axis.80%", $F_0$, anchor: "west", padding: (0, 0, 0, 2pt))
content((rel: (-0.2, -0.2), to: "B-arc.50%"), $F_0'$)
})