├── .gitignore ├── README.md ├── demo ├── ast.tex ├── cd.tex ├── matrix.tex ├── mc.tex ├── mutual.tex ├── petri.tex ├── proc.tex ├── scc.tex └── tso.tex └── slide.tex /.gitignore: -------------------------------------------------------------------------------- 1 | ## Core latex/pdflatex auxiliary files: 2 | *.aux 3 | *.lof 4 | *.log 5 | *.lot 6 | *.fls 7 | *.out 8 | *.toc 9 | 10 | ## Intermediate documents: 11 | *.dvi 12 | *-converted-to.* 13 | # these rules might exclude image files for figures etc. 14 | # *.ps 15 | # *.eps 16 | *.pdf 17 | 18 | ## Bibliography auxiliary files (bibtex/biblatex/biber): 19 | *.bbl 20 | *.bcf 21 | *.blg 22 | *-blx.aux 23 | *-blx.bib 24 | *.brf 25 | *.run.xml 26 | 27 | ## Build tool auxiliary files: 28 | *.fdb_latexmk 29 | *.synctex 30 | *.synctex.gz 31 | *.synctex.gz(busy) 32 | *.pdfsync 33 | 34 | ## Auxiliary and intermediate files from other packages: 35 | 36 | 37 | # algorithms 38 | *.alg 39 | *.loa 40 | 41 | # achemso 42 | acs-*.bib 43 | 44 | # amsthm 45 | *.thm 46 | 47 | # beamer 48 | *.nav 49 | *.snm 50 | *.vrb 51 | 52 | #(e)ledmac/(e)ledpar 53 | *.end 54 | *.[1-9] 55 | *.[1-9][0-9] 56 | *.[1-9][0-9][0-9] 57 | *.[1-9]R 58 | *.[1-9][0-9]R 59 | *.[1-9][0-9][0-9]R 60 | *.eledsec[1-9] 61 | *.eledsec[1-9]R 62 | *.eledsec[1-9][0-9] 63 | *.eledsec[1-9][0-9]R 64 | *.eledsec[1-9][0-9][0-9] 65 | *.eledsec[1-9][0-9][0-9]R 66 | 67 | # glossaries 68 | *.acn 69 | *.acr 70 | *.glg 71 | *.glo 72 | *.gls 73 | 74 | # gnuplottex 75 | *-gnuplottex-* 76 | 77 | # hyperref 78 | *.brf 79 | 80 | # knitr 81 | *-concordance.tex 82 | *.tikz 83 | *-tikzDictionary 84 | 85 | # listings 86 | *.lol 87 | 88 | # makeidx 89 | *.idx 90 | *.ilg 91 | *.ind 92 | *.ist 93 | 94 | # minitoc 95 | *.maf 96 | *.mtc 97 | *.mtc[0-9] 98 | *.mtc[1-9][0-9] 99 | 100 | # minted 101 | _minted* 102 | *.pyg 103 | 104 | # morewrites 105 | *.mw 106 | 107 | # mylatexformat 108 | *.fmt 109 | 110 | # nomencl 111 | *.nlo 112 | 113 | # sagetex 114 | *.sagetex.sage 115 | *.sagetex.py 116 | *.sagetex.scmd 117 | 118 | # sympy 119 | *.sout 120 | *.sympy 121 | sympy-plots-for-*.tex/ 122 | 123 | # TikZ & PGF 124 | *.dpth 125 | *.md5 126 | *.auxlock 127 | 128 | # todonotes 129 | *.tdo 130 | 131 | # xindy 132 | *.xdy 133 | 134 | # WinEdt 135 | *.bak 136 | *.sav 137 | 138 | *.DS_Store 139 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # TikZ 画“图”指南 2 | 3 | 本仓库包含了[这次讲座](https://tuna.moe/event/2020/tikz/)的 LaTeX 源码,请使用 `xelatex` 编译。 4 | -------------------------------------------------------------------------------- /demo/ast.tex: -------------------------------------------------------------------------------- 1 | \begin{forest} 2 | for tree={align=center} 3 | [\t{MethodDef} 4 | [...] 5 | [\t{Type} 6 | [{\t{VOID} \\ ``\t{void}''}] 7 | ] 8 | [...] 9 | [\t{MethodBody} 10 | [\t{StmtList} 11 | [\t{Stmt} 12 | [\t{LocalVarDecl} 13 | [\t{Type} 14 | [\t{BaseType} 15 | [{\t{FLOAT}\\``\t{float}''}] 16 | ] 17 | ] 18 | [\t{VarDecl} 19 | [{\t{ID}\\``\t{SommeCar}''}] 20 | [...] 21 | ] 22 | ] 23 | ] 24 | [\t{Stmt} 25 | [\t{ReturnStmt}, tikz={ 26 | \node [draw=red, rounded corners, fit to=tree,inner sep=0] {}; 27 | } 28 | [{\t{RETURN}\\``\t{return}''}] 29 | [{\t{ID}\\``\t{SommeCar}''}] 30 | ] 31 | ] 32 | ] 33 | ] 34 | ] 35 | \end{forest} 36 | -------------------------------------------------------------------------------- /demo/cd.tex: -------------------------------------------------------------------------------- 1 | % https://tex.stackexchange.com/questions/468894/diagrams-in-category-theory 2 | 3 | \begin{tikzcd}[sep=4em] 4 | A \arrow[r, "b"] \arrow[d, "g"] 5 | & C \arrow[r, "\alpha"] \arrow[d, "\gamma", pos=0.4, swap] 6 | & D \arrow[d, "\beta"] \\ 7 | B \arrow[rru, "h", pos=0.7, swap] 8 | & B' \arrow[r, "\omega"] 9 | & D' 10 | \end{tikzcd} -------------------------------------------------------------------------------- /demo/matrix.tex: -------------------------------------------------------------------------------- 1 | \begin{tikzpicture} 2 | \foreach \x in {1,2,...,5,7,8,...,12} { 3 | \foreach \y in {1,...,5} { 4 | \draw (\x,\y) +(-.5,-.5) rectangle ++(.5,.5); 5 | \draw (\x,\y) node {\x:\y}; 6 | } 7 | } 8 | \end{tikzpicture} -------------------------------------------------------------------------------- /demo/mc.tex: -------------------------------------------------------------------------------- 1 | \usetikzlibrary{automata} 2 | \tikzstyle{mcstate} = [state, fill=gray!20!white] 3 | 4 | \begin{tikzpicture}[draw=Green, very thick, >=latex', auto] 5 | \node [mcstate] (s4) {4}; 6 | \node [mcstate, right=of s4] (s1) {1}; 7 | \node [mcstate, below=of s4] (s2) {2}; 8 | \node [mcstate, right=of s2] (s6) {6}; 9 | \node [mcstate, right=of s1] (s5) {5}; 10 | \node [mcstate, above=of s1] (s3) {3}; 11 | 12 | \draw [->] 13 | (s4) edge [loop left] node {1/3} (s4) 14 | (s4) edge [above] node {1/3} (s1) 15 | (s4) edge node {1/3} (s2) 16 | (s1) edge node {1} (s3) 17 | (s3) edge [above] node {1} (s5) 18 | (s5) edge node {1} (s1) 19 | (s2) edge [bend left] node {1} (s6) 20 | (s6) edge [bend left] node {1/2} (s2) 21 | (s6) edge [loop right] node {1/2} (s6) 22 | ; 23 | \end{tikzpicture} -------------------------------------------------------------------------------- /demo/mutual.tex: -------------------------------------------------------------------------------- 1 | \tikzstyle{my node1} = [state, thick, my node2] 2 | \tikzstyle{my node2} = [my node1, orange] 3 | 4 | \begin{tikzpicture} 5 | \node [my node1] (x) {$x$}; 6 | \node [my node2, right=of x] {$y$}; 7 | \end{tikzpicture} -------------------------------------------------------------------------------- /demo/petri.tex: -------------------------------------------------------------------------------- 1 | \usetikzlibrary{petri} 2 | \tikzstyle{red place} = [place, draw=red!75, fill=red!20] 3 | \tikzstyle{red transition} = [transition, semithick, draw=red!75, fill=red!20] 4 | 5 | \begin{tikzpicture}[node distance=3em, >=stealth', bend angle=30, every loop] 6 | \node [place, tokens=1, label=$p_1$] (p1) {}; 7 | \node [transition, label=$t_1$] (t1) [right=of p1] {}; 8 | \node [place, label=$p_2$] (p2) [right=of t1] {}; 9 | \node [transition, label=right:$t_2$] (t2) [right=of p2] {}; 10 | \node [red place, label=$p_3$] (p3) [above=of t2] {}; 11 | \node [red place, tokens=2, label=below:$p_4$] (p4) [below=of t2] {}; 12 | \node [red transition, label=$t_4$] (t4) [right=of t2] {}; 13 | \node [red place, tokens=1, label=$p_5$] (p5) [right=of t4] {}; 14 | \node [transition, label=$t_3$] (t3) [right=of p4] {}; 15 | 16 | \draw 17 | (p1) edge (t1) 18 | (t1) edge [bend left] (p3) 19 | (t1) edge (p2) 20 | (t1) edge [bend left=5] (p4) 21 | (t1) edge [bend right=5] (p4) 22 | (p2) edge [bend right] (t2) 23 | (t2) edge [bend right] (p2) 24 | (p3) edge (t2) 25 | (p4) edge (t2) 26 | (p4) edge [bend left=10] (t3) 27 | (p4) edge [bend right=10] (t3) 28 | (t3) edge (p5) 29 | ; 30 | 31 | \draw [draw=red!75, fill=red!75] 32 | (t4) edge [bend left] (p3) 33 | (t4) edge [bend right] (p4) 34 | (p5) edge (t4) 35 | ; 36 | \end{tikzpicture} -------------------------------------------------------------------------------- /demo/proc.tex: -------------------------------------------------------------------------------- 1 | \tikzstyle{io} = [rectangle, text centered, text width=7em, fill=green!20] 2 | \tikzstyle{proc} = [rectangle, fill=blue!20, text width=7em, text centered, rounded corners] 3 | \tikzstyle{decision} = [diamond, fill=blue!20, text centered, aspect=2] 4 | \tikzstyle{entity} = [text centered, text width=8em, fill=red!20] 5 | \tikzstyle{line} = [draw, -latex'] 6 | 7 | \begin{tikzpicture}[auto, every text node part/.style={align=center}, every path/.style={->}] 8 | \node [io] (grammar) {(refined) grammar}; 9 | \node [decision, below=of grammar] (ambig) {ambiguous?}; 10 | \node [below right=.5 and .5 of ambig] (stop) {done}; 11 | \node [proc, below=of ambig] (gen) {ambiguous word generator}; 12 | \node [proc, right=of ambig] (synt) {grammar refinement}; 13 | \node [entity, right=4.3 of gen] (select) {user interaction}; 14 | \node [entity, right=4.3 of grammar] (input) {initial grammar}; 15 | \node [below=.25 of select, red] {user}; 16 | 17 | \path [line, red, thick] (input) -- node [above] {input} (grammar); 18 | \path [line] (grammar) -- (ambig); 19 | \path [line] (ambig.east) -| node {no} (stop); 20 | \path [line] (ambig) -- node {yes} (gen); 21 | \path [line] (gen) -- node [below] {ambiguous word \& \\ parse trees} (select); 22 | \path [line, red, thick] (select) -- node [right, pos=0.6] {feedback} (synt); 23 | \path [line] (synt) -- node [right, pos=0.7] {add restrictions} (grammar); 24 | % Draw user rectangle 25 | \draw [red, thick, dashed, rounded corners] 26 | ($(select.south east)+(.25,-.25)$) rectangle ($(input.north west)+(-.25,.25)$); 27 | \end{tikzpicture} 28 | -------------------------------------------------------------------------------- /demo/scc.tex: -------------------------------------------------------------------------------- 1 | \tikzstyle{scc node} = [state, fill=gray!20!white] 2 | 3 | \begin{tikzpicture}[every loop, auto=left, very thick, >=latex', draw=Blue, fill=Blue] 4 | \begin{scope}[local bounding box=scc] 5 | \node [scc node, initial] (s0) {$s_0$}; 6 | \node [scc node, right=of s0] (s1) {$s_1$}; 7 | \draw 8 | (s0) edge [bend left] node {0.5} (s1) 9 | (s1) edge [bend left] node {0.5} (s0) 10 | ; 11 | \begin{pgfonlayer}{background} 12 | \path[fill=blue!20,draw=blue,dashed,thick,rounded corners] 13 | (scc.south west) rectangle 14 | ($(scc.north east) + (0.2cm,0cm)$); 15 | \end{pgfonlayer} 16 | \end{scope} 17 | 18 | \begin{scope}[local bounding box=bscc1] 19 | \node[scc node, right=2.5cm of s1, label=right:$\{d\}$] (s2) {$s_2$}; 20 | \node[scc node, below=of s2, label=right:$\{c\}$] (s5) {$s_5$}; 21 | \draw 22 | (s2) edge [bend left] node {1} (s5) 23 | (s5) edge [bend left] node {1} (s2) 24 | ; 25 | \begin{pgfonlayer}{background} 26 | \path[fill=red!20,draw=red,dashed,thick,rounded corners] 27 | ($(bscc1.south west) - (0cm,0.2cm)$) rectangle 28 | ($(bscc1.north east) + (0cm,0.2cm)$); 29 | \end{pgfonlayer} 30 | \end{scope} 31 | 32 | \begin{scope}[local bounding box=bscc2] 33 | \node[scc node, below=1.3cm of s0, label=left:$\{b\}$] (s3) {$s_3$}; 34 | \draw (s3) edge [loop below] node {1} (s3); 35 | \begin{pgfonlayer}{background} 36 | \path[fill=red!20,draw=red,dashed,thick,rounded corners] 37 | (bscc2.south west) rectangle 38 | ($(bscc2.north east) + (0.2cm,0.2cm)$); 39 | \end{pgfonlayer} 40 | \end{scope} 41 | 42 | \begin{scope}[local bounding box=bscc3] 43 | \node[scc node, below=1.3cm of s1, label=right:$\{b\}$] (s4) {$s_4$}; 44 | \draw (s4) edge [loop below] node {1} (s4); 45 | \begin{pgfonlayer}{background} 46 | \path[fill=red!20,draw=red,dashed,thick,rounded corners] 47 | ($(bscc3.south west) - (0.2cm,0cm)$) rectangle 48 | ($(bscc3.north east) + (0cm,0.2cm)$); 49 | \end{pgfonlayer} 50 | \end{scope} 51 | 52 | \draw 53 | (s1) edge node {0.25} (s2) 54 | (s1) edge node {0.25} (s4) 55 | (s0) edge node {0.5} (s3) 56 | ; 57 | \end{tikzpicture} -------------------------------------------------------------------------------- /demo/tso.tex: -------------------------------------------------------------------------------- 1 | \tikzstyle{executed} = [circle, draw=black, fill=gray] 2 | 3 | \begin{tikzpicture} 4 | \node (i1) {ST}; 5 | \node [below=of i1] (i2) {LD}; 6 | \node [right=of i2] (x1) {}; 7 | \node [right=of x1] (x) {Memory}; 8 | \node [executed, below=of x] (d2) {}; 9 | \node [executed, below=of d2] (d1) {}; 10 | \node [below=of d1] (y) {}; 11 | 12 | \draw [->] (i1) -- (d1); 13 | \draw [->] (i2) -- (d2); 14 | \draw [dashed,-] (x) -- (y); 15 | \end{tikzpicture} -------------------------------------------------------------------------------- /slide.tex: -------------------------------------------------------------------------------- 1 | % !TEX program = xelatex 2 | \documentclass[usenames,xcolor=svgnames,11pt,sans,handout]{beamer} 3 | % \documentclass[usenames,xcolor=svgnames,11pt,sans]{beamer} 4 | \usetheme{Madrid} 5 | \colorlet{theme}{DarkGreen} 6 | \usecolortheme[named=theme]{structure} 7 | \newcommand{\key}[1]{{\color{theme} #1}} 8 | 9 | \usepackage{xeCJK} 10 | \setCJKmainfont{SimHei} 11 | \usepackage[T1]{fontenc} 12 | \usepackage{zi4} 13 | 14 | \usepackage{siunitx} 15 | 16 | \usepackage{listings} 17 | \lstset{ 18 | language=[LaTeX]TeX, 19 | xleftmargin=2em, 20 | keywordstyle=\color{theme}, 21 | basicstyle=\ttfamily, 22 | basewidth={.5em,.5em}, 23 | escapeinside={<@}{@>} 24 | } 25 | 26 | \usepackage{tikz} 27 | \usetikzlibrary{positioning, arrows, shapes, shapes.multipart, backgrounds, calc, automata} 28 | \usepackage{tikz-cd} % for demo/cd.tex 29 | \usepackage{forest} % for demo/ast.tex 30 | 31 | \let\t\texttt 32 | \newcommand{\optional}{$^{\color{theme} ?}$} 33 | 34 | \begin{document} 35 | 36 | % credits 37 | \title{Ti$k$Z 画“图”指南} 38 | \subtitle{(从用户的角度出发)} 39 | \author{Paul} 40 | \date{2020-10-31} 41 | 42 | % contents 43 | \AtBeginSection[] 44 | { 45 | \begin{frame}{目录} 46 | \tableofcontents[currentsection] 47 | \end{frame} 48 | } 49 | 50 | \AtBeginSubsection[] 51 | { 52 | \begin{frame}{目录} 53 | \tableofcontents[currentsubsection] 54 | \end{frame} 55 | } 56 | 57 | % titlepage 58 | \begin{frame} 59 | \titlepage 60 | \end{frame} 61 | 62 | \begin{frame} 63 | \begin{center}\Large 64 | 这是一个\key{技术}和\key{非技术}报告 65 | \end{center} 66 | \end{frame} 67 | 68 | \section{Ti$k$Z 是啥} 69 | 70 | \begin{frame} 71 | \frametitle{口号} 72 | 73 | \begin{quote}\Large 74 | Ti$k$Z ist kein Zeichenprogramm. 75 | 76 | \rightline{-- by Till Tantau} 77 | \end{quote} 78 | \end{frame} 79 | 80 | \begin{frame} 81 | \frametitle{Ti$k$Z 能干啥} 82 | 83 | \begin{itemize} 84 | \item 画(计算机科学里的)树 85 | \item 画(计算机科学里的)图 86 | \item 画统计图、曲线图 87 | \item 画三维图形 88 | \item 画思维导图 89 | \item …… 90 | \end{itemize} 91 | 92 | \pause 93 | \vspace{20pt} 94 | \begin{center}\Large\color{theme} 95 | “Ti$k$Z 画不出来的图,就是不需要画的图” 96 | \end{center} 97 | \end{frame} 98 | 99 | \begin{frame} 100 | \frametitle{常见问题} 101 | 102 | \begin{itemize} 103 | \item 我用 \LaTeX 排版,是不是所有图都要用 Ti$k$Z 画? 104 | \pause 105 | \item Ti$k$Z 和专业作图软件 MS Word/Powerpoint 等相比,谁更好用? 106 | \pause 107 | \item Ti$k$Z 和专业统计软件 MS Excel, Python 等相比,谁更好用? 108 | \end{itemize} 109 | 110 | \pause 111 | \vspace{20pt} 112 | It's up to you: \t{ppt.tex}, or \t{beamer.pptx}, or whatever! 113 | \end{frame} 114 | 115 | \section{例子,例子} 116 | 117 | \begin{frame} 118 | \frametitle{Total Store Order} 119 | 120 | \centering\input{demo/tso.tex} 121 | \end{frame} 122 | 123 | \begin{frame}[fragile] 124 | \frametitle{基本语法} 125 | 126 | \begin{lstlisting} 127 | \node [选项]<@\optional@> (名称)<@\optional@> {文本}; 128 | 129 | \draw [选项]<@\optional@> (起点名称) 连接方式 (终点名称); 130 | \end{lstlisting} 131 | \end{frame} 132 | 133 | \begin{frame} 134 | \frametitle{Markov Chain} 135 | 136 | \centering\input{demo/mc.tex} 137 | \end{frame} 138 | 139 | \begin{frame} 140 | \frametitle{Petri Net} 141 | 142 | \centering\input{demo/petri.tex} 143 | \end{frame} 144 | 145 | \begin{frame} 146 | \frametitle{Process} 147 | 148 | \centering\input{demo/proc.tex} 149 | \end{frame} 150 | 151 | \begin{frame} 152 | \frametitle{常用选项} 153 | 154 | \begin{itemize} 155 | \item 边框:\t{draw},填充:\t{fill} 156 | \item 颜色、粗细、线型:使用“形容词” 157 | \item 位置:\t{below}, \t{above}, \t{left}, \t{right} 158 | \item 结点标签:\t{label} 159 | \item 自动控制箭头标注的位置:\t{auto} 160 | \item 箭头类型:\t{-} 161 | \end{itemize} 162 | \end{frame} 163 | 164 | \begin{frame} 165 | \frametitle{长度单位} 166 | 167 | 除了普通人都知道的(如 \si{cm})以外,还可能用到: 168 | \begin{itemize} 169 | \item \si{pt} (\SI{1}{pt} = \SI{0.351}{mm}) 170 | \item \si{in} (\SI{1}{in} = \SI{25.4}{mm}) 171 | \item \si{em}(当前字体中 M 的宽度) 172 | \item \si{ex}(当前字体中 x 的高度) 173 | \end{itemize} 174 | \end{frame} 175 | 176 | \begin{frame} 177 | \frametitle{Strongly Connected Component} 178 | 179 | \centering\input{demo/scc.tex} 180 | \end{frame} 181 | 182 | \begin{frame} 183 | \frametitle{Commutative Diagram\footnote{\url{https://tex.stackexchange.com/questions/468894/diagrams-in-category-theory}}} 184 | 185 | \centering\input{demo/cd.tex} 186 | \end{frame} 187 | 188 | \begin{frame} 189 | \frametitle{Parse Tree} 190 | 191 | \begin{center} 192 | \footnotesize\input{demo/ast.tex} 193 | \end{center} 194 | \end{frame} 195 | 196 | \begin{frame} 197 | \frametitle{调库} 198 | 199 | \begin{itemize} 200 | \item 常用:\t{positioning, arrows, shapes} 201 | \item 坐标计算:\t{calc} 202 | \item 领域特定:\t{automata}, \t{petri}, \t{circuit}, \t{matrix} 203 | \item 扩展性的宏包:\t{forest}, \t{tikz-cd} 204 | \end{itemize} 205 | \end{frame} 206 | 207 | \begin{frame} 208 | \frametitle{Matrix\footnote{从官方文档中截取的例子}} 209 | 210 | \centering\input{demo/matrix.tex} 211 | \end{frame} 212 | 213 | \begin{frame}[fragile] 214 | \frametitle{Mutual References} 215 | 216 | \lstinputlisting{demo/mutual.tex} 217 | 218 | \begin{center} 219 | % \input{demo/mutual.tex} 220 | \end{center} 221 | \end{frame} 222 | 223 | \section{总结} 224 | 225 | \begin{frame} 226 | \frametitle{学习资料} 227 | 228 | \begin{itemize} 229 | \item \t{texdoc tikz} 230 | \item \url{https://texample.net/tikz/examples/} 231 | \end{itemize} 232 | \end{frame} 233 | 234 | \begin{frame} 235 | \frametitle{Ti$k$Z 使用技巧} 236 | 237 | \begin{itemize} 238 | \item 写代码前手画草图 239 | \pause 240 | \item 错误信息有时候有用,没用的时候看看是不是语法错了 241 | \pause 242 | \item 方向不对,多试几次 243 | \end{itemize} 244 | \end{frame} 245 | 246 | \begin{frame} 247 | \frametitle{Repo} 248 | 249 | \centering\Large 250 | 251 | \url{https://github.com/paulzfm/TikZ-Tunight} 252 | 253 | \vspace{10pt} 254 | Check the \key{main} branch! 255 | \end{frame} 256 | 257 | \end{document} --------------------------------------------------------------------------------