summaryrefslogtreecommitdiff
path: root/graphics/pgf/contrib/spectralsequences/examples/hatcher.tex
blob: c3a43c0656e221073070bbf956330cc09a4fe54a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
%%
%% Package: spectralsequences v1.3.2 2022-02-19
%% Author: Hood Chatham
%% Email: hood@mit.edu
%% Date: 2022-02-19
%% License: Latex Project Public License
%%
%% File: example_hatcher.tex
%%
%%    This comes from Hatcher's spectral sequences book. I think it's a good demonstration of the flexibility of sseqpages.
%%    Thanks to Antonio Ruiz for suggesting it.
%%

\documentclass{spectralsequence-example}
\usepackage{amssymb}
\def\Z{\mathbb{Z}}

\begin{document}
\sseqset{
    0/.sseq style={"0",draw=none},
    homological Serre grading,
    classes={draw=none,inner sep=0.2em},
    %tick gap=0.7em,
}
\begin{sseqdata}[
    name=hatcherex1,
    permanent cycles={draw,minimum width={width("$Z_2$")+0.85em}},
    yscale=0.6,
    axes gap=0.5cm,
    tick gap=1em,
]
\begin{scope}[background,opacity=0.1]
\foreach \n in {1,3,...,9}{
    \fill(-1.3,\n-0.5)--(-1.3,\n+0.5)--(0,\n+0.5)--(\n+0.5,0)--(\n+0.5,-2)--(\n-0.5,-2)--(\n-0.5,0)--(0,\n-0.5)--cycle;
}
\end{scope}

\class["\Z"](0,0)
\foreach\x in {1,3,...,9}{
    \class["\Z_2"](\x,0)
}
\foreach \x in {2,4,...,8}{
    \class[0](\x,0)
}
\foreach\y in {1,3,...,9}{
    \pgfmathparse{9-\y}
    \let\xmax\pgfmathresult
    \foreach\x in {0,...,\xmax}{
        \class["\Z_2"](\x,\y)
    }
}

\foreach \y in {2,4,...,8}{
    \pgfmathparse{9-\y}
    \let\xmax\pgfmathresult
    \foreach\x in {0,...,\xmax}{
        \class[0](\x,\y)
    }
}

\foreach \x in {3,5,...,9}{
    \d2(\x,0)
}

\d3(4,1)
\d3(6,1)
\d3(8,1)
\d3(4,3)
\d3(6,3)
\d3(4,5)
\end{sseqdata}
\printpage[name=hatcherex1,page=0]

\vskip30pt

\begin{sseqdata}[
    name=hatcherex2,
    yscale=0.6,
    x axis gap=0.3cm,
]

\begin{scope}[background,opacity=0.1]
\foreach \n in {1,3,...,9}{
    \fill(-1.3,\n-0.5)--(-1.3,\n+0.7)--(0,\n+0.7)--(\n+0.5,0)--(\n+0.5,-2)--(\n-0.5,-2)--(\n-0.5,0)--(0,\n-0.5)--cycle;
}
\end{scope}


\foreach\x in {0,2,...,8}{
    \class["\Z"](\x,0)
}
\foreach \x in {1,3,...,9}{
    \class[0](\x,0)
}
\foreach\y in {1,3,...,9}{
    \pgfmathparse{9-\y}
    \let\xmax\pgfmathresult
    \foreach\x in {0,...,\xmax}{
        \pgfmathparse{int(mod(\x,2))}
        \ifnum\pgfmathresult=0\relax
            \class["\Z_2"](\x,\y)
        \else
            \class[0](\x,\y)
        \fi
    }
}

\d2(2,0)
\foreach \x in {4,6,...,8}{
    \foreach\r in {2,4,...,\x}{
        \d\r(\x,0)
        \replaceclass["\Z"](\x,0)
    }
}

\foreach \y in {2,4,...,8}{
    \pgfmathparse{9-\y}
    \let\xmax\pgfmathresult
    \foreach\x in {0,...,\xmax}{
        \class[0](\x,\y)
    }
}

\end{sseqdata}
\printpage[name=hatcherex2,page=0]
\end{document}