├── .gitignore ├── LaTeX-cn ├── Bib.bib ├── Head.tex ├── LaTeX-cn.tex ├── chapters │ ├── LaTeX-Advanced-Skills.tex │ ├── LaTeX-Basics.tex │ ├── Play-with-Math.tex │ ├── TikZ.tex │ └── To-Readers.tex └── tikz │ ├── Py3-matplotlib-0.png │ ├── Py3-matplotlib-1.png │ ├── Py3-matplotlib-10.png │ ├── Py3-matplotlib-11.png │ ├── Py3-matplotlib-12.png │ ├── Py3-matplotlib-13.png │ ├── Py3-matplotlib-14.png │ ├── Py3-matplotlib-15.png │ ├── Py3-matplotlib-16.png │ ├── Py3-matplotlib-17.png │ ├── Py3-matplotlib-18.png │ ├── Py3-matplotlib-19.png │ ├── Py3-matplotlib-2.png │ ├── Py3-matplotlib-20.png │ ├── Py3-matplotlib-21.png │ ├── Py3-matplotlib-22.png │ ├── Py3-matplotlib-23.png │ ├── Py3-matplotlib-24.png │ ├── Py3-matplotlib-25.png │ ├── Py3-matplotlib-26.png │ ├── Py3-matplotlib-27.png │ ├── Py3-matplotlib-28.png │ ├── Py3-matplotlib-29.png │ ├── Py3-matplotlib-3.png │ ├── Py3-matplotlib-30.png │ ├── Py3-matplotlib-31.png │ ├── Py3-matplotlib-32.png │ ├── Py3-matplotlib-33.png │ ├── Py3-matplotlib-34.png │ ├── Py3-matplotlib-35.png │ ├── Py3-matplotlib-36.png │ ├── Py3-matplotlib-37.png │ ├── Py3-matplotlib-38.png │ ├── Py3-matplotlib-39.png │ ├── Py3-matplotlib-4.png │ ├── Py3-matplotlib-40.png │ ├── Py3-matplotlib-41.png │ ├── Py3-matplotlib-42.png │ ├── Py3-matplotlib-43.png │ ├── Py3-matplotlib-44.png │ ├── Py3-matplotlib-45.png │ ├── Py3-matplotlib-46.png │ ├── Py3-matplotlib-47.png │ ├── Py3-matplotlib-48.png │ ├── Py3-matplotlib-49.png │ ├── Py3-matplotlib-5.png │ ├── Py3-matplotlib-50.png │ ├── Py3-matplotlib-51.png │ ├── Py3-matplotlib-52.png │ ├── Py3-matplotlib-53.png │ ├── Py3-matplotlib-54.png │ ├── Py3-matplotlib-55.png │ ├── Py3-matplotlib-56.png │ ├── Py3-matplotlib-57.png │ ├── Py3-matplotlib-58.png │ ├── Py3-matplotlib-59.png │ ├── Py3-matplotlib-6.png │ ├── Py3-matplotlib-60.png │ ├── Py3-matplotlib-61.png │ ├── Py3-matplotlib-62.png │ ├── Py3-matplotlib-63.png │ ├── Py3-matplotlib-64.png │ ├── Py3-matplotlib-65.png │ ├── Py3-matplotlib-66.png │ ├── Py3-matplotlib-67.png │ ├── Py3-matplotlib-68.png │ ├── Py3-matplotlib-69.png │ ├── Py3-matplotlib-7.png │ ├── Py3-matplotlib-70.png │ ├── Py3-matplotlib-71.png │ ├── Py3-matplotlib-72.png │ ├── Py3-matplotlib-73.png │ ├── Py3-matplotlib-74.png │ ├── Py3-matplotlib-75.png │ ├── Py3-matplotlib-76.png │ ├── Py3-matplotlib-77.png │ ├── Py3-matplotlib-78.png │ ├── Py3-matplotlib-79.png │ ├── Py3-matplotlib-8.png │ ├── Py3-matplotlib-80.png │ ├── Py3-matplotlib-81.png │ ├── Py3-matplotlib-82.png │ ├── Py3-matplotlib-83.png │ ├── Py3-matplotlib-84.png │ ├── Py3-matplotlib-85.png │ ├── Py3-matplotlib-86.png │ ├── Py3-matplotlib-87.png │ ├── Py3-matplotlib-88.png │ ├── Py3-matplotlib-89.png │ ├── Py3-matplotlib-9.png │ ├── Py3-matplotlib-90.png │ ├── Py3-matplotlib-91.png │ ├── Py3-matplotlib-92.png │ ├── Py3-matplotlib-93.png │ ├── Py3-matplotlib-94.png │ ├── Py3-matplotlib-95.png │ ├── Py3-matplotlib-96.png │ ├── Py3-matplotlib-97.png │ ├── Py3-matplotlib-98.png │ ├── Py3-matplotlib.gif │ ├── Texcharbox.pdf │ ├── enumitemsep.pdf │ └── geometry-paper.tex └── Readme.md /.gitignore: -------------------------------------------------------------------------------- 1 | # LaTeX: 2 | *.pdf 3 | *.toc 4 | *.log 5 | *.aux 6 | *.out 7 | *.gz 8 | *.toc 9 | *.ind 10 | *.idx 11 | *.ilg 12 | *.ptc 13 | *.nav 14 | *.snm 15 | *.vrb 16 | *.bbl 17 | *.blg 18 | *.lof 19 | *.lot 20 | *.listing 21 | 22 | # Ignored Project 23 | githubPush-cn 24 | html-cn 25 | python-cn 26 | Markdown-en 27 | Vim-cn 28 | 29 | 30 | !LaTeX-cn/tikz/*.png 31 | !LaTeX-cn/tikz/*.pdf 32 | !python-matplotlib-en/mpl-image/*.pdf -------------------------------------------------------------------------------- /LaTeX-cn/Bib.bib: -------------------------------------------------------------------------------- 1 | @book{frank2004latex, 2 | title={The \LaTeX\ companion}, 3 | author={Mittelbach, Frank and Goossens, Michel and Braams, Johannes and Carlisle, David and Rowley, Chris}, 4 | year={2004}, 5 | publisher={Addison-Wesley Professional} 6 | } 7 | 8 | @manual{partl2016, 9 | author={Hubert Partl and Irene Hyna and Elisabeth Schlegl}, 10 | title={一份不太简短的\LaTeX\ 2$\varepsilon$介绍}, 11 | organization={China\TeX 论坛译}, 12 | year={2016}, 13 | note={\\ 14 | English: \url{https://www.ctan.org/tex-archive/info/lshort/english}\\ 15 | 中文: \url{https://github.com/CTeX-org/lshort-cn/releases} 16 | } 17 | } 18 | 19 | @manual{Casteleyn2016tikz, 20 | author={Jean Pierre Casteleyn}, 21 | title={Visual TikZ (version 0.62)}, 22 | organization={IUT Génie Thermique et Énergie}, 23 | year={2016}, 24 | note={ 25 | \url{http://tug.ctan.org/info/visualtikz/VisualTikZ.pdf} 26 | } 27 | } 28 | 29 | @book{lamport1994latex, 30 | title={\LaTeX: A Document Preparation System, 2/e}, 31 | author={Lamport, Leslie}, 32 | year={1994}, 33 | publisher={Pearson Education India} 34 | } 35 | 36 | @book{LHY2013latex, 37 | title={\LaTeX\ 入门}, 38 | author={刘海洋}, 39 | year={2013}, 40 | publisher={电子工业出版社} 41 | } 42 | 43 | @manual{tikzmanual, 44 | title={TikZ and PGF Packages: Manual for version 3.0.1a}, 45 | author={Till Tantau}, 46 | year={2015} 47 | } 48 | -------------------------------------------------------------------------------- /LaTeX-cn/Head.tex: -------------------------------------------------------------------------------- 1 | % safe参数解决与\!在内的多个冲突 2 | % \sups命令可能被重定义,xeCJK放在tipa后 3 | \RequirePackage[safe]{tipa} 4 | 5 | \documentclass[a4paper, zihao=-4, linespread=1]{ctexrep} 6 | \renewcommand{\CTEXthechapter}{\thechapter} 7 | % 最小行间间距设定 8 | \setlength{\lineskiplimit}{3pt} 9 | \setlength{\lineskip}{3pt} 10 | 11 | % 中文支持 12 | \setCJKmainfont[BoldFont=Source Han Serif SC Bold]{Source Han Serif SC} 13 | \xeCJKsetup{CJKmath=true} 14 | \setCJKmathfont{KaiTi} % 数学环境中使用楷体 15 | \newCJKfontfamily[zhxinwei]\xinwei{STXinwei} % 定义新字体 16 | 17 | % 颜色 18 | \usepackage[table]{xcolor} 19 | \newcommand{\scol}[1]{\colorbox{#1}{\rule{0em}{1ex}}\,#1} 20 | 21 | % 首字下沉 22 | \usepackage{lettrine} 23 | 24 | % 分栏 25 | \usepackage{multicol} 26 | \setlength{\columnsep}{20pt} 27 | \setlength{\columnseprule}{0.4pt} 28 | 29 | % 数学环境 30 | \usepackage{mathdots} % 数学省略号,会重定义 dddot 和 ddddot 31 | \usepackage{amsmath} 32 | \newcommand{\ue}{\mathrm{e}} 33 | \newcommand{\ud}{\mathop{}\negthinspace\mathrm{d}} % 微分号 34 | \usepackage{amssymb} 35 | \usepackage{mathrsfs} % 线性代数字体 36 | % overline的替代命令 37 | \newcommand{\closure}[2][3]{{}\mkern#1mu\overline{\mkern-#1mu#2}} 38 | \usepackage{yhmath} % \wideparen命令:弧AB 39 | \usepackage{mathtools} % dcases环境,prescript命令 40 | \usepackage{amsthm} % 定理环境 41 | \theoremstyle{definition}\newtheorem{laws}{Law}[section] 42 | \theoremstyle{plain}\newtheorem{ju}[laws]{Jury} 43 | \theoremstyle{remark}\newtheorem*{marg}{Margaret} 44 | \usepackage{esint} % 多重积分,需放在amsmath后 45 | % 箭头与长等号 46 | \usepackage{extarrows} 47 | % 中括号的类二项式命令 48 | \newcommand{\Bfrac}[2]{\genfrac{[}{]}{0pt}{}{#1}{#2}} 49 | 50 | % 下划线宏包 51 | \usepackage[normalem]{ulem} 52 | % LaTeX符号宏包 53 | \usepackage{hologo} 54 | \newcommand{\xelatex}{\Hologo{XeLaTeX}} 55 | \newcommand{\bibtex}{\Hologo{BibTeX}} 56 | \newcommand{\biber}{\Hologo{biber}} 57 | \newcommand{\tikzz}{Ti\textit{k}Z} 58 | \newcommand{\bz}{B\'ezier} 59 | % 其他符号 60 | \usepackage{wasysym} 61 | % 带箱小页 62 | \usepackage{boxedminipage} 63 | % 绘图 64 | \usepackage{tikz} 65 | \usetikzlibrary{calc,intersections,positioning,angles,quotes,decorations.pathmorphing,fit,backgrounds,through,svg.path,topaths,patterns} 66 | \newcommand{\tikzline}[1]{{#1\tikz{\draw[#1,line width=9](0,0)--(0.5,0);}}, } 67 | % 最后一页 68 | \usepackage{lastpage} 69 | 70 | % 奇怪的小定义 71 | \newcommand{\dpar}{\\ \mbox{}} % 空两行 72 | \newcommand{\qd}[1]{{\bfseries{#1}}} % 强调 73 | \newcommand{\co}[1]{{\bfseries{#1}}} % Style of concept 74 | \newcommand{\RED}[1]{{\color{cyan}{#1}}} 75 | \newcommand{\cmmd}[1]{\fbox{\texttt{\char92{}#1}}} 76 | \newcommand{\charef}[1]{第\ref{#1}章} 77 | \newcommand{\secref}[1]{第\ \ref{#1}\ 节} 78 | \newcommand{\pref}[1]{第\pageref{#1}页} 79 | \newcommand{\fref}[1]{图\ref{#1}} 80 | \newcommand{\tref}[1]{表\ref{#1}} 81 | 82 | % Quote 环境 83 | \newenvironment{QuoteEnv}[2][] 84 | {\newcommand\Qauthor{#1}\newcommand\Qref{#2}} 85 | {\medskip\begin{flushright}\small ——~\Qauthor\\ 86 | \emph{\Qref}\end{flushright}} 87 | % 字体调用 88 | \newcommand{\myfont}[2]{{\fontfamily{#1}\selectfont #2}} 89 | 90 | % 编号列表宏包,并自定义了三个列表 91 | \usepackage[inline]{enumitem} 92 | \setlist[enumerate]{font=\bfseries,itemsep=0pt} 93 | \setlist[itemize]{font=\bfseries,leftmargin=\parindent} 94 | \setlist[description]{font=\bfseries\uline,labelindent=\parindent,itemsep=0pt,parsep=0pt,topsep=0pt,partopsep=0pt} 95 | 96 | \newenvironment{fead}{ 97 | \begin{description}[font=\bfseries\uline,labelindent=\parindent,itemsep=0pt,parsep=0pt,topsep=0pt,partopsep=0pt]} 98 | {\end{description}} 99 | % 带宽度的 100 | \newenvironment{para}{ 101 | \begin{description}[font=\bfseries\ttfamily,itemsep=0pt,parsep=0pt,topsep=0pt,partopsep=0pt]} 102 | {\end{description}} 103 | \newenvironment{feae}{ 104 | \begin{enumerate}[font=\bfseries,labelindent=0pt,itemsep=0pt,parsep=0pt,topsep=0pt,partopsep=0pt]} 105 | {\end{enumerate}} 106 | \newenvironment{feai}{ 107 | \begin{itemize}[font=\bfseries,itemsep=0pt,parsep=0pt,topsep=0pt,partopsep=0pt]} 108 | {\end{itemize}} 109 | \newenvironment{inlinee} 110 | {\begin{enumerate*}[label=(\arabic*), font=\rmfamily, before=\unskip{:},itemjoin={{;}},itemjoin*={{,以及:}}]} 111 | {\end{enumerate*}。} 112 | 113 | % 目录和章节样式 114 | \usepackage{titlesec} 115 | \usepackage{titletoc} % 用于目录 116 | 117 | \titlecontents{chapter}[1.5em]{}{\contentslabel{1.5em}}{\hspace*{-2em}}{\hfill\contentspage} 118 | \titlecontents{section}[3.3em]{}{\contentslabel{1.8em}} 119 | {\hspace*{-2.3em}}{\titlerule*[8pt]{$\cdot$}\contentspage} 120 | \titlecontents*{subsection}[2.5em]{\small}{\thecontentslabel{} }{}{, \thecontentspage}[;\qquad][.] 121 | % 章节样式 122 | \setcounter{secnumdepth}{3} % 一直到subsubsection 123 | \newcommand{\chaformat}[1]{% 124 | \parbox[b]{.5\textwidth}{\hfill\bfseries #1}% 125 | \quad\rule[-12pt]{2pt}{70pt}\quad 126 | {\fontsize{60}{60}\selectfont\thechapter}} 127 | \titleformat{\chapter}[block]{\hfill\LARGE\sffamily}{}{0pt}{\chaformat}[\vspace{2.5pc}\normalsize 128 | \startcontents\setlength{\lineskiplimit}{0pt}\printcontents{}{1}{\setcounter{tocdepth}{2}\songti}] 129 | \titleformat*{\section}{\centering\Large\bfseries} 130 | \titleformat{\subsubsection}[hang]{\bfseries\large}{\rule{1.5ex}{1.5ex}}{0.5em}{} 131 | % 扩展章节 132 | \newcommand{\starsec}{\noindent\fbox{\S\textit{注意:本章节是一个扩展阅读章节。}} 133 | \\ \mbox{}} 134 | 135 | \renewcommand{\contentsname}{目录} 136 | \renewcommand{\tablename}{表} 137 | \renewcommand\arraystretch{1.2} % 表格行距 138 | \renewcommand{\figurename}{图} 139 | % 设置不需要浮动体的表格和图像标题 140 | \setlength{\abovecaptionskip}{5pt} 141 | \setlength{\belowcaptionskip}{3pt} 142 | \makeatletter 143 | \newcommand\figcaption{\def\@captype{figure}\caption} 144 | \newcommand\tabcaption{\def\@captype{table}\caption} 145 | \makeatother 146 | % 图表 147 | \usepackage{array,multirow,makecell} 148 | \setlength\extrarowheight{2pt} % 行高增加 149 | \usepackage{diagbox} 150 | \usepackage{longtable} 151 | \usepackage{graphicx,wrapfig} 152 | \graphicspath{{./tikz/}} 153 | \usepackage{animate} 154 | \usepackage{caption,subcaption} 155 | \captionsetup[sub]{labelformat=simple} 156 | \renewcommand{\thesubtable}{(\alph{subtable})} 157 | % 三线表 158 | \usepackage{booktabs} 159 | 160 | % 页面修正宏包 161 | \usepackage{geometry} 162 | \geometry{vmargin = 1in} 163 | 164 | % 代码环境 165 | \usepackage{listings} 166 | % 复制代码时不复制行号 167 | \usepackage{accsupp} 168 | \newcommand{\emptyaccsupp}[1]{\BeginAccSupp{ActualText={}}#1\EndAccSupp{}} 169 | \usepackage{tcolorbox} 170 | \tcbuselibrary{listings,skins,breakable,xparse} 171 | 172 | % global style 173 | \lstset{ 174 | basicstyle=\small\ttfamily, 175 | % Word styles 176 | keywordstyle=\color{blue}, 177 | commentstyle=\color{green!50!black}, 178 | columns=fullflexible, % Avoid too sparse word spaces 179 | keepspaces=true, 180 | % Numbering 181 | numbers=left, 182 | numberstyle=\tiny\color{red!75!black}\emptyaccsupp, 183 | % Lines and Skips 184 | aboveskip=0pt plus 6pt, 185 | belowskip=0pt plus 6pt, 186 | breaklines=true, 187 | breakatwhitespace=true, 188 | emptylines=1, % Avoid >1 consecutive empty lines 189 | escapeinside=`` 190 | } 191 | 192 | % TikZ Language Hint 193 | \lstdefinelanguage{tikzlang}{ 194 | sensitive=true, 195 | morecomment=[n]{[}{]}, % nested comment 196 | morekeywords={ 197 | draw,clip,filldraw,path,node,coordinate,foreach,pic, 198 | tikzset 199 | } 200 | } 201 | 202 | % 对于 tcolorbox 中 listings 库的 ''tcblatex'' style 的重现, 203 | % 添加了新的关键词 204 | \lstdefinestyle{latexcn}{ 205 | language=[LaTeX]TeX, 206 | % More Keywords 207 | classoffset=0, 208 | texcsstyle=*\color{blue}, 209 | moretexcs={ 210 | % LaTeX extension 211 | chapter,section,subsection,setlength, 212 | thechapter,thesection,thesubsection,theequation, 213 | chaptermark,chaptername,appendix, 214 | bibname,refname,bibpreamble,bibfont,citenumfont,bibnumfmt,bibsep, 215 | }, 216 | classoffset=1, 217 | texcsstyle=*\color{orange!75!black}, 218 | moretexcs={ 219 | % XeCJK & CTeX 220 | xeCJKsetup,setCJKmainfont,newCJKfontfamily,CJKfontspec, 221 | CTEXthechapter,songti,heiti,fangsong,kaishu,yahei,lishu,youyuan, 222 | % AMSmath / AMSsymb / AMSthm 223 | middle,text,tag,boldsymbol,mathbb,dddot,ddddot,iint,varoiint, 224 | dfrac,tfrac,cfrac,leftroot,uproot,underbracket,xleftarrow,xrightarrow, 225 | overset,underset,sideset,mathring,leqslant,geqslant,because,therefore, 226 | shortintertext,binom,dbinom,implies,thesubequation, 227 | impliedby,genfrac,theoremstyle,qedhere, 228 | % Other math packages 229 | wideparen,intertext, 230 | xlongequal,xLeftrightarrow,xleftrightarrow,xLongleftarrow,xLongrightarrow, 231 | % xcolor 232 | definecolor,color,textcolor,colorbox,fcolorbox, 233 | % hyperref 234 | hyperref,autoref,href,url,nolinkurl, 235 |   % Graph & Table 236 | includegraphics,graphicspath,scalebox,rotatebox,animategraphics, 237 | newcolumntype,arraybackslash,multirow,captionsetup, 238 | thead,multirowcell,makecell,Xhline,Xcline,diagbox, 239 | toprule,midrule,bottomrule,DeclareFloatingEnvironment, 240 | % ulem 241 | uline,uuline,dashuline,dotuline,uwave,sout,xout, 242 | % fancyhdr 243 | lhead,chead,rhead,lfoot,cfoot,rfoot, 244 | fancyhf,fancyhead,fancyfoot,fancypagestyle, 245 | % fontspec 246 | newfontfamily, 247 | % titlesec & titletoc 248 | titlelabel,titleformat,titlespacing,titleline,titlerule,dottecontents,titlecontents, 249 | % enumitem 250 | setlist, 251 | % Listings & tcolorbox 252 | lstdefinelanguage,lstdefinestyle,lstset,lstnewenvironment, 253 | tcbuselibrary,newtcblisting,newtcbox,DeclareTCBListing 254 | % citation & index: natbib, imakeidx 255 | setcitestyle,printindex, 256 | % Other packages 257 | hologo,lettrine,endfirsthead,endhead,endlastfoot,columncolor,rowcolors,modulolinenumbers,MakeShortVerb,tikz,Hologo 258 | } 259 | } 260 | 261 | % cmd & envi 262 | \newtcbox{\latexline}[1][green]{on line,before upper=\ttfamily\char`\\, 263 | arc=0pt,outer arc=0pt,colback=#1!10!white,colframe=#1!50!black, 264 | boxsep=0pt,left=1pt,right=1pt,top=1pt,bottom=1pt, 265 | boxrule=0pt,bottomrule=1pt,toprule=1pt} 266 | \newtcbox{\envi}[1][violet!70!cyan]{on line,before upper=\ttfamily, 267 | arc=0pt,outer arc=0pt,colback=#1!10!white,colframe=#1!50!black, 268 | boxsep=0pt,left=1pt,right=1pt,top=1pt,bottom=1pt, 269 | boxrule=0pt,bottomrule=1pt,toprule=1pt} 270 | % pkg 271 | \newtcbox{\pkg}[1][orange!70!red]{on line,before upper={\rule[-0.2ex]{0pt}{1ex}\ttfamily}, 272 | arc=0.8ex,colback=#1!30!white,colframe=#1!50!black, 273 | boxsep=0pt,left=1.5pt,right=1.5pt,top=1pt,bottom=1pt, 274 | boxrule=1pt} 275 | \newcommand{\tikzkw}[1]{\texttt{#1}} 276 | 277 | % tcblisting definitions 278 | \newtcblisting{latex}{breakable,skin=bicolor,colback=gray!30!white, 279 | colbacklower=white,colframe=cyan!75!black,listing only, 280 | left=6mm,top=2pt,bottom=2pt,fontupper=\small, 281 | listing options={style=latexcn} 282 | } 283 | 284 | \NewTCBListing{codeshow}{ !O{listing side text} }{ 285 | skin=bicolor,colback=gray!30!white, 286 | colbacklower=pink!50!yellow,colframe=cyan!75!black, 287 | valign lower=center, 288 | left=6mm,righthand width=0.4\linewidth,fontupper=\small, 289 | % listing style 290 | listing options={style=latexcn},#1, 291 | } 292 | 293 | % Fix solution from the tcolorbox package author 294 | \makeatletter 295 | \tcbset{ 296 | tikz upper/.style={before upper=\centering\tcb@shield@externalize\begin{tikzpicture}[{#1}],after upper=\end{tikzpicture}},% 297 | tikz lower/.style={before lower=\centering\tcb@shield@externalize\begin{tikzpicture}[{#1}],after lower=\end{tikzpicture}},% 298 | } 299 | \makeatother 300 | 301 | % xparse library required 302 | \NewTCBListing{tikzshow}{ O{} }{ 303 | tikz lower={#1}, 304 | halign lower=center,valign lower=center, 305 | skin=bicolor,colback=gray!30!white, 306 | colbacklower=white,colframe=cyan!75!black, 307 | left=6mm,righthand width=3.5cm,listing outside text, 308 | listing options={language=tikzlang} 309 | } 310 | 311 | \NewTCBListing{tikzshowenvi}{ O{} }{ 312 | halign lower=center,valign lower=center, 313 | skin=bicolor,colback=gray!30!white, 314 | colbacklower=white,colframe=cyan!75!black, 315 | left=6mm,righthand width=3.5cm,listing outside text, 316 | listing options={language=tikzlang},#1 317 | } 318 | % inline tikz draw 319 | %\newcommand{\tikzline}{def} 320 | 321 | % 附录 322 | % \usepackage{appendix} 323 | \renewcommand{\appendixname}{App.} 324 | 325 | % 行号 326 | \usepackage{lineno} 327 | 328 | % 索引与参考文献 329 | \usepackage{imakeidx} 330 | \newcommand{\tikzidx}[1]{\index{\char`\\ #1}} 331 | \newcommand{\tikzoptstyle}[1]{\texttt{#1}} 332 | \newcommand{\tikzopt}[2][draw]{\tikzoptstyle{#2}\index{\char`\\ #1!#2}\ } 333 | \renewcommand{\indexname}{\tikzz 命令索引} 334 | \makeindex[intoc] 335 | 336 | \bibliographystyle{plain} 337 | \renewcommand{\bibname}{参考文献} 338 | \usepackage[numindex,numbib]{tocbibind} 339 | \usepackage[square,super,sort&compress]{natbib} 340 | 341 | % 引用 342 | \usepackage{hyperref} 343 | \hypersetup{colorlinks, bookmarksopen = true, bookmarksnumbered = true, pdftitle=LaTeX-cn, pdfauthor=K.L Wu, pdfstartview=FitH} 344 | -------------------------------------------------------------------------------- /LaTeX-cn/LaTeX-cn.tex: -------------------------------------------------------------------------------- 1 | %!TEX program = xelatex 2 | 3 | \input{Head} 4 | \title{简单粗暴\LaTeX\ } 5 | \author{K.L Wu\\ 6 | {\kaishu 本手册是\href{https://github.com/wklchris/Note-by-LaTeX}{wklchris-GitHub}的\LaTeX{}-cn项目} 7 | } 8 | \date{当前版本号:v1.6.4-pre\\ 9 | 最后更新于:\today} 10 | 11 | \begin{document} 12 | 13 | \maketitle 14 | 15 | \setlength{\lineskiplimit}{0pt} 16 | \tableofcontents 17 | \setlength{\lineskiplimit}{3pt} 18 | 19 | \chapter{序} 20 | 21 | \noindent{\Huge\xinwei 第一稿序}\dpar\dpar 22 | 23 | 其实在之前我是有一稿手册的,开始撰写的日期大概在2015年4月.但是自己觉得写得太烂,因此索性推倒重写了这一版.这一版的主要特征是: 24 | \begin{feae} 25 | \item 我希望能够吸引初学者快速上手,解决手头的问题.因此去掉了枯燥的讲解和无穷无尽的宏包用法介绍,直接使用实例; 26 | \item 力求突出实用性.当然,也会提点一些可以深入学习的内容,读者可以自行查阅,或者阅读本手册中的扩展阅读章节(即带星号*的章节). 27 | \item 本手册使用的编辑器为\TeX\ Studio,而非之前的商业软件WinEdt. 这使得学习\LaTeX\ 的门槛更低.当然了,你有权使用任何编辑器. 28 | \end{feae} 29 | 30 | 手册主体分为六大部分\cite{LHY2013latex,lamport1994latex,frank2004latex,partl2016,Casteleyn2016tikz,tikzmanual}: 31 | \begin{fead} 32 | \item[写给读者*] 介绍\LaTeX\ 背景、优缺点、适用情形. 33 | \item[基础] 包括标点、缩进、距离、章节、字体、颜色、注释、引用、封面、目录、列表、图表、页面等详细内容. 34 | \item[数学排版] 包括数学符号、公式、编号等内容. 35 | \item[进阶] 主要是自定义命令,帮助你更高效、更简洁地书写你的文档. 36 | \item[\tikzz\ 绘图*] 附加章节,需要读者取消注释后重编译. 37 | \item[附录] 帮助你快速查找一些你想要的东西. 38 | \end{fead} 39 | 40 | 由于工作全部由我一人完成,限于视野,难免存在错漏之处.恳请读者指正.如遇到的手册中无法解决的问题,欢迎向我提出.推荐书目可参考本手册附录. 41 | 42 | 最后,还要感谢在\LaTeX\ 学习中为我解答疑惑的同学,特别是来自\LaTeX\ 度吧的吧友;本手册中许多的解决方案都是由他们提供的.我谨在此记录. 43 | 44 | \vfill 45 | 46 | \begin{flushright} 47 | Mail: wklchris@hotmail.com\dpar 48 | 49 | Chris Wu 50 | 51 | September 17, 2016 于Davis, CA 52 | \end{flushright} 53 | \clearpage 54 | \noindent{\Huge\xinwei 更新日志:}\dpar\dpar 55 | 56 | 版本号以 $x.y.z$ 的形式公示.当$z=0$时,为决定正式 release 的版本. 57 | 58 | v1.6.0 更新 --- 2017年6月15日: 59 | 60 | v1.6.1 更新 --- 2017年8月9日; 61 | 62 | v1.6.2 更新 --- 2017年10月5-15日. 63 | 64 | v1.6.3 更新 --- 2018年3月22日.\dpar 65 | 66 | 以下内容中,未以括号注明的项是在v1.6.0中更新的. 67 | 68 | \begin{feai} 69 | \item 重要更新: 70 | \begin{feai} 71 | \item \textbf{\sout{\tikzz\ 相关的内容停止更新}.原因是现有的其他软件绘图功能强大,导出为 pdf 格式的矢量图后也易于调用;\tikzz\ 相比之下学习成本过高.}\textcolor{red}{\textbf{笔者又决定重启\tikzz\ 章节}}.(v1.6.3) 72 | \item \textbf{重新添加了 \tikzz\ 章节} —— 不过仍是之前弃笔时的版本,预计将于 v1.7 更新. 73 | \item \textbf{增加了加快\xelatex 调用字体速度的方式}.参考“中文支持与CJK字体”一节\texttt{fc-cache}相关内容.(v1.6.1) 74 | \end{feai} 75 | \item 字体更换:思源宋体. 76 | \item 编辑了 Head.tex 文件,使之更易阅读. 77 | \item [添加]宏包\pkg{animate}:在 PDF 中展示动态图.(v1.6.1) 78 | \item [添加]宏包\pkg{tocbibind}: 79 | \begin{feai} 80 | \item 将目录本身编入目录项. 81 | \item 将参考文献章节编号、编入目录项. 82 | \item 将索引章节编号、编入目录项. 83 | \end{feai} 84 | \item [更新]宏包\pkg{dcolumn},更详细说明了如何在表格中使用小数点对齐.(v1.6.2) 85 | \item [更新]宏包\pkg{fancyvbr}:更详细说明了抄录环境\envi{BVerbatim},如何提供居中支持.(v1.6.2) 86 | \item [更新]宏包\pkg{xeCJK}: 87 | \begin{feai} 88 | \item 参数 CJKspace.该功能在新版宏包中已修复. 89 | \item 命令 \latexline{setCJKmainfont},可指定字体文件名. 90 | \end{feai} 91 | \item 数学内容: 92 | \begin{feai} 93 | \item [添加]宏包\pkg{extarrows}:长等号命令. 94 | \item [添加]命令\latexline{numberthis},用于给多行公式中的某行编号.(v1.6.2) 95 | \item [添加]命令\latexline{allowdisplaybreaks},用于支持多行公式环境换页. 96 | \end{feai} 97 | \item 拆分了文档,并修改了“文档拆分”一节的内容.(v1.6.3) 98 | \item 修复了一些错别字与无效的文档内跳转链接. 99 | \end{feai} 100 | 101 | \mbox{} 102 | 103 | 更早版本的更新细节,请到\href{https://github.com/wklchris/Note-by-LaTeX/releases}{Project Release Webpage}浏览. 104 | 105 | % Main Contents 106 | 107 | \include{chapters/To-Readers} 108 | \include{chapters/LaTeX-Basics} 109 | \include{chapters/Play-with-Math} 110 | \include{chapters/LaTeX-Advanced-Skills} 111 | % \include{chapters/TikZ} 112 | 113 | % Appendices 114 | 115 | % 参考文献 116 | \bibliography{Bib} 117 | 118 | % 附录 119 | \clearpage 120 | \appendix 121 | % 重定义附录的chapter样式 122 | \renewcommand{\chaformat}[1]{% 123 | \parbox[b]{.5\textwidth}{\raggedleft\bfseries \S 附录 \\ \vspace{0.2ex} #1} \quad\rule[-12pt]{2pt}{70pt}\quad 124 | {\fontsize{60}{60}\selectfont\thechapter}} 125 | 126 | \chapter{注音符号} 127 | \label{app:phonetic} 128 | % 这里不用>{\ttfamily}而用\verb是为了减少报错可能 129 | \begin{center} 130 | \tabcaption{注音符号与特殊符号} 131 | \begin{tabular}{|*{4}{>{\centering}p{3em} @{-\hspace{1em}} p{3em}|}} 132 | \hline 133 | \texttt{样式} & 命令 & \texttt{样式} & 命令 & \texttt{样式} & 命令 & \texttt{样式} & 命令 \\ 134 | \hline 135 | \=o & \verb|\=o| & \'o & \verb|\'o| & \v o & \verb|\v o| & \`o & \verb|\`o| \\ 136 | \^o & \verb|\^o| & \"o & \verb|\"o| & \.o & \verb|\.o| & \H o & \verb|\H{o}| \\ 137 | \d o & \verb|\d{o}| & \u o & \verb|\u{o}| & \b o & \verb|\b{o}| & \t oo & \verb|\t{oo}|\\ 138 | \multicolumn{2}{|c@{\bf --}}{$\tilde{o}$} & \multicolumn{2}{@{\bf --}c|}{\tt{\$$\backslash$tilde\{o\}\$}} &% 139 | \multicolumn{2}{c@{\bf --}}{$\hat{o}$} & \multicolumn{2}{@{\bf --}c|}{\tt{\$$\backslash$hat\{o\}\$}}\\ 140 | \multicolumn{8}{|c|}{} \\ 141 | \o & \verb|\o| & \O & \verb|\O| & \i & \verb|\i| & \j & \verb|\j| \\ 142 | \aa & \verb|\aa| & \AA & \verb|\AA| & \ae & \verb|\ae| & \AE & \verb|\AE|\\ 143 | \oe & \verb|\oe| & \OE & \verb|\OE| & !` & \verb|!`| & ?` & \verb|?`| \\ 144 | \hline 145 | \end{tabular} 146 | \end{center} 147 | 148 | \mbox{} 149 | 150 | \begin{center} 151 | \tabcaption{国际音标输入表(部分)} 152 | \begin{tabular}{|*{3}{>{\rmfamily}c !{-} >{\ttfamily}p{7.5em}|}} 153 | \hline 154 | \texttt{样式} & 命令 & \texttt{样式} & 命令 & \texttt{样式} & 命令 \\ 155 | \hline 156 | \textdzlig & \char92textdzlig & \textesh & \char92textesh & \textteshlig & \char92textteshlig \\ 157 | \textdyoghlig & \char92textdyoghlig & \textturnv & \char92textturnv & \textschwa & \char92textschwa \\ 158 | \textscriptg & \char92textscriptg & \texttheta & \char92texttheta & \textupsilon & \char92textupsilon \\ 159 | \textscripta & \char92textscripta & \dh & \char92dh & \textepsilon & \char92textepsilon \\ 160 | \textopeno & \char92textopeno & \textyogh & \char92textyogh & \ng & \char92ng \\ 161 | \hline 162 | \multicolumn{2}{|c|}{重音} & \multicolumn{2}{c|}{次重音} & \multicolumn{2}{c|}{长音节} \\ 163 | \textprimstress & \char92{}textprimstress & \textsecstress & \char92textsecstress & \textlengthmark & \char92textlengthmark \\ 164 | \hline 165 | \end{tabular} 166 | \end{center} 167 | 168 | \textit{注:\texttt{\char92dh}命令在非CJK文档中有时编译会出现问题}. 169 | 170 | \chapter{建议与其他} 171 | 172 | 除了参考文献列表中给出的书籍以外,我还推荐你用控制台在\TeX{} Live中能找到的以下书籍: 173 | 174 | \medskip\begin{para} 175 | \item[texdoc usrguide] \TeX\ Live自带的用户手册. 176 | \item[texdoc clsguide] \TeX\ Live自带的文档类和宏包编写手册. 177 | \item[texdoc fntguide] \TeX\ Live自带的字体使用手册. 178 | \item[texdoc symbols-a4] 一份速查表,基本上所有的\LaTeX\ 字符命令都在这里了. 179 | \item[texdoc latexcheat] 很有趣的命令表,只有两页. 180 | \item[texdoc impatient] \emph{\TeX{} for the Impatient}, 一本介绍底层\TeX\ 的书.这也是我阅读的第一本\TeX\ 书,Knuth的\emph{The \TeX\ book}虽然血统正但是难啃啊.本书中译本在:\url{https://bitbucket.org/zohooo/impatient/wiki/Home} 181 | \item[texdoc texbytopic] \emph{\TeX{} by Topic}, 个人觉得不如上面那本,但也许只是叙述方式不一样吧. 182 | \end{para} 183 | \bigskip 184 | 185 | \noindent 你可能还需要的功能: 186 | \begin{description} 187 | \item[\pkg{mhchem}] 该宏包用于输入化学式,提供了\latexline{ce}命令. 188 | \end{description} 189 | 190 | % \tikzz\ 索引 191 | %\setlength{\columnseprule}{0pt} 192 | %\printindex 193 | 194 | \end{document} 195 | -------------------------------------------------------------------------------- /LaTeX-cn/chapters/LaTeX-Basics.tex: -------------------------------------------------------------------------------- 1 | %!TEX root = ../LaTeX-cn.tex 2 | \chapter{\LaTeX{}基础} 3 | \section{第一份文稿} 4 | 5 | 编辑器的配置大概是需要讲解一下的,毕竟对于初学者来说是很头疼的事情。本手册就以\TeX\ Studio为例进行配置。首先你应该安装一个\TeX{} Live,它是完全免费的,网址:\url{http://tug.org/texlive/}. 6 | 7 | 虽然它体积较大,但是却是最一劳永逸、最不需要花时间去配置的方法,同时它大概也是功能支持最强的\LaTeX\ 发行版。 8 | 9 | 打开\TeX\ Studio后,选择选项$\rightarrow$ 设置\TeX\ Studio $\rightarrow$ 构建$\rightarrow$ 默认编译器,选择\xelatex{}. 这主要是基于中文文档编译的考虑,同时\xelatex 也能很好地编译英文文档。我建议始终使用它作为默认编译器。\dpar 10 | 11 | 之后你可以在窗口输入一篇小文档,并保存为tex扩展名的文件进行测试: 12 | \begin{latex} 13 | \documentclass{ctexart} 14 | \begin{document} 15 | Hello, world! 16 | 你好,世界! 17 | \end{document} 18 | \end{latex} 19 | 20 | 点击编译按钮生成,F7查看。生成的pdf在你的tex文件保存目录中。具体各行的含义我们会在后文介绍。 21 | 22 | \section{认识\LaTeX} 23 | \subsection{命令与环境} 24 | \LaTeX\ 中的\co{命令}通常是由一个反斜杠加上命令名称,再加上花括号内的参数构成的(有的命令不带参数,例如:\latexline{TeX})。 25 | \begin{latex} 26 | \documentclass{ctexart} 27 | \end{latex} 28 | 29 | 如果有一些选项是备选的,那么通常会在花括号前用方括号标出。比如: 30 | \begin{latex} 31 | \documentclass[a4paper]{ctexart} 32 | \end{latex} 33 | 34 | 还有一种重要指令叫做\co{环境}。它被定义于控制命令\latexline{begin\{environment\}} 和\latexline{end\{environment\}}间的内容。比如: 35 | \begin{latex} 36 | \begin{document} 37 | ...内容... 38 | \end{document} 39 | \end{latex} 40 | 41 | 环境如果有备选参数,只需要写在\latexline{begin[...]\{name\}}这里就行。 42 | 43 | 注意:不带花括号的命令后面如果想打印空格,请加上\RED{一对内部为空的花括号}再键入空格。否则空格会被忽略。例如:\verb+\LaTeX{} Studio+. 44 | 45 | \subsection{保留字符} 46 | 47 | \LaTeX\ 中有许多字符有着特殊的含义,在你生成文档时不会直接打印。例如每个命令的第一个字符:反斜杠。单独输入一个反斜杠在你的行文中不会有任何帮助,甚至可能产生错误。\LaTeX\ 中的保留字符有: 48 | \begin{center} 49 | \texttt{\# \$ \% \^ \& \_ \{ \} \char92} 50 | \end{center} 51 | 52 | 它们的作用分别是: 53 | \begin{para} 54 | \item[\#{}:] 自定义命令时,用于标明参数序号。 55 | \item[\${}:] 数学环境命令符。 56 | \item[\%{}:] 注释符。在其后的该行命令都会视为注释。如果在回车前输入这个命令,可以防止行末\LaTeX\ 插入一些奇怪的空白符。 57 | \item[\^{}:] 数学环境中的上标命令符。 58 | \item[\&{}:] 表格环境中的跳列符。 59 | \item[\_{}:] 数学环境中的下标命令符。 60 | \item[\{与\}:] 花括号用于标记命令的必选参数,或者标记某一部分命令成为一个整体。 61 | \item[\char92{}:] 反斜杠用于开始各种\LaTeX\ 命令。 62 | \end{para} 63 | 64 | 以上除了反斜杠外,均能用前加反斜杠的形式输出。即你只需要键入: 65 | \begin{center} 66 | \verb|\# \$ \% \^ \& \_ \{ \}| 67 | \end{center} 68 | 69 | 唯独反斜杠的输出比较头痛,你可以尝试: 70 | \begin{codeshow} 71 | $\backslash$ \textbackslash 72 | \texttt{\char92} 73 | \end{codeshow} 74 | 75 | 其中命令\latexline{char[num]}是一个特殊的命令,使用环境需要是tt字体环境,用于输出ASCII码对应的字符;92对应的即反斜杠。你也可以用\latexline{char`}后加字符的方式输出你想输出的命令,但需要包裹在\latexline{texttt}或者\latexline{ttfamily}内。如果想输出的字符是保留字符,需要再加一个反斜杠。 76 | \begin{verbatim} 77 | \texttt{\char`~} % 输出一个波浪线 78 | \texttt{\char`\\} % 输出保留字反斜杠 79 | \texttt{\char`@} % 实际上可直接输入@ 80 | \end{verbatim} 81 | 82 | 另外需要说明的是,上例提及的波浪线{\texttt{\~}}用来输出一个禁止在该处断行的空格,也不能够直接输出。尝试: 83 | \begin{codeshow} 84 | a $\sim$ b 85 | a\~ b 86 | a\~{} b 87 | a\textasciitilde b 88 | \end{codeshow} 89 | 90 | \subsection{导言区} 91 | 任何一份\LaTeX{}文档都应当包含以下结构: 92 | \begin{latex} 93 | \documentclass[`\itshape options`]{doc-class} 94 | \begin{document} 95 | ... 96 | \end{document} 97 | \end{latex} 98 | 99 | 其中,在语句\latexline{begin\{document\}}之前的内容称为\co{导言区}。导言区可以留空,以可以进行一些文档的准备操作。你可以粗浅地理解为:\RED{导言区即模板定义}。\dpar 100 | 101 | 文档类的参数doc-class和可选选项{\textit{options}}有\tref{tab:documentclass}取值: 102 | \begin{table}[!htb] 103 | \centering 104 | \caption{文档类和选项} 105 | \label{tab:documentclass} 106 | \begin{tabular}{p{5em} @{\ -\ } p{24em}} 107 | \hline 108 | \multicolumn{2}{l}{\bfseries doc-class文档类\footnotemark} \\ 109 | \hline 110 | article & 科学期刊,演示文稿,短报告,邀请函。\\ 111 | proc & 基于article的会议论文集。\\ 112 | report & 多章节的长报告、博士论文、短篇书。\\ 113 | book & 书籍。\\ 114 | slides & 幻灯片,使用了大号Scans Serif字体。\\ 115 | \hline 116 | \multicolumn{2}{l}{\bfseries\itshape options} \\ 117 | \hline 118 | 字体 & 默认10pt,可选11pt和12pt.\\ 119 | 页面方向 & 默认竖向portrait,可选横向landscape。\\ 120 | 纸张尺寸 & 默认letterpaper,可选用a4paper, b5paper等。\\ 121 | 分栏 & 默认onecolumn,还有twocolumn。\\ 122 | 双面打印 & 有oneside/twoside两个选项,用于排版奇偶页。article/report默认单面。\\ 123 | 章节分页 & 有openright/openany两个选项,决定是在奇数页开启新页或是任意页开启新页。注意article是没有chapter(``章'')命令的,默认任意页。\\ 124 | 公式对齐 & 默认居中,可改为左对齐fleqn;默认编号居右,可改为左对齐leqno。\\ 125 | 草稿选项 & 默认final,可改为draft,使行溢出的部分显示为黑块。\\ 126 | \hline 127 | \end{tabular} 128 | \end{table} 129 | 130 | 在本文中,多数的文档类提及的均为report/book类。如果有article类将会特别指明。其余的文档类不予说明。本手册排版即使用了report类。\dpar 131 | 132 | 在导言区最常见的是\co{宏包}的加载工作,命令形如:\latexline{usepackage\{package\}}。通俗地讲,宏包是指一系列已经制作好的功能``模块'',在你需要使用一些原生\LaTeX\ 不带有的功能时,只需要调用这些宏包就可以了。比如本文的代码就是利用\pkg{listings}宏包实现的。 133 | 134 | 宏包的具体使用将参在各部分内容说明中进行讲解。如果你想学习一个宏包的使用,按Win+R组合键呼出运行对话框,输入texdoc加上宏包名称即可打开宏包帮助pdf文档。例如:\verb|texdoc xeCJK|。 135 | 136 | \footnotetext{此外还有\pkg{beamer}宏包定义的beamer文档类,常用于创建幻灯片。} 137 | 138 | \subsection{错误的排查} 139 | \label{subsec:debug} 140 | 在编辑器界面上,下方的日志是显示编译过程的地方。在你编译通过后,会出现这样的字样: 141 | \begin{feai} 142 | \item {\qd{Errors错误}}:严重的错误。一般地,编译若通过了,该项是零。 143 | \item {\qd{Warnings警告}}:一些不影响生成文档的瑕疵。 144 | \item {\qd{Bad Boxes坏箱}\footnote{Box是\LaTeX{}中的一个特殊概念,具体将在\hyperref[sec:box]{这里}进行讲解。}}:指排版中出现的长度问题,比如长度超出(Overfull)等。后面的Badness表示错误的严重程度,程度越高数值越大。这类问题需要检查,排除Badness高的选项。 145 | \end{feai} 146 | 147 | 你可以向上翻阅日志记录(即.log文件),来找到Warning开头的记录,或者Overfull/ Underfull开头的记录。这些记录会指出你的问题出在哪一行(比如line 1-2) 或者在pdf的哪一页(比如active [12]。注意,这个12表示计数器计数页码,而不是文件打印出来的真实页数)。此外你还需要了解: 148 | \begin{feai} 149 | \item 值得指出的是,由于\LaTeX{}的编译原理(第一次生成aux文件,第二次再引用它),目录想要合理显示\qd{需要连续编译两次}。在连续编译两次后,你会发现一些Warnings会在第二次编译后消失。在\TeX\ Studio中,你可以只单击一次“构建并查看”,它会检测到文章的变化并自动决定是否需要编译两次。 150 | \item 对于大型文档,寻找行号十分痛苦。你需要学会合理地拆分tex文件,参阅\secref{sec:include}的内容。 151 | \end{feai} 152 | 153 | 这里也推荐宏包\pkg{syntonly},在导言区加入它支持的\latexline{syntaxonly}命令,会只排查语法错误而不生成任何文档,这可以使你更快地编译。不过它似乎不太稳定,例如本文档可以正常编译,但是使用该命令时则会出错。 154 | 155 | \subsection{文件输出} 156 | \LaTeX{}的输出一般推荐pdf格式,由\LaTeX\ 直接生成dvi的方法并不推荐。 157 | 158 | 你在tex文档的文件夹下可能看到的其他文件类型: 159 | \begin{tabbing} 160 | .sty{\hspace{2em}}\=宏包文件\\ 161 | .cls \> 文档类文件。\\ 162 | .aux \> 用于储存交叉引用信息的文件。因此,在更新交叉引用(公式编号、\\ 163 | \> 大纲级别)后,需要编译两次才能正常显示。\\ 164 | .log \> 日志。记录上次编译的信息。\\ 165 | .toc \> 目录文件。\\ 166 | .lof \> 图形目录。\\ 167 | .lot \> 表格目录。\\ 168 | .idx \> 如果文档中包含索引,该文件用于储存索引信息。\\ 169 | .ind \> 索引记录文件。\\ 170 | .ilg \> 索引日志文件。\\ 171 | .bib \> \bibtex 参考文献数据文件。\\ 172 | .bbl \> \bibtex 生成的参考文献记录。\\ 173 | .bst \> \bibtex 模板。\\ 174 | .blg \> \bibtex 日志。\\ 175 | .out \> \texttt{hyperref}宏包生成的pdf书签记录。 176 | \end{tabbing} 177 | 178 | 有时\LaTeX\ 的编译出现异常,你需要删除文件夹下除了tex以外的文件再编译。此外,在某些独占程序打开了以上的文件时(比如用Acrobat打开了pdf),编译可能出现错误。请在编译时确保关闭这些独占程序。 179 | 180 | \section{标点与强调} 181 | 英文符号$|<>+=$一般用于数学环境中,如果在文本中使用,请在它们两侧加上“\$”。如果你在\LaTeX\ 中直接输入大于、小于号而不把它们放在数学环境中,它们并不会被正确地打印。你应该使用\latexline{textgreater}, \latexline{textless}命令。 182 | 183 | 在部分科技文章中,中文的句号可能使用全角圆点“.”\footnote{这个标点是 U+FF0E,称为 FULLWIDTH FULL STOP。},而不是平常的“。”,也不是正常的英文句点“.”。这个符号很难正常输入;你可以先输入正常句点,最后再替换。 184 | 185 | \subsection{引号} 186 | 英文单引号并不使用两个\verb|'|符号组合。左单引号是重音符\verb|`|(键盘上数字1左侧),而右单引号是常用的引号符。英文中,\RED{左双引号就是连续两个重音符}。 187 | 188 | 英文下的引号嵌套需要借助\latexline{thinspace}命令分隔,比如: 189 | \begin{codeshow}[listing side text, listing options={escapeinside=++}] 190 | ``\thinspace`Max' is here.'' 191 | \end{codeshow} 192 | % 这里临时修改了listing的escapeinside, 使得这一行代码也可以被 codeshow 环境表示, 也使得行文风格更加统一 193 | 中文下的单引号和双引号你可以用中文输入法直接输入。 194 | 195 | \subsection{破折、省略号与短横} 196 | 英文的短横分为三种: 197 | \begin{feai} 198 | \item 连字符:输入一个短横:\verb|-|,效果如daughter-in-law 199 | \item 数字起止符:输入两个短横:\verb|--|,效果如:page 1--2 200 | \item 破折号:输入三个短横:\verb|---|,效果如:Listen---I'm serious. 201 | \end{feai} 202 | 203 | 中文的破折号你也许可以直接使用日常的输入方式。中文的省略号同样。但是注意,英文的省略号使用\latexline{ldots}这个命令而不是三个句点。 204 | 205 | \subsection{强调:粗与斜} 206 | \LaTeX\ 中专门有个叫做\latexline{emph\{text\}}的命令,可以强调文本。对于通常的西文文本,上述命令的作用就是斜体。如果你对一段已经这样转换为斜体的文本再使用这个命令,它就会取消斜体,而成为正体。 207 | 208 | 西文中一般采用上述的斜体强调方式而不是粗体,例如在说明书名的时候可能就会使用以上命令。关于字体的更多内容参考\hyperref[sec:font]{字体}这一节。 209 | 210 | \subsection{下划线与删除线} 211 | \LaTeX\ 原生提供的\latexline{underline}命令简直烂的可以,建议你使用\pkg{ulem}宏包下的\texttt{uline}命令代替,它还支持换行文本。\pkg{ulem}宏包还提供了一些实用命令: 212 | 213 | \begin{codeshow} 214 | \uline{下划线} \\ 215 | \uuline{双下划线} \\ 216 | \dashuline{虚下划线} \\ 217 | \dotuline{点下划线} \\ 218 | \uwave{波浪线} \\ 219 | \sout{删除线} \\ 220 | \xout{斜删除线} 221 | \end{codeshow} 222 | 223 | 需要注意的是,\pkg{ulem}宏包重定义了\latexline{emph}命令,\RED{使得原来的加斜强调变成了下划线、原来的两次强调就取消强调变成了两次强调就双下划线}。通过宏包的normalem选项可以取消这个更改:\verb|\usepackage[normalem]{ulem}|。 224 | 225 | \subsection{其他} 226 | 角度符号或者温度符号需要借助数学模式\verb|$...$|输入: 227 | 228 | \begin{codeshow} 229 | $30\,^{\circ}$三角形 \\ 230 | $37\,^{\circ}\mathrm{C}$ 231 | \end{codeshow} 232 | 233 | 欧元符可能需要用到\pkg{textcomp}宏包支持的\latexline{texteuro}命令。 234 | 235 | 其次是千位分隔位,比如\verb|1\,000\,000|。如果你不想它在中间断行就在外侧再加上一个\latexline{mbox}命令:\latexline{mbox\{1\char`\\,000\char`\\,000\}}。也可以使用\pkg{numprint}或者\pkg{siunitx}宏包中的相关命令。 236 | 237 | 再次是注音符号,比如\^o,也常用于拼音声调,参考\hyperref[app:phonetic]{注音符号表}部分的附录内容。如果你想输入音标,请使用tipa宏包\footnote{tipa会重定义\latexline{!}命令,因此请使用\latexline{negthinspace}代替;或在\pkg{xeCJK}与\pkg{amsmath}宏包前加载,并使用safe选项。具体可以参见本手册的 Head.tex 文件。},同样参考附录A。 238 | 239 | 最后,介绍\pkg{hologo}宏包,它可以输出许多\TeX\ 家族标志。其实\LaTeX\ 原生自带了\latexline{LaTeX}, \latexline{TeX}等命令。而hologo宏包支持的命令有: 240 | 241 | \begin{codeshow} 242 | % 大写H表示符号的首字母也大写 243 | \hologo{XeLaTeX} \Hologo{BibTeX} 244 | \end{codeshow} 245 | 246 | \section{格式控制} 247 | 首先了解一下\hologo{LaTeX}的长度单位: 248 | \begin{fead} 249 | \item[pt] point,磅。\label{sec:length} 250 | \item[pc] pica。1pc=12pt,四号字大小 251 | \item[in] inch,英寸。1in=72.27pt 252 | \item[bp] bigpoint,大点。1bp=$\frac{1}{72}$in 253 | \item[cm] centimeter,厘米。1cm=$\frac{1}{2.54}$in 254 | \item[mm] millimeter,毫米。1mm=$\frac{1}{10}$cm 255 | \item[sp] scaled point。\Hologo{TeX} 的基本长度单位,1sp=$\frac{1}{65536}$pt 256 | \item[em] 当前字号下,大写字母M的宽度。 257 | \item[ex] 当前字号下,小写字母x的高度。 258 | \end{fead} 259 | 260 | 然后是几个常用的长度宏,更多的长度宏使用会在表格、分栏等章节提到。 261 | \begin{latex} 262 | \textwidth % 页面上文字的总宽度,即页宽减去两侧边距。 263 | \linewidth % 当前行允许的行宽。 264 | \end{latex} 265 | 266 | 有时候你可以使用可变长度,比如“\texttt{5pt plus 3pt minus 2pt}”,表示一个能收缩到3pt也能伸长到8pt的长度。直接使用倍数也是允许的,例如:1.5\latexline{parindent}等。 267 | 268 | 我们通常使用\latexline{hspace}和\latexline{vspace}这两个命令控制特殊的空格,具体的使用方法参考\hyperref[sec:hvspace]{水平和竖直距离}这一节。 269 | 270 | \subsection{空格、换行与分段} 271 | 在\LaTeX\ 中,多个空格会被视为一个,多个换行也会被视为一个。如果你想要禁止\LaTeX\ 在某个空格处的换行,将空格用\texttt{\char126}命令替代即可,比如“\texttt{Fig.\char126 8}”。 272 | 273 | 通常的换行方法非常简单:\hologo{LaTeX}会自动转行,然后在每一段的末尾,只需要输入两个回车即可完成分段。如果需要一个空白段落(实质是一个空白行),先输入两个回车,再输入\latexline{mbox\{\}},最后再输入两个回车即可。你可以用\latexline{par}来产生一个带缩进的新段。 274 | 275 | 在下划线一节的例子中已经给出了强制换行的方式,即两个反斜:\latexline{\char`\\}. 不过这样做的缺点在于下一行段首缩进会消失,这个命令也的确一般\RED{不用于}正文换行;\textbf{正文中想要换行,请直接使用两个回车}。 276 | 277 | 段落之间的距离由\latexline{parskip}控制,默认\texttt{0pt plus 1pt}. 278 | \begin{latex} 279 | \setlength{\parskip}{0pt} 280 | \end{latex} 281 | 282 | 宏包\pkg{lettrine}能够产生首字下沉的效果: 283 | \begin{codeshow} 284 | \lettrine{T}{his} is an example. Hope you like this package, and enjoy your \LaTeX\ trip! 285 | \end{codeshow} 286 | 287 | \subsection{分页} 288 | 用\latexline{newpage}命令开始新的一页。 289 | 290 | 用\latexline{clearpage}命令清空浮动体队列\footnote{参见\hyperref[sec:float]{浮动体}这一节的内容。},并开始新的一页。 291 | 292 | 用\latexline{cleardoublepage}命令清空浮动体队列,并在偶数页上开始新的一页。 293 | 294 | 注意:以上命令都是基于\latexline{vfill}的。如果要连续新开两页,请在中间加上一个空的箱子(\latexline{mbox\{\}}),如\latexline{newpage\char`\\mbox\{\}\char`\\newpage}。 295 | 296 | \subsection{缩进、对齐与行距} 297 | 英文的段首不需要缩进。但是对中文而言,段首缩进需要借助\pkg{indentfirst}宏包来完成。你可能还需要使用\latexline{setlength{\char`\\parindent}\{2em\}}这样的命令来设置缩进距离。如果在句首强制取消缩进,你可以在段首使用\latexline{noindent}命令。 298 | 299 | \LaTeX\ 默认使用两端对齐的排版方式。你也可以使用\envi{flushleft}, \envi{flushright}, \envi{center}这三种环境来构造居左、居中、居右三种效果。特殊的\latexline{centering}命令常常用在环境内部(或者一对花括号内部),以实现居中的效果。但请尽量用\envi{center}环境代替这个老旧的命令。类似的命令还有\latexline{raggedleft}来实现居右,\latexline{raggedright}来实现居左。更多的空格控制请参考\hyperref[sec:hvspace]{这一节}。 300 | 301 | 插入制表位、悬挂缩进、行距等复杂的调整参考\hyperref[sec:hvspace]{这部分}的内容。 302 | 303 | \section{字体与颜色} 304 | \label{sec:font} 305 | 这一节只讨论行文中字体使用。数学环境内字体使用请参考\hyperref[sec:mathfont]{这一节}的内容。 306 | 307 | \subsection{字族、字系与字形} 308 | 字体(typeface)的概念非常令人恼火,在电子化时代,基本上也都以字体(font)作为替代的称呼。宋体、黑体、楷体,这属于\co{字族};对应到西文就是罗马体、等宽体等。加粗、加斜属于\co{字系和字形}。五号、小四属于\co{字号}。这三者大概可以并称\co{字体}\footnote{本文中的字族、字系等称呼难以找到统一标准,可能并不是准确的名称。}。 309 | 310 | \subsection{中西文“斜体”} 311 | 首先需要明确一点:\RED{汉字没有加斜体}。平常我们看到的加斜汉字,通常是几何变换得到的结果,非常的粗糙,并不严格满足排版要求;而真正的字形是需要精细的设计的。同时,汉字字体里面也很少有加粗体的设计。 312 | 313 | 西文一般设有加斜,但是这与“斜体”并不是同一回事。加斜是指某种字族的Italy字系;而斜体,是指Slant字族。在行文中表强调时使用的是前者;在Microsoft Word等软件中看到的倾斜的字母\textit{I},也代表前者。 314 | 315 | \subsection{原生字体命令} 316 | \LaTeX\ 提供了基本的字体命令,包括\tref{tab:fontcommand}中显示的内容。 317 | \begin{table}[!ht] 318 | \centering 319 | \caption{\LaTeX\ 字体命令表} 320 | \label{tab:fontcommand} 321 | \begin{tabular}{p{3em}<{\centering} @{\ -\quad} l @{\quad-\quad} p{18em}} 322 | \hline 323 | 字族 & \latexline{rmfamily} & 把字体置为{\rmfamily Roman}罗马字族。\\ 324 | & \latexline{sffamily} & 把字体置为{\sffamily Sans Serif}无衬线字族。\\ 325 | & \latexline{ttfamily} & 把字体置为{\ttfamily Typewriter}等宽字族。\\ 326 | \hline 327 | 字系 & \latexline{bfseries} & 粗体{\bfseries BoldSeries}字系属性。\\ 328 | & \latexline{mdseries} & 中粗体{\mdseries MiddleSeries}字系属性。\\ 329 | \hline 330 | 字形 & \latexline{upshape} & 竖直{\upshape Upright}字形。 \\ 331 | & \latexline{slshape} & 斜体{\slshape Slant}字形。 \\ 332 | & \latexline{itshape} & 强调体{\itshape Italic}字形。 \\ 333 | & \latexline{scshape} & 小号大写体{\scshape Scap}字形。 \\ 334 | \hline 335 | \multicolumn{3}{l}{\ttfamily 如果临时改变字体,使用\latexline{textrm}, \latexline{textbf}这类命令。}\\ 336 | \hline 337 | \end{tabular} 338 | \end{table} 339 | 340 | 字族、字系、字形三种命令是互相独立的,可以任意组合使用。但这种复合字体的效果有时候无法达到(因为没有对应的设计),比如\latexline{scshape}字形和\latexline{bfseries}字系。\LaTeX\ 会针对这种情况给出警告,但仍可以编译,只是效果会不同于预期。 341 | 342 | 如果在文中多次使用某种字体变换,可以将其自定义成一个命令。这时请使用text系列的命令而不要使用family, series或shape系列的命令。否则需要多加一组花括号防止“泄露”。以下二者等价: 343 | \begin{latex} 344 | \newcommand{\concept}[1]{\textbf{#1}} 345 | \newcommand{\concept}[1]{{\bfseries #1}} 346 | \end{latex} 347 | 348 | 更多自定义命令的语法请参考\hyperref[sec:newcommand]{这一节}。 349 | 350 | 然后就是字号的命令。行文会有一个默认的“标准”字号,比如你在documentclass的选项中设置的12pt(如果你设置了的话)。\LaTeX\ 给出了一系列“相对字号命令”,列出如\tref{tab:fontsize}。此外,\pkg{ctex}宏包的\latexline{zihao}命令,参数$0$--$8$以及$-0$--$-8$表示初号到八号、小初到小八\footnote{日常使用的小四为12pt,五号为10.5pt。}。 351 | \begin{table}[!ht] 352 | \centering 353 | \caption{相对字号命令表} 354 | \label{tab:fontsize} 355 | \begin{tabular}{|l|*{3}{l|}} 356 | \hline 357 | 命令 & 10pt & 11pt & 12pt \\ 358 | \hline 359 | \latexline{tiny} & 5pt & 6py & 6pt \\ 360 | \latexline{scriptsize} & 7pt & 8pt & 8pt \\ 361 | \latexline{footnotesize} & 8pt & 9pt & 10pt \\ 362 | \latexline{small} & 9pt & 10pt & 11pt \\ 363 | \latexline{normalsize} & 10pt & 11pt & 12pt \\ 364 | \latexline{large} & 12pt & 12pt & 14pt \\ 365 | \latexline{Large} & 14pt & 14pt & 17pt \\ 366 | \latexline{LARGE} & 17pt & 17pt & 20pt \\ 367 | \latexline{huge} & 20pt & 20pt & 25pt \\ 368 | \latexline{Huge} & 25pt & 25pt & 25pt \\ 369 | \hline 370 | \end{tabular} 371 | \end{table} 372 | 373 | 如果你想设置特殊的字号,使用: 374 | \begin{latex} 375 | \fontsize{font-size}{line-height}{\selectfont } 376 | \end{latex} 377 | 378 | 其中font-size填数字,单位pt;一般而言,line-height填\latexline{baselineskip}\footnote{这个命令的意义是行与行之间的基线间距(即行距),默认是1.2倍文字高。}。 379 | 380 | 默认全文的字体使用\latexline{rmfamily}族的字体。你可以通过重定义的方式更改它,使\latexline{rmfamily, \char`\\textrm}命令都指向新的字体。甚至把默认字体改为sf/tt字族。 381 | \begin{latex} 382 | \renewcommand{\rmdefault}{`\textit{font-name}`} 383 | % 默认字体改为sf字族,也可用\ttdefault 384 | \renewcommand{\familydefault}{\sfdefault} 385 | \renewcommand{\sfdefault}{`\textit{font-name}`} 386 | % 如果你排版CJK文档,还需要更改CJK的默认字体 387 | \renewcommand{\CJKfamilydefault}{\CJKsfdefault} 388 | \end{latex} 389 | 390 | \subsection{西文字体} 391 | \LaTeX\ 预包含字体如\tref{tab:alphafont}(参考\url{http://www.tug.dk/FontCatalogue/}): 392 | \begin{table}[!hbt] 393 | \centering 394 | \caption{部分\LaTeX\ 西文字体} 395 | \label{tab:alphafont} 396 | \begin{tabular}{>{\ttfamily}ll} 397 | \hline 398 | 命令 & \texttt{字体名} \\ 399 | \hline 400 | cmr & \myfont{cmr}{Computer Modern Roman} (默认) \\ 401 | lmr & \myfont{lmr}{Latin Modern Roman} \\ 402 | pbk & \myfont{pbk}{Bookman} \\ 403 | ppl & \myfont{ppl}{Palatino} \\ 404 | lmss & \myfont{lmss}{Latin Modern Roman Serif} \\ 405 | phv & \myfont{phv}{Helvetica} \\ 406 | lmtt & \myfont{lmtt}{Latin Modern} \\ 407 | \hline 408 | \end{tabular} 409 | \end{table} 410 | 411 | 以上可以这样使用: 412 | \begin{latex} 413 | \newcommand{\myfont}[2]{{\fontfamily{#1}\selectfont #2}} 414 | \renewcommand{\rmdefault}{ptm} % 可更改默认字体,同理可改sfdefault等 415 | % 以上在导言区定义。在正文中: 416 | Let's change font to \myfont{ppl}{Palatino}! 417 | \end{latex} 418 | 419 | 在\xelatex 编译下,一般使用\pkg{fontspec}宏包来选择\textbf{本地安装}的字体。注意:该宏包可能会明显增加编译所需的时间。 420 | \begin{latex} 421 | \usepackage{fontspec} 422 | \newfontfamily{\lucida}{Lucida Calligraphy} 423 | \lucida{This is Lucida Calligraphy} 424 | \end{latex} 425 | 426 | 该宏包的\latexline{setmathrm/sf/tt}与\latexline{setboldmathrm}命令可以支持你更改数学环境中调用的字体。 427 | 428 | 另外,你也可以通过简单地加载\pkg{txtfont}宏包,设置西文字体为Roman体,且同时会为你设置好数学字体。其他的简单字体宏包还有\pkg{cmbright},提供的CM Bright与\TeX\ 默认字体Computer Modern协调的不错;以及提供Palatino字体的\pkg{pxfonts}。另外的字体宏包在此不再介绍。 429 | 430 | \subsection{中文支持与CJK字体} 431 | 中文方面,\pkg{ctex}宏包直接定义了新的中文文档类ctexart, ctexrep与ctexbook,以及ctexbeamer幻灯文档类。例如本手册\texttt{Head.tex}中: 432 | \begin{latex} 433 | \documentclass[a4paper, zihao=-4, linespread=1]{ctexrep} 434 | \renewcommand{\CTEXthechapter}{\thechapter} 435 | \end{latex} 436 | 437 | 以上设置字号为小四,行距因子为1(故行距为$1\times 1.2=1.2$倍,其中1.2是\LaTeX\ 默认的基线间距)。而a4paper选项继承与原生文档类report,可见ctex文档类还是很好地保留了原生文档类的特征。\RED{值得注意的是,ctex文档类会用\texttt{\char92 CTEX}开头的计数器命令代替原有的},除非你使用\texttt{scheme=plain}来让ctex文档类\uline{仅支持中文而不做任何文档细节更改}。具体的使用参考ctex宏包文档。 438 | 439 | \pkg{ctex}宏包支持以下字体命令: 440 | \begin{center} 441 | \tabcaption{\texttt{ctex}宏包支持的字体命令} 442 | \begin{tabular}{*{4}{ll}} 443 | 宋体 & \latexline{songti} & 黑体 & \latexline{heiti} & 仿宋 & \latexline{fangsong} & 楷书 & \latexline{kaishu} \\ 444 | 雅黑 & \latexline{yahei} & 隶书\textsuperscript{\dag} & \latexline{lishu} & 幼圆\textsuperscript{\dag} & \latexline{youyuan} &\multicolumn{2}{l}{} \\ 445 | \multicolumn{8}{l}{\quad\dag\ \textit{标注了此符号的字体不受ubuntu字库支持}。} 446 | \end{tabular} 447 | \end{center} 448 | 449 | 再者参考\xelatex 编译下的\pkg{xeCJK}宏包的使用。在使用\xelatex 时,如果你使用ctex文档类,它会在底层调用\pkg{xeCJK}宏包,所以你无须再显式地加载它。当然你也可以使用原生文档类,然后逐一汉化参数内容。 450 | 451 | \TeX\ Live 配合\xelatex 时, 调用字体非常慢。Windows下,把xelatex.exe与TeXStudio设为管理员运行,能大幅缩短编译用时。另外,安装新字体后,管理员命令行\texttt{fc-cache}能够刷新字体缓存(很慢),有时也能改善用时\footnote{提供这两种方式的网页链接:\href{https://tex.stackexchange.com/questions/325278/xelatex-runs-slow-on-windows-machine}{StackExchange页面}。}。 452 | 453 | 比如在导言区: 454 | \begin{latex} 455 | \usepackage[slantfont,boldfont]{xeCJK} 456 | \xeCJKsetup{CJKMath=true} 457 | \setCJKmainfont[BoldFont=Source Han Serif SC Bold]{SimHei} 458 | % 这里把SimHei直接写成中文“黑体”也可以 459 | % 也可以直接通过 otf 等字体名调用 460 | \end{latex} 461 | 462 | 其中,加载xeCJK宏包时使用了slantfont和boldfont两个选项,表示允许设置中文的斜体和粗体字形。在setCJKmainfont命令中,把SimSun(宋体)设置为了主要字体,SimHei(黑体)设置为主要字体的粗体字形,即textbf或者bfseries命令的变换结果。你也可以使用SlantFont来设置它的斜体字形。 463 | 464 | 除了setCJKmainfont,还有setCJKsansfont(对应\latexline{textsf}),setCJKmonofont(对应\latexline{texttt}),以及setCJKmathfont(对应数学环境下的CJK字体,但需要载xeCJKsetup中设置CJKMath=true)。 465 | 466 | 上面提到的xeCJKsetup有下列可以定制的参数,下划线为默认值: 467 | \begin{feai} 468 | \item CJKspace=true/\uline{false}:是否保留行文中CJK文字间的空格,默认忽略空格。 469 | \item CJKMath=true/\uline{false}:是否支持数学环境CJK字体。如果想在数学环境中直接输入汉字,请开启该选项;否则在数学环境内,需要将汉字写在\latexline{textrm}、或者\pkg{amsmath}宏包支持的\latexline{text}命令中。 470 | \item CheckSingle=true/\uline{false}:是否检查CJK标点单独占用段落最后一行。此检查在倒数二、三个字符为命令时可能失效。 471 | \item LongPunct=\verb|{——……}|:设置CJK长标点集,默认的只有中文破折号和中文省略号。长标点不允许在内部产生断行。你也可以用\texttt{+=}或者\texttt{-=}号来修改CJK长标点集。 472 | \item MiddlePunct=\verb|{——·}|:设置CJK居中标点集,默认的只有中文破折号和中文间隔号(中文输入状态下按数字1左侧的重音符号键)。居中标点保证标点两端距前字和后字的距离等同,并禁止在其之前断行。你同样可以使用\texttt{+=/-=}进行修改。 473 | \item AutoFakeBold=true/\uline{false}:是否启用全局伪粗体。如果启用,在setCJKmainfont等命令中,将用AutoFakeBold=2参数代替原有的BoldFont=SimHei这种参数。其中,数字2表示将原字体加粗2倍实现伪粗体。 474 | \item AutoFakeSlant=true/\uline{false}:是否启用全局伪斜体。仿上。 475 | \end{feai} 476 | 477 | 如果预定义一种CJK字体,可以在导言区使用如下命令。比如这里定义了宋体,后文中直接使用\latexline{songti}来调用SimSun字体: 478 | \begin{latex} 479 | % 参数:[family]\font-switch[features]{font-name} 480 | \newCJKfontfamily[song]\songti{SimSun} 481 | \end{latex} 482 | 483 | 如果要临时使用一种CJK字体,使用\latexline{CJKfontspec}命令。其中的FakeSlant和FakeBold参数根据全局伪字体的启用情况决定;如果未启用则使用BoldFont、SlantFont参数指定具体的字体。 484 | \begin{latex} 485 | {\CJKfontspec[FakeSlant=0.2,FakeBold=3]{SimSun} text} 486 | \end{latex} 487 | 488 | 对于Windows系统,想要获知电脑上安装的中文字体,使用CMD命令: 489 | \begin{verbatim} 490 | fc-list -f "%{family}\n" :lang=zh-cn >d:\list.txt 491 | \end{verbatim} 492 | 493 | 然后到\verb|d:\list.txt|文件中查看中文字体列表。如果没有找到想要使用的字体,请: 494 | 495 | \begin{feae} 496 | \item 使用 \texttt{fc-cache} 命令刷新字体缓存后再尝试。如果你安装了较多字体,刷新可能较慢。 497 | \item 如果刷新缓存无效,考虑重新安装对应的字体。注意在安装字体时,通过右键点击(而不是双击打开)字体文件,然后选择“为所有用户安装”。如果双击字体文件后安装,可能会导致 \LaTeX\ 无法找到字体。 498 | \end{feae} 499 | 500 | \subsection{颜色} 501 | 使用\pkg{xcolor}宏包来方便地调用颜色。比如本文中代码的蓝色: 502 | \begin{latex} 503 | \usepackage{xcolor} 504 | \definecolor{keywordcolor}{RGB}{34,34,250} 505 | % 指定颜色的text 506 | {\color{`\textit{color-name}`}{text}} 507 | \end{latex} 508 | 509 | \pkg{xcolor}宏包预定义的颜色: 510 | \begin{center} 511 | \tabcaption{\texttt{xcolor}宏包预定义颜色} 512 | \begin{tabular}{*{6}{l|}l} 513 | \scol{black} & \scol{darkgray} & \scol{lime} & \scol{pink} & \scol{violet} & \scol{blue} & \scol{gray} \\ 514 | \scol{magenta} & \scol{purple} & \scol{white} & \scol{brown} & \scol{green} & \scol{olive} & \scol{red}\\ 515 | \scol{yellow} & \scol{cyan} & \scol{lightgray} & \scol{orange} & \multicolumn{3}{|l}{\scol{teal}} 516 | \end{tabular} 517 | \end{center} 518 | 519 | 还可以通过“调色”做出新的效果: 520 | 521 | \begin{codeshow} 522 | \textcolor{red!70}{百分之70红色}\\ 523 | \textcolor{blue!50!black!20!white} 524 | {50蓝20黑30白} 525 | \end{codeshow} 526 | 527 | 还有一些方便的颜色命令,比如带背景色的箱子,参考\secref{subsec:colorbox}。 528 | 529 | \section{引用与注释} 530 | 电子文档的最大优越在于能够使用超链接,跳转标签、目录,甚至访问外部网站。这些功能实现都需要“引用”。 531 | \subsection{标签和引用} 532 | 使用\latexline{label}命令插入标签(在MS Word中称为“题注”),然后在其他地方用\latexline{ref}或者\latexline{pageref}命令进行引用,分别引用标签的序号、标签所在页的页码。 533 | \begin{latex} 534 | \label{section:this} 535 | \ref{section:this} 536 | \pageref{section:this} 537 | \end{latex} 538 | 539 | 宏包\pkg{amsmath}提供了\latexline{eqref}命令,默认效果如(3.1),实质上是调用了原生的\latexline{ref}命令。 540 | 541 | 但是更常用的是\pkg{hyperref}宏包。由于它经常与其他宏包冲突,一般把它放在导言区的最后。比如本手册: 542 | \begin{latex} 543 | \usepackage[colorlinks,bookmarksopen=true, 544 | bookmarksnumbered=true]{hyperref} 545 | \end{latex} 546 | 547 | 宏包选项也可以以\latexline{hypersetup}的形式另起一行书写,键值包括: 548 | \begin{para} 549 | \item[colorlinks] 默认false,即加上带颜色的边框,\footnote{这个边框在打印时并不会打印出来。}而不是更改文字的颜色。默认linkcolor=red, anchorcolor=black, citecolor=green, urlcolor=magenta. 550 | \item[hidelinks] 无参数,取消链接的颜色和边框。 551 | \item[bookmarks] 默认true,用于生成书签。 552 | \item[bookmarksopen] 默认false,是否展开书签。 553 | \item[bookmarksopenlevel] 默认全部展开。设置为secnumdepth对应的值可以指定展开到这一级。比如对report指定2,就是展开到section为止。 554 | \item[bookmarksnumbered] 默认false,书签是否带章节编号。 555 | \item[unicode] 无参数,使用UTF-8编码时可以指定的选项。 556 | \item[pdftitle] pdf元数据:标题。 557 | \item[pdfauthor] pdf元数据:作者。 558 | \item[pdfsuject] pdf元数据:主题。 559 | \item[pdfkeywords] pdf元数据:关键词。 560 | \item[pdfstartview] 默认值Fit,设置打开pdf时的显示方式。Fit适合页面,FitH适合宽度,FitV适合高度。 561 | \end{para} 562 | 563 | 如果章节标题中带有特殊内容无法正常显示在pdf书签中,这样使用: 564 | 565 | \begin{verbatim} 566 | \section{质能公式\texorpdfstring{$E=mc^2$}{E=mc\textasciicircum 2}} 567 | \end{verbatim} 568 | 569 | 在加载了\pkg{hyperref}宏包后,可以使用的命令有: 570 | \begin{latex} 571 | % 文档内跳转 572 | \hyperref[`\textit{label-name}`]{`\textit{print-text}`} 573 | \autoref{`\textit{label-name}`} % 自动识别label上方的命令 574 | % 链接网站 575 | \href{URL}{print-text} 576 | \url{URL} %彩色可点击 577 | \nolinkurl{URL} % 黑色可点击 578 | \end{latex} 579 | 580 | 其中\latexline{autoref}命令会先检查\latexline{label}引用的计数器,再在检查其\texttt{autref}宏是否存在。比如图表环境会检查是否有\latexline{figureautorefname}这个宏,如果有则引用之;而正常的\latexline{ref}命令只会引用\latexline{figurename}。以下列出\pkg{hyperref}宏包支持的计数器宏(请自行插入): 581 | \begin{table}[!hbt] 582 | \centering 583 | \caption{\texttt{autoref}命令支持的计数器宏} 584 | \label{tab:autoref} 585 | \begin{tabular}{|*{2}{>{\ttfamily\char`\\}lc|}} 586 | \hline 587 | \multicolumn{1}{|c}{命令} & 默认值 & \multicolumn{1}{c}{命令} & 默认值 \\ 588 | \hline 589 | figurename & Figure & tablename & Table \\ 590 | partname & Part & appendixname & Appendix \\ 591 | equationname & Equation & Itemname & item \\ 592 | chaptername & chapter & sectionname & section \\ 593 | subsectionname & subsection & subsubsectionname & subsubsection \\ 594 | paragraphname & paragraph & Hfootnotename & footnote \\ 595 | AMSname & Equation & theoremname & Theorem \\ 596 | page & \multicolumn{3}{l|}{page. 但常使用\latexline{autopageref}命令代替。} \\ 597 | \hline 598 | \end{tabular} 599 | \end{table} 600 | 601 | 比如,通过重定义\latexline{figureautorefname},就能用“图3.1”的效果代替默认的“Figure 3.1”: 602 | \begin{latex} 603 | \renewcommand\figureautorefname{图} 604 | \end{latex} 605 | 606 | 另一个宏包\pkg{nameref}不满足于只引用编号,提供了引用对象的标题内容的功能。使用\latexline{nameref}命令可以利用位于标题下方的标签来引用标题内容。 607 | 608 | 关于页码引用,如果想要生成“第$\times$页,共$\times$页”的效果,可能需要借助\pkg{lastpage}宏包。它提供的标签LastPage可以保证在输出页面的最后(如果你自行添加标签,可能还会有后续浮动体),因此可以: 609 | 610 | \begin{codeshow} 611 | This is page \thepage\ of \pageref{LastPage} 612 | \end{codeshow} 613 | 614 | \subsection{脚注、边注与尾注} 615 | \subsubsection{脚注} 616 | 脚注是一种简单标注,使用方法是: 617 | \begin{latex} 618 | \footnote{This is a footnote.} 619 | \end{latex} 620 | 621 | 在某些环境内(如表格),脚注无法正常使用,可以先用\latexline{footnotemark}依次插入位置,再在tabular/table环境外用\latexline{footnotetext}依次指明脚注的内容。 622 | 623 | minipage环境是支持脚注,在其内部或正文内这样可以写表格脚注: 624 | 625 | \begin{codeshow} 626 | \begin{minipage}{\linewidth} 627 | \begin{tabular}{l} 628 | This is an exmaple\footnotemark. 629 | \end{tabular} 630 | \footnotetext{You don't need more.} 631 | \end{minipage} 632 | \end{codeshow} 633 | 634 | 行文中切忌过多地使用脚注,它会分散读者的注意力。默认情况下脚注按章编号。脚注相关的命令: 635 | \begin{latex} 636 | % 在大纲或者\caption命令中使用脚注,需要加\protect 637 | \caption{Title\protect\footnote{This is footnote.}} 638 | % 脚注之间的距离:\footnotesep 639 | % 每页脚注之上横线:\footnoterule,默认值: 640 | \renewcommand\footnoterule{\rule{0.4\columnwidth}{0.4pt}} 641 | % 调整脚注到正文的间距,例如: 642 | \setlength{\skip\footins}{0.5cm} 643 | \end{latex} 644 | 645 | 更多的参考\pkg{footmisc}宏包,比如其选项\texttt{perpage}让脚注编号每页清零。 646 | 647 | \subsubsection{边注} 648 | \LaTeX\ 的边注命令\latexline{marginpar}不会进行编号。必选参数表示在页右显示边注;可选参数表示如果边注在偶数页,则在页左显示。例如右边这个音符:\marginpar{\twonotes} 649 | \begin{latex} 650 | 这一行有边注\marginpar[左侧]{右侧} 651 | \end{latex} 652 | 653 | 如果想要改变边注的位置,使用\latexline{reversemarginpar}命令。此外,有关边注的长度命令\latexline{marginparwidth/sep/push}分别控制边注的宽、边注到正文的距离、边注之间的最小距离。可以使用\pkg{geometry}宏包来设置前两者,参考\secref{sec:geometry}。 654 | 655 | \subsubsection{尾注} 656 | 尾注用于注释较长、无法使用脚注的场合,需要\pkg{endnotes}宏包。 657 | 658 | \subsection{援引环境} 659 | 援引环境有quote和quotation两个。前者首行不缩进;后者首行缩进,且支持多段文字。 660 | 661 | \begin{codeshow} 662 | 鲁智深其师有偈言曰: 663 | \begin{quote} 664 | 逢夏而擒,遇腊而执。 665 | 听潮而圆,见信而寂。 666 | \end{quote} 667 | 圆寂之后,其留颂曰: 668 | \begin{quotation} 669 | 平生不修善果,只爱杀人放火。 670 | 忽地顿开金绳,这里扯断玉锁。 671 | 672 | 咦!钱塘江上潮信来,今日方知我是我。 673 | \end{quotation} 674 | \end{codeshow} 675 | 676 | 另外一个诗歌援引环境叫verse,\label{envi:verse}是悬挂缩进的。一般很少用到。 677 | 678 | \begin{codeshow} 679 | Rabindranath Tagore wrote this in 680 | his \emph{The Gardener}: 681 | \begin{verse} 682 | Constant thrusts from your eyes 683 | keep my pain fresh for ever. 684 | \end{verse} 685 | \end{codeshow} 686 | 687 | \subsection{摘要} 688 | article和report文档类支持摘要,在\latexline{maketitle}命令之后可以使用\envi{abstract}环境。在单栏模式下,其相当于一个带标题的\envi{quotation}环境,而这个标题可以通过重定义\latexline{abstractname}更改;双栏下则相当于\latexline{section*}命令定义的一节。 689 | 690 | \subsection{参考文献} 691 | \label{subsec:cite} 692 | 参考文献主要使用的命令是\latexline{cite},与\latexline{label}相似。通过\pkg{natbib}宏包的使用可以定制参考文献标号在文中的显示方式等格式,下面\pkg{natbib}宏包的选项含义为:数字编号、排序且压缩、上标、外侧方括号,总体像这样:\textsuperscript{\ttfamily [1,3-5]}。\footnote{这里的LaTeX代码实际为:\latexline{textsuperscript\{\char`\\ttfamily [1,3-5]\}}} 693 | \begin{latex} 694 | \documentclass{ctexart} 695 | % 如果是book类文档,把\refname改成\bibname 696 | \renewcommand{\refname}{参考文献} 697 | \usepackage[numbers,sort&compress,super,square]{natbib} 698 | \begin{document} 699 | This is a sample text.\cite{author1.year1,author2.year2} 700 | This is the text following the reference. 701 | % “99”表示以最多两位数来编号参考文献,用于对齐 702 | \begin{thebibliography}{99} 703 | \addtolength{\itemsep}{-2ex} % 用于更改行距 704 | \bibitem{author1.year1}Au1. ArtName1[J]. JN1. Y1:1--2 705 | \bibitem{author2.year2}Au2. ArtName2[J]. JN2. Y2:1--2 706 | \end{thebibliography} 707 | \end{document} 708 | \end{latex} 709 | 710 | 当然以上只是权宜之计的书写方法。更详尽的参考文献使用(\bibtex\ 方法)在\hyperref[sec:bibtex]{\bibtex{}这一节}进行介绍。 711 | 712 | 如果想要将参考文献章节正常编号,并加入到目录中,可以使用 \pkg{tocbibind} 宏包\label{pkg:tocbibind}。注意,此时需要重命名\latexline{tocbibname}(而不是 \latexline{refname} 或 \latexline{bibname})来指定参考文献章节的标题。例如: 713 | \begin{latex} 714 | \usepackage[nottoc,numbib]{tocbibind} 715 | \renewcommand{\tocbibname}{References} 716 | \end{latex} 717 | 718 | 该宏包对于将索引、目录本身、图表目录编入目录页同样有效。选项\texttt{nottoc}表示目录本身不编入,\texttt{notlof/lot}表示图/表目录不编入,\texttt{notindex}表示索引不编入,\texttt{notbib}表示参考文献不编入。而选项\texttt{numindex/bib}表示给索引/参考文献章节正常编号。选项\texttt{none}表示禁用所有。 719 | 720 | \section{正式排版:封面、大纲与目录} 721 | 722 | \subsection{封面} 723 | 封面的内容在导言区进行定义,一般写在所有宏包、自定义命令之后。主要用到的如: 724 | \begin{latex} 725 | \title{Learning LaTeX} 726 | \author{wklchris} 727 | \date{text} 728 | \end{latex} 729 | 730 | 然后在\envi{document}环境内第一行,写上:\latexline{maketitle},就能产生一个简易的封面。其中\latexline{title}和\latexline{author}是必须定义的,\latexline{date}如果省略会自动以编译当天的日期为准,格式形如:January 1, 1970。 如果你不想显示日期,可以写\latexline{date\{\}}。 731 | 732 | 标题页的脚注用\latexline{thanks}命令完成。 733 | 734 | \subsection{大纲与章节} 735 | \LaTeX\ 中,将文档分为若干大纲级别。分别是: 736 | \begin{para} 737 | \item[\latexline{part}] 部分。这个大纲不会打断chapter的编号。 738 | \item[\latexline{chapter}] 章。基于article的文档类不含该大纲级别。 739 | \item[\latexline{section}] 节。 740 | \item[\latexline{subsection}] 次节。默认report/book文档类本级别及以下的大纲不进行编号,也不纳入目录。 741 | \item[\latexline{subsubsection}] 小节。默认article文档类本级别及以下的大纲不进行编号,也不纳入目录。 742 | \item[\latexline{paragraph}] 段。极少使用。 743 | \item[\latexline{subparagraph}] 次段。极少使用。 744 | \end{para} 745 | 746 | 对应的命令例如:\latexline{section\{第一节\}}。 747 | 748 | 以上各级别在\LaTeX\ 内部以“深度”参数作为标识。第一级别part的深度是$-1$,以下级别深度分别是$0,1,\ldots$,类推。注意到由于article文档类缺少chapter大纲,其part深度又是从$0$开始的,故section及以下的深度数值与book/report文档类是一致的。\dpar 749 | 750 | 另外的一些使用技巧: 751 | \begin{latex} 752 | % 大纲编号到深度2,并纳入目录 753 | \setcounter{tocdepth}{2} 754 | % 星号命令:插入不编号大纲,也不纳入目录 755 | \chapter*{序} 756 | % 将一个带星号的大纲插入目录 757 | \addcontentsline{toc}{chapter}{序} 758 | % 可选参数用于在目录中显示短标题 759 | \section[Short]{Loooooooong} 760 | % 自定义章节标题名 761 | \renewcommand{\chaptername}{CHAPTER} 762 | \end{latex} 763 | 764 | book文档类还提供了以下的命令: 765 | \begin{para} 766 | \item[\latexline{frontmatter}] 前言。页码为小写罗马字母,其后的章节不编号,但生成页眉页脚和目录项。 767 | \item[\latexline{mainmatter}] 正文。页码为阿拉伯数字;其后的章节编号,页眉页脚和目录项正常运作。 768 | \item[\latexline{backmatter}] 后记。页码格式不变,继续计数。章节不编号,但生成页眉页脚和目录项。 769 | \end{para} 770 | 771 | 关于附录\latexline{appendix}部分的大纲级别问题不在此讨论,请参考\hyperref[sec:appendix]{这一节}。在book文档类中,附录一般放在正文与后记之间;当然你也可以在非book文档类中使用附录。关于章节样式自定义的问题,则请看\hyperref[sec:titlesec]{这里}。 772 | 773 | \subsection{目录} 774 | 目录在大纲的基础上生成,使用命令\latexline{tableofcontents}即可插入目录。目录在加载了\pkg{hyperref}宏包后,可以实现点击跳转的功能。你可以通过重定义命令更改\latexline{contentsname},即“目录”的标题名。 775 | \begin{latex} 776 | \renewcommand{\contensname}{目录} 777 | \end{latex} 778 | 779 | 你也可以插入图表目录,分别是\latexline{listoffigures}, \latexline{listoftables}。通过重定义\latexline{listfigurename}和\latexline{listtablename}可以更改图表目录的标题。如果要更改目录的显示的大纲级别深度,设置计数器: 780 | \begin{latex} 781 | \setcounter{tocdepth}{2} % 这是到subsection 782 | \end{latex} 783 | 784 | 想要将目录本身编入目录项,使用 \pkg{tocbibind} 宏包,参考\pageref{pkg:tocbibind}。 785 | 786 | 目录的高级自定义需要借助\pkg{titletoc}宏包,参考\secref{sec:titletoc}。 787 | 788 | \section{计数器与列表} 789 | 790 | \subsection{计数器} 791 | \LaTeX\ 中的自动编号都借助于内部的计数器来完成。包括: 792 | \begin{fead} 793 | \item[章节] part, chapter, section, subsection, subsubsection, paragraph, subparagraph 794 | \item[编号列表] enumi, enumii, enumiii, enumiv 795 | \item[公式和图表] equation, figure, table 796 | \item[其他] page, footnote, mpfootnote\footnote{\latexline{mpfootnote}命令用于实现minipage环境的脚注。} 797 | \end{fead} 798 | 799 | \RED{用\texttt{\char92 the}接上计数器名称的方式来调用计数器},比如\latexline{thechapter}。如果只是想输出计数器的数值,可以指定数值的形式,如阿拉伯数字、大小写英文字母,或大小写罗马数字。常用的命令包括: 800 | \begin{latex} 801 | \arabic{counter-name} 802 | \Alph \alph \Roman \roman 803 | % ctex文档类还支持\chinese 804 | \end{latex} 805 | 806 | 比如本文的附录,对章和节的编号进行了重定义。注意:\textbf{章的计数器包含了节在内}。以下的命令写在\envi{appendices}环境中(或者\latexline{appendix}命令后),因此对于此外的编号不产生影响;同理你也可以这样对列表编号进行局部重定义。 807 | \begin{latex} 808 | \renewcommand{\thechapter}{\Alph{chapter}} 809 | \renewcommand{\thesection} 810 | {\thechapter-\arabic{section}} 811 | \renewcommand{\thefootnote}{[\arabic{footnote}]} 812 | \end{latex} 813 | 814 | 计数器的命令: 815 | \begin{latex} 816 | % 父级计数器变化,则子级计数器重新开始计数 817 | \newcounter{`\textit{counter-name}`}[`\textit{parent counter-name}`] 818 | \setcounter{`\textit{counter-name}`}{`\textit{number}`} 819 | \addtocounter{`\textit{counter-name}`}{`\textit{number}`} 820 | % 计数器步进1,并归零所有子级计数器 821 | \stepcounter{`\textit{counter-name}`} 822 | \end{latex} 823 | 824 | \subsection{列表} 825 | \LaTeX\ 支持的预定义列表有三种,分别是无序列表\envi{itemize}, 自动编号列表\envi{enumerate}, 还有描述列表\envi{description}. 826 | 827 | \subsubsection{\textit{itemize}环境} 828 | 例子: 829 | 830 | \begin{codeshow} 831 | \begin{itemize} 832 | \item This is the 1st. 833 | \item[-] And this is the 2nd. 834 | \end{itemize} 835 | \end{codeshow} 836 | 837 | 每个\latexline{item}命令都生成一个新的列表项。通过方括号的可选参数,可以定义项目符号。默认的项目符号是圆点(\latexline{textbullet})。更多的方法参考\hyperref[sec:list]{这一节}。 838 | 839 | \subsubsection{\textit{enumerate}环境} 840 | 例子: 841 | 842 | \begin{codeshow} 843 | \begin{enumerate} 844 | \item First 845 | \item[Foo] Second 846 | \item Third 847 | \end{enumerate} 848 | \end{codeshow} 849 | 850 | 方括号的使用会打断编号,之后的编号顺次推移。更多的方法参考\hyperref[sec:list]{这一节}。 851 | 852 | \subsubsection{\textit{description}环境} 853 | 例子: 854 | 855 | \begin{codeshow} 856 | \begin{description} 857 | \item[LaTeX] Typesetting System. 858 | \item[wkl] A Man. 859 | \end{description} 860 | \end{codeshow} 861 | 862 | 默认的方括号内容会以加粗显示。更多的方法参考\hyperref[sec:list]{这一节}。 863 | 864 | \section{浮动体与图表} 865 | \label{sec:float} 866 | 867 | \subsection{浮动体} 868 | 浮动体将图或表与其标题定义为整体,然后动态排版,以解决图、表卡在换页处造成的过长的垂直空白的问题。但有时它也会打乱你的排版意图,因此使用与否需要根据情况决定。 869 | 870 | 图片的浮动体是\envi{figure}环境,而表格的浮动体是\envi{table}环境。一个典型的浮动体例子: 871 | \begin{latex} 872 | \begin{table}[!htb] 873 | \centering 874 | \caption{table-cap} 875 | \label{table-name} 876 | \begin{tabular}{...} 877 | ... 878 | \end{tabular} 879 | \end{table} 880 | \end{latex} 881 | 882 | 其中,浮动体环境的参数\verb|!htb|含义是:!表示忽略内部参数(比如内部参数对一页中浮动体数量的限制);h、t、b分别表示插入此处、插入页面顶部、插入页面底部,故htb表示优先插入此处,再尝试插入到某页顶,最后尝试插入到页底。此外还有参数p,表示允许为浮动体单独开一页。\LaTeX\ 的默认参数是tbp. 请不要单独使用htbp中的某个参数,以免造成不稳定。 883 | 884 | \latexline{caption}命令给表格一个标题,写在了表格内容(即\envi{tabular}环境)之前,表示标题会位于表格上方。对于图片,一般将把此命令写在图片插入命令的下方。注意:\RED{label命令请放在caption下方,否则可能出现问题}。\dpar 885 | 886 | 浮动体的自调整属性可能导致它“一直找不到合适的插入位置”,然后多个浮动体形成排队(因为靠前的浮动体插入后,靠后的才能插入)。如果在生成的文档中发现浮动体丢失的情况,请尝试更改浮动参数、去掉部分浮动体,或者使用\latexline{clearpage}命令来清空浮动队列,以正常开始随后的内容。 887 | 888 | 如果希望浮动体不要跨过section,使用: 889 | \begin{latex} 890 | \usepackage[section]{placeins} 891 | \end{latex} 892 | 893 | 其实质是重定义了\latexline{section}命令,在之前加上了\latexline{FloatBarrier}。你也可以自行在每个想要阻止浮动体跨过的位置添加。 894 | 895 | \subsection{图片} 896 | 图片的插入使用\pkg{graphicx}宏包和\latexline{includegraphics}命令,例子: 897 | \begin{latex} 898 | \begin{center} 899 | \includegraphics[width=0.8\linewidth]{ThisPic} 900 | \end{center} 901 | \end{latex} 902 | 903 | 可选参数指定了图片宽度为0.8倍该行文字宽。类似地可以指定height(图片高),scale(图片缩放倍数),angle(图片逆时针旋转角度),origin(图片旋转中心lrctbB\footnote{这六个字母分别代表左、右、中、顶、底,以及基线。})这样的命令。前三个命令不建议同时使用。旋转的图片基线会变化,故一般用totalheight代替height. 904 | 905 | 对于\texttt{Thispic}这个参数的写法,\xelatex 支持pdf, eps, png, jpg图片扩展名。你可以书写带扩展名的图片名称ThisPic.png,也可以不带扩展名。如果不给出扩展名,将按上述四个扩展名的顺序依次搜索文件。\dpar 906 | 907 | \subsubsection{图片子文件夹} 908 | 如果你不想把图片放在\LaTeX\ 文档主文件夹下,可以使用下面的命令加入新的图片搜索文件夹: 909 | \begin{latex} 910 | \graphicspath{{c:/pics/}{./pic/}} 911 | \end{latex} 912 | 913 | 用正斜杠代替Windows正常路径中的反斜杠。你可以加入多组路径,每组用花括号括起,并确保路径以正斜杠结束。用\verb|./|指代主文件夹路径,也可省略。\dpar 914 | 915 | \subsubsection{含特殊字符的文件名*} 916 | 文件名中含有特殊字符,一般插图命令中是不需要加入反斜杠进行处理的(也就是按原文件直接输入)。但是,图片标题的 \latexline{caption} 命令需要转义。如果可以直接输入,那么需要配合反斜杠进行转义;在不能显式输入的场合, \latexline{detokenize} 命令可以应对。一个例子: 917 | \begin{latex} 918 | %在导言区定义: 919 | %\newcommand{\includegraphicswithcaption}[2][]{ 920 | % \includegraphics[#1]{#2} 921 | % \caption{\detokenize{#2}} 922 | %} 923 | \includegraphicswithcaption[width=0.6\linewidth]{hello_world.png} 924 | \end{latex} 925 | 926 | \subsubsection{图文混排} 927 | 图文混排可参考\pkg{wrapfig}宏包,后文的\hyperref[sec:box]{箱子}一节即是例子。 928 | \begin{latex} 929 | % \usepackage{wrapfig} 930 | \begin{wrapfigure}[linenum]{place}[overhang]{picwidth} 931 | \includegraphics ... 932 | \caption ... 933 | \end{wrapfigure} 934 | \end{latex} 935 | 936 | 各参数的含义 937 | \begin{inlinee} 938 | \item {\bfseries\itshape linenum:} (可选)图片所占行数,一般不指定 939 | \item {\bfseries\itshape place:} 图片在文字段中的位置——R, L, I, O分别代表右侧、左侧、近书脊、远书脊 940 | \item {\bfseries\itshape overhang:} (可选)允许图片超出页面文本区的宽度,默认是0pt。在该项可以使用\latexline{width}代替图片的宽度,填入\latexline{width}将允许把图片全部放入页边区域 941 | \item {\bfseries\itshape picwidth:} 指定图片的宽度,默认情形下图片的高度会自动调整。 942 | \end{inlinee} 943 | 944 | \subsection{表格} 945 | \LaTeX\ 原生的表格功能非常有限,甚至不支持单元格跨行和表格跨页。但是这些可以通过宏包\pkg{longtable}, \pkg{supertabular}, \pkg{tabu}等宏包解决。跨行的问题只需要\pkg{multirow}宏包。下面是一个例子(没有写在浮动体中): 946 | 947 | \begin{codeshow} 948 | \begin{center} 949 | \begin{tabular}[c]{|l|c||p{3em} 950 | r@{-}} \hline\hline 951 | A & B & C & d\\D & E & F & g\\ 952 | \cline{1-2} 953 | \multicolumn{2}{|c|}{G}&H&i\\ 954 | \hline 955 | \end{tabular} 956 | \end{center} 957 | \end{codeshow} 958 | 959 | 各参数的说明如下: 960 | \begin{feai} 961 | \item 可选参数\textbf{对齐方式}:[t] 表示表格上端与所在行的网格线对齐。如果与它同一行的有文字的话,文字是与表格上端同高的。如果使用参数 [b],就是下端同高。[c] 是中央同高。t=top, b=buttom, c=center. 962 | \item 必选参数\textbf{列格式}:用竖线符号“|”来表示竖直表线,连续两个“|”表示双竖直表线。最右边留空了,表示没有竖直表线。或者你可以使用“@\{\}”表示没有竖直表线。你也可以用“@\{-\}”这样的形式把竖直表线替换成“-”,具体效果不再展示。而此处的l、c、r分别表示从左往右一共三列,分别\textbf{左对齐、居中对齐、右对齐}文字。在使用l、c、r时,表格宽度会自动调整。你可以用"p{2em}"这样的命\textbf{指定某一列的宽度},这时文字自动左对齐。注意:单元格中的文字默认向上水平表线对齐,即竖直居上。 963 | \item 在tabular环境内部,命令\latexline{hline}来绘制水平表线。命令\latexline{cline\{i-j\}}用于绘制横跨从i到j列的水平表线。两个连续的\latexline{hline}命令可以画双线,但是双线之间相交时可能存在问题。 964 | \item 在tabular环境内部,命令"\texttt{\&}"用于把光标跳入该行下一列的单元格。每行的最后请使用两个反斜杠命令跳入下一行。命令\latexline{hline}或\latexline{cline}不能算作一行,因此它们后面没有附加换行命令。 965 | \item 在tabular环境内部,跨列命令\latexline{multicolumn\{number\}\{format\}\{text\}}用于以format格式合并该行的number个单元格,并在合并后的单元格中写入文本text。如果一行有了跨列命令,请注意相应地减少"\texttt{\&}"的数量。 966 | \end{feai} 967 | 968 | 文章中出现了表格,几乎就一定会加载\pkg{array}宏包。在\pkg{array}宏包支持下,\texttt{cols}参数除了l, c, r, p\{\}, @\{\}以外,还可以使用: 969 | \begin{feai} 970 | \item \texttt{m\{\}, b\{\}}: 指定宽度的竖直居中,居下的列。 971 | \item \verb|>{decl}, <{decl}|: 前者用在lcrpmb参数之前,表示该列的每个单元格都以此decl命令开头;后者用于结尾。比如\footnote{例中的\latexline{centering}命令后可加入\latexline{arraybackslash}以应对可能的表格换行命令异常。}: 972 | \begin{latex} 973 | \begin{tabular}{|>{\centering\ttfamily}p{5em} 974 | |>{$}c<{$}|} 975 | ... 976 | \end{tabular} 977 | \end{latex} 978 | \item \verb|!{symbol}|: 使用新的竖直表线,类似于原生命令\texttt{@\{\}},不同在于\verb|!{}|命令可以在列间保持合理的空距,而\verb|@{}|会使两列紧贴。 979 | \end{feai} 980 | 981 | 你甚至可以自定义lcrpmb之外的列参数,但需要保证是单字母。比如定义某一列为数学环境: 982 | \begin{latex} 983 | \newcolumntype{T}{>{$}c<{$}} 984 | \end{latex} 985 | 986 | \subsubsection{\texttt{array, multirow}宏包} 987 | 来一个\pkg{array}宏包下的例子: 988 | \begin{codeshow} 989 | % 记得\usepackage{array} 990 | \begin{tabular}{|>{\setlength 991 | \parindent{5mm}}m{1cm}| 992 | >{\large\bfseries}m{1.5cm}| 993 | >{$}c<{$}|} 994 | \hline A & 2 2 2 2 2 2 & C\\ 995 | \hline 1 1 1 1 1 1 & 10 & \sin x \\ \hline 996 | \end{tabular} 997 | \end{codeshow} 998 | 999 | 然后一个跨行跨列的例子。\RED{如果同时跨行跨列,必须把multirow命令放在multicolumn内部}。用\latexline{multirow}和\latexline{multicolumn}作用于单独的1行或1列,能临时改变某单元格的对齐方式。如果用星号代替列样式,表示自适应宽度。 1000 | 1001 | \begin{codeshow} 1002 | % \usepackage{multirow} 1003 | \begin{center} 1004 | \begin{tabular}{|c|c|c|} 1005 | \hline 1006 | \multirow{2}{2cm}{A Text!} 1007 | & ABC & DEF \\ 1008 | \cline{2-3} & abc & def \\ 1009 | \hline 1010 | \multicolumn{2}{|c|} 1011 | {\multirow{2}*{Nothing}} & XYZ \\ 1012 | \multicolumn{2}{|c|}{} & xyz \\ 1013 | \hline 1014 | \end{tabular} 1015 | \end{center} 1016 | \end{codeshow} 1017 | 1018 | 表格的第一个单词是默认不断行的,这在单元格很窄而第一个词较长时会出现问题。可以通过下述方法解决: 1019 | 1020 | \begin{codeshow} 1021 | % \usepackage{array} 1022 | \newcolumntype{P}[1]{>{#1 1023 | \hspace{0pt}\arraybackslash} 1024 | p{14mm}} 1025 | % \arraybackslash用于修复换行符 1026 | \begin{center} 1027 | \begin{tabular}{|P{\raggedleft}|} 1028 | \hline Superconsciousness \\ \hline 1029 | \end{tabular} 1030 | \end{center} 1031 | \end{codeshow} 1032 | 1033 | 此外,\qd{表格还可以嵌套},以方便地“拆分单元格”。注意下例中如何确保嵌套单元格表线显示正常: 1034 | 1035 | \begin{codeshow} 1036 | \begin{tabular}{|c|l|c|} 1037 | \hline 1038 | a & bbb & c \\ \hline 1039 | a & \multicolumn{1}{@{}l@{}|} 1040 | {\begin{tabular}{c|c} 1041 | a & b \\ \hline 1042 | aa & bb \\ 1043 | \end{tabular}} 1044 | & c \\ \hline 1045 | a & b & c \\ \hline 1046 | \end{tabular} 1047 | \end{codeshow} 1048 | 1049 | 用\latexline{firsthline}和\latexline{lasthline}能够解决行内表格竖直方向对齐问题。 1050 | 1051 | \subsubsection{\texttt{makecell}宏包} 1052 | 宏包\pkg{makecell}提供了一种方便在单元格内换行的方式,并可以配合参数tblrc;带星表示有更大的竖直空距。此外,命令\latexline{multirowcell}由\pkg{multirow}宏包与该宏包共同支持。命令\latexline{thead}则有更小的字号,通常用于表头。 1053 | \begin{codeshow} 1054 | \begin{tabular}{|c|c|} 1055 | \hline 1056 | \thead{双行\\表头} & \thead{双行\\表头}\\ 1057 | \hline 1058 | \multirowcell{2}{简单\\粗暴} & \makecell[l]{ABCD\\EF} \\ 1059 | \cline{2-2} & \makecell*{更大的竖直空距} \\ 1060 | \hline 1061 | \end{tabular} 1062 | \end{codeshow} 1063 | 1064 | 该宏包还提供了\latexline{Xhline}和\latexline{Xcline}命令,可以指定横线的线宽。例如模仿三线表\footnote{更正规的三线表绘制,参考后文的\pkg{booktabs}宏包。}: 1065 | \begin{codeshow} 1066 | \begin{tabular}{ccc} 1067 | \Xhline{2pt} 1068 | \multirow{2}*{X} & 1069 | \multicolumn{2}{c}{Hey}\\ 1070 | \Xcline{2-3}{0.4pt} 1071 | & Left & Right \\ 1072 | \Xhline{1pt} 1073 | a & A & B \\ 1074 | b & C & D \\ 1075 | \Xhline{2pt} 1076 | \end{tabular} 1077 | \end{codeshow} 1078 | 1079 | \subsubsection{\texttt{diagbox}宏包} 1080 | 该宏包提供了分割表头的命令\latexline{diagbox}。虽然斜线表头并不是规范的科技排版内容,但是在许多场合也可能用到。命令支持两或三参数。 1081 | \begin{codeshow} 1082 | \begin{tabular}{c|cc} 1083 | \diagbox{左边}{中间}{右边} & A & B \\ 1084 | \hline 1085 | 1 & A1 & B1 \\ 1086 | 2 & A2 & B2 1087 | \end{tabular} 1088 | \end{codeshow} 1089 | 1090 | \subsubsection{其他} 1091 | 关于表格的间距: 1092 | \begin{feai} 1093 | \item \latexline{tabcolsep}或者\latexline{arraycolsep}控制列与列之间的间距,取决于你使用\envi{tabular}还是\envi{array}环境。默认\texttt{6pt}。 1094 | \item 列格式@能够去除列间的空距,比如“@\{\}”。而命令\latexline{extracolsep\{1pt\}}于@的参数中,那么会将其右侧的列间隔都增加\texttt{1pt}。 1095 | \item 表格内行距用\latexline{arraystretch}控制,默认为1。 1096 | \end{feai} 1097 | 1098 | 一些其他的使用技巧: 1099 | \begin{feae} 1100 | \item 输入同格式的列:例如\envi{tabular}参数\verb+|*{7}{c|}r|+,相当于7个居中和1个居右。 1101 | \item 表格重音:原本的重音命令\verb|\`|, \verb|\'|与\verb|\=|,改为\verb|\a`|, \verb|\a'|与\verb|\a=|。 1102 | \item 控制整表宽度:\pkg{tabularx}宏包提供\latexline{begin\{tabular*\}\{width\}[pos]\{cols\}},比如你可以把width取值为\latexline{0.8\char`\\linewidth}之类。 1103 | \item 如想实现单元格内换行,使用\pkg{makecell}宏包支持的\latexline{makecell}命令。 1104 | \item 宏包\pkg{dcolumn}提供了新的列对齐方式D,并调用\pkg{array}宏包。故你可以利用后者支持的命令,这样定义: 1105 | \begin{latex} 1106 | % 表示输入小数点、显示为小数点、支持小数点后2位 1107 | \newcolumntype{d}{D{.}{.}{2}} 1108 | % 使用 d{2} 这样的参数进行控制 1109 | \newcolumntype{d}[1]{D{.}{.}{#1}} 1110 | \end{latex} 1111 | 注意:\begin{itemize} 1112 | \item 表头请用\latexline{multicolumn{1}{c}}类似的语句进行处理。 1113 | \item 第三参数不能帮你截取、舍入,只用于预设列宽;小心超宽。 1114 | \item 第三参数可以是“-1”,表示小数点居中;可以形如“2.1”,表示在小数点左侧预留2位宽、右侧预留1位宽。 1115 | \end{itemize} 1116 | \end{feae} 1117 | 1118 | \subsection{非浮动体图表和并排图表} 1119 | 如果不使用浮动体,又想给图、表添加标题,请在导言区加上: 1120 | \begin{latex} 1121 | \makeatletter 1122 | \newcommand\figcaption{\def\@captype{figure}\caption} 1123 | \newcommand\tabcaption{\def\@captype{table}\caption} 1124 | \makeatother 1125 | \end{latex} 1126 | 1127 | 这部分是底层的\TeX\ 代码,在此就不多介绍了。在如上定义后,你可以在浮动体外使用\latexline{figcaption}和\latexline{tabcaption}命令。注意:为了防止标题和图表不在一页,可以用\envi{minipage}环境把它们包起来。 1128 | 1129 | 同样的,如果排版并排图片,请用\envi{minipage}把每个图包起来,指定宽度,然后放在浮动体内。注意灵活运用\verb|\\[10ex]|这样的命令来排版$2\times 2$的图片。 1130 | 1131 | 如果需要给每个图片定义小标题,参考\pkg{subfig}宏包的相关内容。这里给一个简单的例子: 1132 | \begin{latex} 1133 | \begin{figure} 1134 | \centering 1135 | \subfloat[...]{\label{sub-fig-1} 1136 | \begin{minipage} 1137 | \centering 1138 | \includegraphics[width=...]{...} 1139 | \end{minipage}} 1140 | \quad\subfloat[...] 1141 | \end{latex} 1142 | 1143 | \section{页面设置} 1144 | \label{sec:geometry} 1145 | \subsection{纸张、方向和边距} 1146 | 主要借助\pkg{geometry}宏包。先看一张页面构成,如\fref{fig:geo-paper}: 1147 | \begin{figure} 1148 | \centering 1149 | \input{./tikz/geometry-paper.tex} 1150 | \figcaption{页面构成示意图} 1151 | \label{fig:geo-paper} 1152 | \end{figure} 1153 | 1154 | geometry宏包的具体的选项参数有: 1155 | \begin{para} 1156 | \item[paper=]: 其中纸张尺寸有[a0--a6, b0--b6, c0--c6]paper, ansi[a--e]paper, letterpaper, executivepaper, legalpaper. 1157 | \item[papersize=\{,\}]: 自定义尺寸。也可以单独对paperwidth或者paperheigth赋值。 1158 | \item[landscape]: 切换到横向纸张。默认的是portrait. 1159 | \end{para} 1160 | 1161 | body部分分为两个概念:一个是总文本区(total body),另一个是主文本区(body). 总文本区可以由主文本区加上页眉(head)、页脚(foot)、侧页边(marginalpar)组成。默认的选项为includehead,表示总文本区包含页眉。要包括其他内容,可使用:\texttt{includefoot, includeheadfoot, includemp, includeall},以及以上各个参数将include改为ignore后的参数。 1162 | 1163 | 总文本区在默认状态下占纸张总尺寸的0.7,由scale=0.7控制,你也可以分别用\texttt{hscale}和\texttt{vscale}指定宽和高的占比。用具体的长度定义也是可以的,使用\texttt{(total)width}和\texttt{(total)height}定义总文本区尺寸,或者用\texttt{textwidth}和\texttt{textheight}定义主文本区的尺寸\footnote{当totalwidth和textwidth都定义时,优先采用后者的值。}。或者直接用\texttt{total=\{width,height\}, body=\{width,height\}}定义。甚至你可以用\texttt{lines=}行数指定textheight。 1164 | 1165 | 页边的控制最为常用,分别用\texttt{left/inner, right/outer, top, bottom}来定义四向的页边。其中\texttt{inner, outer}参数只在文档的twoside参数启用时才有意义。你可以用\texttt{hmarginratio}来给定left(inner)与right(outer)页边宽的比例,默认是单页1:1、双页2:3。top和bottom之间的比由\texttt{vmarginratio}给定。你也可以用\texttt{vcentering, hcentering, centering}来指定页边比例为1:1. 在文档的左侧(内侧),可以指定装订线宽度\texttt{bindingoffset},使页边不会被侵入。 1166 | 1167 | 页眉和页脚是位于top和bottom页边之内的文档元素。对于页眉和页脚的高度,分别使用\texttt{headheight/head, footskip/foot}参数指定。\texttt{hmargin, vmargin}来指定侧两和顶底的边距。它们到主文本区的参数分别是\texttt{headsep, footnotesep, marginparsep}. 你可以用\texttt{nohead, nofoot, nomarginpar}参数来清除总文本区中的页眉,页脚和侧页边。 1168 | 1169 | 对于在文档类documentclass命令中能使用的参数,geometry有不少也能做。比如\texttt{twoside, onecolumn, twocolumn}。甚至还能用文档类中不能用的\texttt{columnsep}(启用多栏分隔线)。 1170 | 1171 | 最后,这是几个小例子: 1172 | \begin{latex} 1173 | % 与Microsoft Word的默认样式相同: 1174 | \usepackage[hmargin=1.25in,vmargin=1in]{geometry} 1175 | % 书籍中靠书脊一侧的边距较小: 1176 | \usepackage[inner=1in,outer=1.25in]{geometry} 1177 | \end{latex} 1178 | 1179 | \subsection{页眉和页脚} 1180 | 页眉和页脚的控制主要借助fancyhdr宏包。\LaTeX\ 中的页眉页脚定义主要借助了两个命令,一个是\latexline{pagestyle},参数有: 1181 | \begin{para} 1182 | \item[empty] 无页眉页脚。 1183 | \item[plain] 无页眉,页脚只包含一个居中的页码。 1184 | \item[headings] 无页眉,页脚包含章/节名称与页码。 1185 | \item[myheadings] 无页眉,页脚包含页码和用户定义的信息。 1186 | \end{para} 1187 | 1188 | 另一个命令是\latexline{pagenumbering},与计数器一样,拥有\texttt{arabic, [Rr]oman, [Aa]lph}五种页码形式。 1189 | 1190 | \pkg{fancyhdr}宏包给出了一个叫fancy的\latexline{pagestyle},将页眉和页脚分别分为左中右三个部分,分别叫\latexline{lhead}, \latexline{chead}, \latexline{rhead}, 以及类似的[lcr]foot. 页眉页脚处的横线粗细也可以定义,默认页眉为0.4pt、页脚为0pt. 下面是一个例子: 1191 | \begin{latex} 1192 | \usepackage{fancyhdr} 1193 | \pagestyle{fancy} 1194 | \lhead{} 1195 | \chead{} 1196 | \rhead{\bfseries wklchris} 1197 | \lfoot{Leftfoot} 1198 | \cfoot{\thepage} 1199 | \rfoot{Rightfoot} 1200 | \renewcommand{\headrulewidth}{0.4pt} 1201 | \renewcommand{\footrulewidth}{0.4pt} 1202 | \end{latex} 1203 | 1204 | 加载这个宏包,更多地是为了解决双页(twoside)文档的排版问题。对于双页文档,\pkg{fancyhdr}宏包给出了一套新的指令:用E, O表示单数页和双数页,L, C, R表示左中右,H, F表示页眉和页脚。其中H, F需要配合\latexline{fancyhf}命令使用。如果不使用H, F这两个参数,也可以使用\latexline{fancyhead}, \latexline{fancyfoot}两个命令代替。一个新的例子: 1205 | \begin{latex} 1206 | \fancyhead{} % 清空页眉 1207 | \fancyhead[RO,LE]{\bfseries wklchris} 1208 | \fancyfoot{} % 清空页脚 1209 | \fancyfoot[LE,RO]{Leftfoot} 1210 | \fancyfoot[C]{\thepage} 1211 | \fancyfoot[RE,LO]{Rightfoot} 1212 | \end{latex} 1213 | 1214 | 该宏包在定义双页文档时,采用了如下的默认设置: 1215 | \begin{latex} 1216 | \fancyhead[LE,RO]{\slshape \rightmark} 1217 | \fancyhead[LO,RE]{\slshape \leftmark} 1218 | \fancyfoot[C]{\thepage} 1219 | \end{latex} 1220 | 1221 | 上例中的\latexline{rightmark}表示较低级别的信息,即当前页所在的section,形式如“1.2 sectionname ”,对于article则是subsection;而\latexline{leftmark}表示较高级别的信息,即对应的chapter,对于article则是section. 命令\latexline{leftmark}包含了页面上\latexline{markboth}\footnote{\latexline{markboth}是一个会被\latexline{chapter}等命令调用的命令,默认右参数是空。注意,带星号的大纲不调用这一命令,你需要这样书写:\latexline{chapter*\{This\char`\\markboth\{This\}\{\}\}}。}下的最后一条命令的左参数,比如该页上出现了section 1--2,那么leftmark就是“Section 2”;命令\latexline{rightmark}则包含了页面上的第一个\latexline{markboth}命令的右参数或者第一个\latexline{markright}命令的唯一参数,比如可能是“Subsection 1.2”。 1222 | 1223 | 这听起来可能难以理解,但是\latexline{markboth}命令有两个参数,分别对应显示在文档的左页和右页(但是默认右参数留空,用\latexline{markright}去指定右页),故有左右之分;而\latexline{markright}命令只有一个参数。你可以试着再去理解一下双页文档下的宏包的默认设置。利用这一点来重定义chaptermark(book/report), sectionmark, subsectionmark(article)命令,举个例子: 1224 | \begin{latex} 1225 | % 这里的参数#1是指输入的section/chapter的标题 1226 | % 效果:“1.2. The section” 1227 | \renewcommand{\sectionmark}[1]{\markright{\thesection.\ #1}} 1228 | % 效果:“CHAPTER 2. The chapter” 1229 | \renewcommand{\chaptermark}[1]{\markboth{\MakeUppercase{% 1230 | \chaptername}\ \thechapter.\ #1}{}} 1231 | \end{latex} 1232 | 1233 | 如果你对于默认的\latexline{pagestyle}不满意,可以用\latexline{fancypagestyle}命令进行更改。例如更改plain页面类型: 1234 | \begin{latex} 1235 | \fancypagestyle{plain}{ 1236 | \fancyhf{} % 清空页眉页脚 1237 | \fancyhead[c]{\thesection} 1238 | \fancyfoot{\thepage}} 1239 | \end{latex} 1240 | 1241 | \section{抄录与代码环境} 1242 | 抄录是指将键盘输入的字符(包括保留字符和空格)不经过\TeX\ 解释,直接输出到文档。默认的字体参数是等宽字族(ttfamily)。用法是\latexline{verb(*)}命令或者\envi{verbatim(*)}环境,区别在于带星号的会将空格以“\textvisiblespace”(\latexline{textvisiblespace})的形式标记出来。 1243 | 1244 | 注意,\latexline{verb}命令是一个特殊的命令,可以用一组花括号括住抄录内容,也可以任意两个同样的符号(但不能是*)。比如: 1245 | \begin{latex} 1246 | \verb|fooo{}bar| 1247 | \verb+fooo{}bar+ 1248 | \end{latex} 1249 | 1250 | \latexline{verb(*)}以及\envi{verbatim(*)}环境很脆弱,不能隐式地用于自定义环境,也一般不能用作命令的参数。\pkg{verbatim}宏包提供了更多的抄录支持,\pkg{fancyvrb}宏包提供了\latexline{SaveVerb}, \latexline{UseVerb}命令,以及便于实现居中的\envi{BVerbatim}环境(置于\envi{center}环境内即可),详情读者可自行查阅。 1251 | 1252 | 宏包\pkg{shortverb}支持以一对符号代替\latexline{verb}命令,比如竖线号: 1253 | \begin{latex} 1254 | % \usepackage{shortverb} 1255 | \MakeShortVerb| 1256 | Verbatim between this pair of verts: |#\?*^| 1257 | \end{latex} 1258 | 1259 | 代码环境的输出,比如本文中带行号的代码块,参见\hyperref[sec:coding]{这一节}。 1260 | 1261 | \begin{multicols}{2}[\section{分栏}] 1262 | 这部分内容使用文档类的\texttt{two\-column}可选参数就能实现。在\LaTeX\ 的双栏模式下,\latexline{newpage}命令只能进行换栏操作,而\latexline{clearpage}命令才会换进行换页操作。同时,文中随时可以使用\latexline{twocolumn}或者\latexline{onecolumn}命令执行\RED{换页、清空浮动队列,并切换分栏模式}。在双栏上方的跨栏内容,如摘要,可以写在\latexline{twocolumn[\ldots]}可选参数中。 1263 | 1264 | 栏之间的间距由\latexline{columnsep}控制;栏宽为\latexline{columnwidth},但请不要手工修改这个值。它可以被用作参数传递给其他命令。栏之间的分隔线宽由长度\latexline{columnseprule}给出,默认值为0pt,一般需要可以将其设置为0.4pt。 1265 | 1266 | 如果在同一页内需要分栏与单栏并存,或者想要分成多栏,可以尝试使用\pkg{multicol}宏包。它提供一个支持任意多栏、但是边注和浮动体\footnote{带星号的浮动体或许可以使用,如\envi{figure*},但参数\texttt{h}会失效。}无法使用的环境。比如本节: 1267 | \begin{latex} 1268 | \begin{multicols}{2} 1269 | [\section{分栏}] 1270 | ... 1271 | \end{multicols} 1272 | \end{latex} 1273 | 1274 | 同时,该宏包会对齐每一栏的下边缘;在该环境下,使用\latexline{columnbreak}来强制切换到新的一栏。还需要指出的是,该宏包并不保证各栏之间每行的网格都是对齐的。如果你需要此功能,可以参考\pkg{grid}宏包。 1275 | \end{multicols} 1276 | 1277 | \section{文档拆分} 1278 | \label{sec:include} 1279 | 文档拆分只需要在主文件中使用\latexline{input\{filename.tex\}}或\latexline{include\{filename\}}命令,后者不写扩展名默认为.tex。两者区别在于\latexline{include}命令将会插入\latexline{clearpage}再读取文件。 1280 | 1281 | 其中 filename 可以是相对路径,如 \verb|./chapter1|,\verb|../tikz|;也可以是绝对路径,如 \verb|D:/latex/chapter1|。但是注意,在使用\latexline{include\{filename\}}时,尽量不要选择在该文档父目录中的文件。例如,在 \verb|dir/subdir/main.tex| 中使用\latexline{include\{dir/filename\}},会因安全问题无法在文件夹 \verb|dir/| 中生成辅助文件 \verb|filename.aux|,进而导致编译失败。在这时应该尝试调整文章层级结构,如果有十分必要的理由这么做的话,在编译的时候可以使用 1282 | \begin{verbatim} 1283 | openout_any=a xelatex(pdflatex) mainfilename 1284 | \end{verbatim} 1285 | 临时修改 \verb|openout_any| 的值,该选项可以在 \verb|texmf.cnf| 中查看它的说明,但是不推荐在 \verb|texmf.cnf| 中修改,这可能会导致系统安全问题, 而\latexline{input\{filename.tex\}}不受这一点的影响。更多说明可以看\href{https://tex.stackexchange.com/questions/2209/how-can-i-include-the-file-somedir-file-tex-in-the-file-somedir-subdir-another}{\TeX SX 上的回答}以及\href{http://www.texfaq.org/FAQ-includeother}{\TeX faq上的说明}。 1286 | 1287 | 拆分的优势在于可以根据chapter(或其他)分为多个文件,省去了长文档浏览时的一些不便。你也可以把整个导言区做成一个文件,然后在不同的\LaTeX\ 文档中反复使用,即充当模板的功能。你还可以把较长的tikz绘图代码写到一个tex中,在需要时\latexline{input}即可。 1288 | 1289 | 在导言区定义\latexline{includeonly}加上filename,可以确保只引入列表中的文件。在被引入文件的最后加入\latexline{endinput}命令,其后的内容会被忽略。 1290 | 1291 | 一种较规范的拆分文件的文件头,以本文的章节放在次级目录中为例: 1292 | \begin{latex} 1293 | %!TEX root = ../LaTeX-cn.tex 1294 | \end{latex} 1295 | 1296 | \section{西文排版及其他} 1297 | \subsection{连写} 1298 | \LaTeX\ 排版以及正规排版中,如果你输入ff, fl, fi, ffi等内容,它们默认会连写。在字母中间插入空白的箱子以强制不连写:f~\latexline{mbox\{\}}~l。 1299 | 1300 | \subsection{断词} 1301 | 行末的英文单词太长,\LaTeX\ 就会以其音节断词。如果你想指定某些单词的断词位置,使用如下命令断词。例子: 1302 | \begin{latex} 1303 | \hyphenation{Hy-phen-a-tion FORTRAN} 1304 | \end{latex} 1305 | 1306 | 这个例子允许Hyphenation, hyphenation在短横处断词,同时\textbf{禁止}FORTRAN, Fortran, fortran断词。如果你在行文中加入\verb|\-|命令,则可以实现允许在对应位置断词的效果。比如: 1307 | 1308 | \begin{codeshow} 1309 | I will show you this: 1310 | su\-per\-cal\-i\-frag\-i\-lis\-% 1311 | tic\-ex\-pi\-al\-i\-do\-cious 1312 | \end{codeshow} 1313 | 1314 | 如果你不想断词,比如电话号码,巧妙利用\latexline{mbox}命令吧: 1315 | \begin{latex} 1316 | My telephone number is: \mbox{012 3456 7890} 1317 | \end{latex} 1318 | 1319 | \subsection{硬空格与句末标点} 1320 | 如果你想在某个不带参数的命令后输入空格,请接上一个空的花括号确保空格能够正常输出。例如:\latexline{这是\char`\\TeX\{\} Live. } 1321 | 1322 | 在\LaTeX\ 中还有一个命令“\texttt{\char92\textvisiblespace}”,用于产生一个硬空格(区别于软空格\texttt{\char92space}),所以你也可以用\latexline{TeX\char`\\ \textvisiblespace Live}。 1323 | 1324 | 西文排版下,\LaTeX\ 会判断一种\co{句末标点},即小写字母后的“.”,“?”或者“!”三个英文标点。句末标点后如果键入空格,\LaTeX\ 会自动增加空格的距离。如果句子以大写字母结尾,\LaTeX\ 会认为这是人名而不增加空格,这时候需要手动添加命令\latexline{@}: 1325 | 1326 | \begin{codeshow} 1327 | OK. That's fine.\\ 1328 | OK\@. That's fine. 1329 | \end{codeshow} 1330 | 1331 | 相反,有些并非句末标点的情况会被识别为句末标点,这时候需要在标点后插入一个\latexline{\textvisiblespace}或者\verb|~|来缩小间距;区别在于前者允许断行,后者不允许。 1332 | 1333 | \begin{codeshow} 1334 | Prof. Smith is a nice man.\\ 1335 | Prof.~Smith is a nice man. 1336 | \end{codeshow} 1337 | 1338 | 在标点后使用\latexline{frenchspacing}命令,可以调整为极小的空距。这个命令在排版参考文献列表时可能被使用。 1339 | 1340 | 在\xelatex 编译模式下的中文字符,与西文或者符号之间会产生默认的空距\footnote{这个问题在ctex文档类下似乎被已解决。}。如果你不想要这个空距,把中文放在\latexline{mbox}内即可,比如: 1341 | 1342 | \begin{codeshow} 1343 | \mbox{例子}-1 1344 | \end{codeshow} 1345 | 1346 | \subsection{特殊符号} 1347 | 符号的总表可以参照symbols-a4文档,运行texdoc symbols-a4即可调出。包括希腊字母在内的一些数学符号将会在下一章介绍。这里给出基于\pkg{wasysym}宏包的一些常用符号: 1348 | \begin{center} 1349 | \centering 1350 | \tabcaption{wasysym宏包符号} 1351 | \begin{tabular}{*{3}{c >{\ttfamily\char92}p{5.5em}}} 1352 | \permil & permil & \male & male & \female & female \\ 1353 | \checked & checked & \XBox & XBox & \CheckedBox & CheckedBox \\ 1354 | \hexstar & hexstar & \phone & phone & \twonotes & twonotes 1355 | \end{tabular} 1356 | \end{center} 1357 | -------------------------------------------------------------------------------- /LaTeX-cn/chapters/Play-with-Math.tex: -------------------------------------------------------------------------------- 1 | %!TEX root = ../LaTeX-cn.tex 2 | \chapter{数学排版} 3 | \section{行间与行内公式} 4 | \co{行内公式}指将公式嵌入到文段的排版方式,主要要求公式垂直距离不能过高,否则影响排版效果。行内公式的书写方式: 5 | \begin{latex} 6 | $...$ 或者 \(...\) 或者 \begin{math}...\end{math} 7 | \end{latex} 8 | 9 | 一般推荐第一或第二种方式。例:\verb|$\sum_{i=1}^{n}a_i$|,即:$\sum_{i=1}^{n}a_i$. 10 | 11 | 另外一种公式排版方式是\co{行间公式},也称行外公式,使用: 12 | \begin{latex} 13 | \[...\] 或者 \begin{displaymath}...\end{displaymath} 14 | 或者 amsmath 提供的 \begin{equation*}...\end{equation*} 15 | \end{latex} 16 | 17 | 一般也推荐第一种命令\footnote{还有一种\texttt{\$\$...\$\$}的写法,源自底层\TeX,不建议使用。},例如:\verb|\[\sum_{i=1}^n{a_i}\]|,得到: 18 | \[\sum_{i=1}^{n}a_i\] 19 | 20 | 从上面的两个例子可以看出,即使输出相同的内容,行内和行间的排版也是有区别的,比如累加符号上标是写在正上方还是写在右上角。 21 | 22 | 如果行间公式需要编号,使用\envi{equation}环境\footnote{需要注意有一个\RED{已被放弃}的多行公式编号环境叫\texttt{eqnarray},请不要再使用。},还可以插入标签: 23 | 24 | \begin{codeshow} 25 | \begin{equation} 26 | \label{eq:NoExample} 27 | |\epsilon|>M 28 | \end{equation} 29 | \end{codeshow} 30 | 31 | \section{数学字体、字号与空格} 32 | \label{sec:mathfont} 33 | \subsection{空格} 34 | 在数学环境中,行文空格是被忽略的。比如\verb|$x,y$|和\verb|$x, y$|并没有区别。数学环境有独有的空格命令,最后一个是$-3/18$的空格: 35 | 36 | \begin{codeshow} 37 | $没有空格,3/18空\,格$ \\ 38 | $4/18空\:格,5/18空\;格$ \\ 39 | $9/18空\ 格,一个空\quad 格$ \\ 40 | $两个空\qquad 格,负3/18空\!格$ 41 | \end{codeshow} 42 | 43 | 事实上,以上命令也可以在数学模式外使用,其中使用最广泛的是\latexline{,},比如上文提到过的千位分隔符。在数学环境中它也应用广泛(含有隐式的\latexline{,}): 44 | 45 | \begin{codeshow} 46 | \[ \int_0^1 x \ud{}x 47 | = \frac{1}{2} \] 48 | \end{codeshow} 49 | 50 | 其中\verb|\ud|命令是自定义的,这也是微分算子的正常定义\label{cmd:ud}: 51 | \begin{latex} 52 | \newcommand{\ud}{\mathop{}\negthinspace\mathrm{d}} 53 | \end{latex} 54 | 55 | \subsection{间距} 56 | 命令\latexline{abovedisplayskip}和\latexline{belowdisplayskip}控制了行间公式与上下文之间的间距,并且该值不会随字号调整而调整。有时你需要自行指定。默认值\texttt{12pt plus 3pt minus 9pt}。多行公式之间的间距用\latexline{jot}来控制,默认\texttt{3pt}。命令\latexline{mathsurround}给出了行内公式与文字间,除了预留空格之外的间距,默认值为\texttt{0pt}。另外一个有趣的命令\latexline{smash},可以忽略参数的全高: 57 | \begin{codeshow} 58 | \[\underline{\smash{\int f(x)\ud x}}=1\] 59 | \end{codeshow} 60 | 61 | 也能够通过参数,选择只忽略高度(t)或只忽略深度(b): 62 | \begin{codeshow} 63 | $\sqrt{A_{n_k}} \qquad 64 | \sqrt{\smash[b]{A_{n_k}}}$ 65 | \end{codeshow} 66 | 67 | \subsection{字号} 68 | \LaTeX\ 提供四种字号尺寸命令: 69 | \begin{para} 70 | \item[\latexline{displaystyle}] 行间公式尺寸。如$\displaystyle \sum_{i=1}^n a$ 71 | \item[\latexline{textstyle}] 行内公式尺寸。如$\textstyle \sum_{i=1}^n a$ 72 | \item[\latexline{scriptstyle}] 上下标尺寸。如$\scriptstyle \sum_{i=1}^n a$ 73 | \item[\latexline{scriptscriptstyle}] 次上下标尺寸。如$\scriptscriptstyle \sum_{i=1}^n a$ 74 | \end{para} 75 | 76 | \subsection{数学字体} 77 | 将字体转为正体使用\latexline{mathrm}命令。如需保留空格,使用\latexline{textrm}命令——这与正文一致。但是,\latexline{textrm}命令内的字号可能不会自适应,\latexline{mathrm}则表现起来稳定得多。 78 | 79 | 例如自然对数的底数$\ue$,在本文中就是这样定义的: 80 | \begin{latex} 81 | \newcommand{\ue}{\mathrm{e}} 82 | \end{latex} 83 | 84 | 以下简单介绍几种数学字体。数学字体的总表参见\tref{tab:mathfont}。 85 | 86 | \subsubsection{数学粗体} 87 | 数学粗体使用\pkg{amsmath}宏包支持的\latexline{boldsymbol}命令。命令\latexline{boldmath}的问题在于它只能加粗一个数学环境,其中很可能包括了标点符号,而这是不严谨的。命令\latexline{mathbf}就差的更远,它只能把字体转为\textbf{正}粗体,而数学字体都是斜体的。 88 | 89 | \begin{codeshow} 90 | $\mu,M$\\ $\boldsymbol{\mu}, 91 | \boldsymbol{M}$ 92 | \end{codeshow} 93 | 94 | \subsubsection{空心粗体} 95 | 空心粗体使用\pkg{amsfonts}或\pkg{amssymb}宏包的\latexline{mathbb}命令。这里用\latexline{textrm}而不是\latexline{mathrm},是为了保留空格。 96 | 97 | \begin{codeshow} 98 | $x^2 \geq 0 \qquad 99 | \textrm{for all }x\in\mathbb{R}$ 100 | \end{codeshow} 101 | 102 | \section{基本命令} 103 | 基本函数默认用正体书写,包括: 104 | \begin{verbatim} 105 | \sin \cos \tan \cot \arcsin \arccos \arctan \cot \sec \csc 106 | \sinh \cosh \tanh \coth \log \lg \ln \ker \exp \dim \arg \deg 107 | \lim \limsup \liminf \sup \inf \min \max \det \Pr \gcd 108 | \end{verbatim} 109 | 110 | 以上函数,最后一行的10个是可以带上下限参数的,即在行间公式模式下,上标和下标将在函数正上方和正下方书写内容。 111 | 112 | \pkg{amsmath}宏包允许\latexline{DeclareMathOperator}命令自定义基本函数,用法类似于\latexline{newcommand}命令。如果命令带星号\latexline{DeclareMathOperator*},则可以带上下限参数。 113 | 114 | 此外有一个叫\latexline{mathop}的命令,可以把参数转换为数学对象,使其能够堆叠上下标;\latexline{mathbin}与\latexline{mathrel}则分别能把参数转换为二元运算符、二元关系符,并正确设置两侧的空距。 115 | 116 | \subsection{上下标与虚位} 117 | 用低划线和尖角符表示上标和下标,请仔细体会下述例子: 118 | 119 | \begin{codeshow} 120 | $a^3_{ij}$ \\ 121 | ${a_{ij}}^3\text{或}a_{ij}{}^3$\\ 122 | $\mathrm{e}^{x^2}\geq 1$ 123 | \end{codeshow} 124 | 125 | 上面的指数3的位置读者可以多多体会一下。此外,\latexline{phantom}被称为虚位命令,从下例你也能够体会到他的作用: 126 | 127 | \begin{codeshow} 128 | ${}^{12}_{6}\mathrm{C}$ \\ 129 | ${}^{12}_{\phantom{1}6} 130 | \mathrm{C}$ \\ 131 | $a^3_{ij}$ \\ 132 | $a^{\phantom{ij}3}_{ij}$ 133 | \end{codeshow} 134 | 135 | 宏包\pkg{mathtools}提供了\latexline{prescript}来避免手工调整: 136 | \begin{codeshow} 137 | $\prescript{12}{6}{\mathrm{C}}$ 138 | \end{codeshow} 139 | 140 | \subsection{微分与积分} 141 | 导数直接使用单引号\verb|'|,积分使用\latexline{int}符号: 142 | 143 | \begin{codeshow} 144 | $y'=x \qquad \dot{y}(t)=t$ \\ 145 | $\ddot{y}(t)=t+1$ 146 | $\dddot{y}+\ddddot{y}=0$ \\ 147 | $\iint_{D}f(x)=0$ 148 | $\int_{0}^{1}f(x)=1$ 149 | \end{codeshow} 150 | 151 | 有时候需要更高级的微分或积分号,其中\latexline{ud}命令在\hyperref[cmd:ud]{上文这里}定义过: 152 | \begin{codeshow} 153 | \[\left.\frac{\ud y}{\ud x}\right|_{x=0}\quad 154 | \frac{\partial f}{\partial x} 155 | \quad\oint\;\varoiint_S \] 156 | \end{codeshow} 157 | 158 | 其中的\latexline{dot}系的导数形式\LaTeX\ 只原生支持到二阶导数。后面的三阶、四阶需要\pkg{amsmath}宏包。\latexline{int}系的积分命令类似。而环形双重积分命令\latexline{varoiint}需要\pkg{esint}宏包\footnote{该宏包可能与\pkg{amsmath}冲突,即便使用也请其放在\pkg{amsmath}之后加载。}。 159 | 160 | \latexline{left.}或\latexline{right.}命令\footnote{参考\hyperref[subsec:delimiter]{定界符}部分的内容。}只用于匹配,本身不输出任何内容。 161 | 162 | \subsection{分式、根式与堆叠} 163 | 分式使用\latexline{frac}命令。或者\pkg{amsmath}宏包支持的\latexline{dfrac}、\latexline{tfrac}命令来强制获得行间公式、行内公式大小的分数。如果想自定义分式样式,参考\secref{subsec:binom}一节的\latexline{genfrac}命令。 164 | \begin{codeshow} 165 | \[\frac{x}{y}+\dfrac{x}{y} 166 | +\tfrac{a}{b}\] 167 | \end{codeshow} 168 | 169 | 该宏包还支持另一个命令\latexline{cfrac},用于输入连分式。 170 | \begin{codeshow} 171 | \[\cfrac{1}{1+\cfrac{2}{1+x}}\] 172 | \end{codeshow} 173 | 174 | 空根式用\latexline{surd}输出,更常用的是\latexline{sqrt}: 175 | \begin{codeshow} 176 | $\sqrt{2} \qquad \surd$\\ 177 | $\sqrt[\beta]{k}$ 178 | \end{codeshow} 179 | 180 | 开方次数的位置可以用这两个命令微调,参数是整数: 181 | \begin{codeshow} 182 | $\sqrt[\leftroot{-2}\uproot{2} \beta]{k}$ 183 | \end{codeshow} 184 | 185 | 划线命令使用\latexline{underline}和\latexline{overline},水平括号使用brace或者bracket代替line,例如\latexline{underbrace}: 186 | 187 | \begin{codeshow} 188 | $\overline{m+n}$ \\ 189 | $\underbrace{a_1+\cdots+a_n}_{n}$ 190 | $\overbrace{a_1+\cdots+a_n}^{n}$ 191 | % 可选参数:线宽;竖直空距 192 | $\underbracket[0.4pt][1ex] 193 | {a_1+\cdots+a_n}_n$ 194 | \end{codeshow} 195 | 196 | 两个互有重叠的括号需要一个箱子命令\latexline{rlap},会在后面提到。不过在$j$之前的空距有些异常,可能需要\latexline{,}进行修正。 197 | \begin{codeshow} 198 | \[b+\rlap{$\overbrace{\phantom{ 199 | c+d+e+f+g}}^x$}c+d+\underbrace{ 200 | e+f+g+h+i}_y+\,j \] 201 | \end{codeshow} 202 | 203 | 事实上\latexline{overline}命令也存在问题,请比较: 204 | 205 | \begin{codeshow} 206 | $\overline{A}\overline{B}$ \\ 207 | $\closure{A}\closure{B}$ 208 | $\closure{AB}$ 209 | \end{codeshow} 210 | 211 | 其中\latexline{closure}是在导言区定义的: 212 | \begin{latex} 213 | \newcommand{\closure}[2][3]{{}\mkern#1mu 214 | \overline{\mkern-#1mu#2}} 215 | \end{latex} 216 | 217 | 还可以输出能堆叠到其他对象上的箭头符,比如向量符号: 218 | 219 | \begin{codeshow} 220 | $\vec a\quad \overrightarrow{PQ}$ 221 | $\overleftarrow{EF}$ 222 | \end{codeshow} 223 | 224 | 你也许还需要能够添加上下堆叠的箭头符: 225 | 226 | \begin{codeshow} 227 | \[ a\xleftarrow{x+y+z} b \] 228 | \[ c\xrightarrow[x1}^{x}\quad 284 | \mathop{xyz}\limits_{x>0}\quad 285 | \lim\nolimits_{x\to \infty}\] 286 | \end{codeshow} 287 | 288 | \subsection{矩阵与省略号} 289 | 最朴素的矩阵排版可以通过\envi{array}环境和自适应定界符完成: 290 | 291 | \begin{codeshow} 292 | \[\mathbf{A}= 293 | \left(\begin{array}{ccc} 294 | x_{11} & x_{12} & \ldots \\ 295 | x_{21} & x_{22} & \ldots \\ 296 | \vdots & \vdots & \ddots 297 | \end{array}\right)\] 298 | \end{codeshow} 299 | 300 | 还有就是\latexline{cdots}命令。\pkg{mathdots}宏包支持省略号缩放,并提供了\latexline{iddots}:$\iddots$. 或许什么时候需要使用呢? 301 | 302 | 矩阵排版更多地使用\envi{matrix}环境,以圆括号矩阵\envi{pmatrix}最为常见: 303 | \begin{codeshow} 304 | \centering $\begin{matrix} 305 | 0 & 1 \\ 1 & 0 \end{matrix}\qquad 306 | \begin{pmatrix} 0 & 2 \\ 307 | 2 & 0 \end{pmatrix}$ 308 | \end{codeshow} 309 | 310 | 方括号和花括号使用\envi{[Bb]matrix}环境: 311 | \begin{codeshow} 312 | \centering $\begin{bmatrix} 313 | 0 & 3 \\ 3 & 0 \end{bmatrix}\qquad 314 | \begin{Bmatrix} 0 & 4 \\ 315 | 4 & 0 \end{Bmatrix}$ 316 | \end{codeshow} 317 | 318 | 行列式使用\envi{[Vv]matrix}环境: 319 | \begin{codeshow} 320 | \centering $\begin{vmatrix} 321 | 0 & 5 \\ 5 & 0 \end{vmatrix}\qquad 322 | \begin{Vmatrix} 0 & 6 \\ 323 | 6 & 0 \end{Vmatrix}$ 324 | \end{codeshow} 325 | 326 | 宏包\pkg{mathtools}的带星\texttt{matrix}命令,可更改列对齐: 327 | \begin{codeshow} 328 | $\begin{pmatrix*}[r] 329 | 100 & -200 \\ 20 & 10 330 | \end{pmatrix*}$ 331 | \end{codeshow} 332 | 333 | 在矩阵中排版\latexline{dfrac}分式时,处理行距如下例的 \texttt{\char92\char92 [8pt]}: 334 | \begin{codeshow} 335 | \[\mathbf{H}=\begin{bmatrix} 336 | \dfrac{\partial^2 f}{\partial x^2} & 337 | \dfrac{\partial^2 f} 338 | {\partial x \partial y} \\[8pt] 339 | \dfrac{\partial^2 f} 340 | {\partial x \partial y} & 341 | \dfrac{\partial^2 f}{\partial y^2} 342 | \end{bmatrix}\] 343 | \end{codeshow} 344 | 345 | 宏包\pkg{amsmath}还支持行内小矩阵\latexline{smallmatrix},需手动加括号。 346 | \begin{codeshow} 347 | 矩阵 $\left(\begin{smallmatrix} 348 | x & -y\\ y & x\end{smallmatrix} 349 | \right)$ 可以显示在行内。 350 | \end{codeshow} 351 | 352 | 一种带边注的矩阵\latexline{bordermatrix},用法有些奇怪: 353 | \begin{codeshow} 354 | \[\bordermatrix{& 1 & 2\cr 355 | 1 & A & B \cr 356 | 2 & C & D \cr} \] 357 | \end{codeshow} 358 | 359 | 最后,如果想排出更好看优雅的矩阵,可以参考宏包\pkg{nicematrix}。或者想用简单的方法输入一些特殊矩阵, 可以参考宏包\pkg{physics},这里不过多介绍。 360 | 361 | \subsection{分段函数与联立方程} 362 | 用\envi{cases}环境书写分段函数,它自动生成一个比\latexline{left\{}更紧凑的花括号: 363 | 364 | \begin{codeshow} 365 | \[y=\begin{cases} 366 | \int x, & x>0 \\ 367 | 0, & x=0 \\ 368 | x-1, & x<0 369 | \end{cases},\,x\in\mathbb{R}\] 370 | \end{codeshow} 371 | 372 | 如果想要生成display样式的内容(比如上面的积分号只是text样式的),使用\pkg{mathtools}宏包的\envi{dcases}环境代替\envi{cases}环境。如果\envi{cases}环境的第二列条件不是数学语言而是一般文字,可以考虑使用\envi{dcases*}环境,列中用\&{}隔开。 373 | 374 | \begin{codeshow} 375 | \[y=\begin{dcases} 376 | \int x, & x>0 \\ 377 | x^2, & x\leqslant 0 378 | \end{dcases}\] 379 | \[z=\begin{dcases*} 380 | y, & when $y$ is prime\\ 381 | y^2, & otherwise 382 | \end{dcases*}\] 383 | \end{codeshow} 384 | 385 | \subsection{多行公式及其编号} 386 | \label{subsec:multieqnum} 387 | 多行公式可以使用\pkg{amsmath}下的\envi{align}环境——因为原生的\envi{eqnarray}环境真的很差!而且\envi{align}环境不需要像\envi{array}环境那样给出列的数目和参数,能够根据 388 | \texttt{\&}符号的数量来自调整。\qd{这个环境会自动对齐等号或者不等号,所以必要时请用\&指定对齐位置}。下面是一个例子: 389 | 390 | \begin{codeshow} 391 | \begin{align} 392 | a^2 &= a\cdot a \\ 393 | &= a*a \\ 394 | &= a^2 395 | \end{align} 396 | \end{codeshow} 397 | 398 | \LaTeX\ 中长公式不能自动换行\footnote{不过\pkg{breqn}宏包的\envi{dmath}环境可以实现自动换行,读者可以自行尝试效果。},请如上自行指定断行位置和缩进距离。 399 | 400 | 至于多行公式换页,可以在导言区加上\latexline{allowdisplaybreaks}实现(可选参数:1为尽量避免换页,2至4为倾向于换页),或在特定位置加上\latexline{displaybreak}(可选参数:0为允许在下个换行符后换页,但不倾向换页;2-3介中;4为强制换页)。两种的默认可选参数都是4。 401 | 402 | 上例给出三个编号,如果你只需要一个,可以: 403 | 404 | \begin{codeshow} 405 | \begin{align} 406 | a^2&= a\cdot a& b&=c\nonumber\\ 407 | g &= a*a & d&>e>f \nonumber\\ 408 | step&= a^2 & &Z^3 409 | \end{align} 410 | \end{codeshow} 411 | 412 | 如果你想让编号显示在这三行的中间而不是最下面一行,可以尝试把公式写在\envi{aligned}或者\envi{gathered}环境中,然后再嵌套到\envi{equation}环境内: 413 | 414 | \begin{codeshow} 415 | \begin{equation} 416 | \begin{aligned} 417 | a^2 &= a\cdot a \\ 418 | &= a*a \\ 419 | &= a^2 420 | \end{aligned} 421 | \end{equation} 422 | \end{codeshow} 423 | 424 | 如果你根本不想给多行公式编号,尝试\envi{align*}环境。 425 | 426 | 另外,\pkg{amsmath}宏包的\envi{multline}环境将自动把编号放在末行。首行左对齐,末行右对齐,中间的行居中。 427 | \begin{codeshow} 428 | \begin{multline} 429 | a>b \\ 430 | b>c \\ 431 | \therefore a>c 432 | \end{multline} 433 | \end{codeshow} 434 | 435 | 如果想在环境中插入小段行间文字,使用\latexline{intertext}命令,或者\pkg{mathtools}宏包的\latexline{shortintertext}命令。区别是后者的垂直间距更小一些。 436 | 437 | \begin{codeshow} 438 | \begin{align*} 439 | \shortintertext{If} 440 | y &= 0 \\ 441 | x &< 0\\ 442 | \shortintertext{then} 443 | z &= x+y 444 | \end{align*} 445 | \end{codeshow} 446 | 447 | 当然,\envi{align}环境用于分列对齐的。如果仅想所有行居中,使用\pkg{amsmath}宏包的\envi{gather}环境即可。这是一个非常实用的环境,你也可以用\envi{gather*}环境排版居中的、非编号的多行公式。 448 | 449 | \begin{codeshow} 450 | \begin{gather} 451 | X=1+2+\cdots+n \\ 452 | Y=1 453 | \end{gather} 454 | \end{codeshow} 455 | 456 | \subsection{二项式} 457 | \label{subsec:binom} 458 | 二项式可能需要借助\pkg{amsmath}宏包的\latexline{binom}命令。它也有像分式一样的行间和行内两个命令\latexline{tbinom}与\latexline{dbinom}: 459 | 460 | \begin{codeshow} 461 | $\mathrm{C}_n^k=\binom{n}{k} 462 | \qquad a_n=\dbinom{n}{k}$ 463 | \end{codeshow} 464 | 465 | 你也可以通过该宏包支持的\latexline{genfrac}自定义类似二项式命令: 466 | \begin{latex} 467 | \genfrac{left-delim}{right-delim}{thickness}{mathstyle} 468 | {numerator}{denominator} 469 | % thickness为分式线线宽,留空空表示默认 470 | % mathstyle从0-3由\displaystyle减至\scriptscriptstyle 471 | \newcommand{\Bfrac}[2]{\genfrac{[}{]}{0pt}{}{#1}{#2}} 472 | \end{latex} 473 | 474 | 你可以借此得到新的命令\latexline{Bfrac}: 475 | \begin{codeshow} 476 | \[\text{We define } \Bfrac{n}{k} = \binom{k}{n}\] 477 | \end{codeshow} 478 | 479 | \subsection{定理} 480 | 在使用下述定理内容时,请加载\pkg{amsthm}宏包。 481 | 482 | 首先是定理环境格式的自定义。如同定义命令一样,在导言区加上: 483 | \begin{latex} 484 | \newtheorem{envname}[counter]{text}[section] 485 | \end{latex} 486 | 487 | 其中\textit{name}表示定理的引用名称,即下文将其作为一个环境名来识别;\textit{text}表示定理的显示名称,即下文中定理将以其作为打印内容。而\textit{counter}参数表示你是否与先前声明的某定理共同编号。\textit{section}参数表示定理的计数层级,如果是section,表示每节分别计数;chapter表示每章分别计数。 488 | 489 | 来看一个例子。首先在导言区定义如下三个样式: 490 | \begin{latex} 491 | \theoremstyle{definition}\newtheorem{laws}{Law}[section] 492 | \theoremstyle{plain}\newtheorem{ju}[laws]{Jury} 493 | \theoremstyle{remark}\newtheorem*{marg}{Margaret} 494 | \end{latex} 495 | 496 | 以上三个\latexline{theoremstyle}即是它预定义的所有样式类型。definition标题粗体,内容罗马体;plain标题粗体,内容斜体;remark标题斜体,内容罗马体。带星号表示不进行计数。在环境的使用中可以添加可选参数,用于以括号的形式注释定理。然后这是示例: 497 | 498 | \begin{codeshow} 499 | \begin{laws} 500 | Never believe easily. 501 | \end{laws} 502 | \begin{ju}[The 2nd] 503 | Never suspect too much. 504 | \end{ju} 505 | \begin{marg} 506 | Nothing else. 507 | \end{marg} 508 | \end{codeshow} 509 | 510 | \pkg{amsthm}宏包还提供了\envi{proof}环境,并且用\latexline{qedhere}来指定证毕符号的位置。如果不加指定,将会自动另起一行。 511 | 512 | \begin{codeshow} 513 | \begin{proof} 514 | For an right triangle, we have: 515 | \[a^2+b^2=c^2 \qedhere\] 516 | \end{proof} 517 | \end{codeshow} 518 | 519 | \section{数学符号与字体} 520 | \subsection{数学字体} 521 | 原生的数学字体命令: 522 | \begin{center} 523 | \begin{minipage}{\linewidth} 524 | \centering 525 | \tabcaption{原生数学字体表} 526 | \label{tab:mathfont} 527 | \begin{tabular}{>{\ttfamily\char92}l>{$}l<{$}} 528 | \hline 529 | mathrm\{ABCDabcde 1234\} & \mathrm{ABCDabcde 1234} \\ 530 | \hline 531 | mathit\{ABCDabcde 1234\} & \mathit{ABCDabcde 123} \\ 532 | \hline 533 | mathnormal\{ABCDabcde 1234\} & \mathnormal{ABCDabcde 1234} \\ 534 | \hline 535 | mathcal\{ABCDabcde 1234\} & \mathcal{ABCDabcde 1234} \\ 536 | \hline 537 | \end{tabular} 538 | \end{minipage} 539 | \end{center} 540 | 541 | 需要其他宏包支持的数学字体: 542 | \begin{center} 543 | \begin{minipage}{\linewidth} 544 | \centering 545 | \tabcaption{宏包数学字体表} 546 | \label{tab:mathfont-pk} 547 | \begin{tabular}{>{\ttfamily}ll} 548 | \hline 549 | \char92mathscr\{ABCDabcde 1234\} & mathrsfs\\ 550 | $\mathscr{ABCDabcde 1234}$ & \\ 551 | \hline 552 | \char92mathfrak\{ABCDabcde 1234\} & amsfonts或者amssymb\\ 553 | $\mathfrak{ABCDabcde 1234}$ & \\ 554 | \hline 555 | \char92mathbb\{ABCDabcde 1234\} & amsfonts或者amssymb\\ 556 | $\mathbb{ABCDabcde 1234}$ & \\ 557 | \hline 558 | \end{tabular} 559 | \end{minipage} 560 | \end{center} 561 | 562 | \subsection{定界符} 563 | \label{subsec:delimiter} 564 | \tref{tab:delimiter}给出了一些数学环境中使用的定界符。 565 | 566 | \begin{table}[!htb] 567 | \centering 568 | \caption{定界符} 569 | \label{tab:delimiter} 570 | \begin{tabular}{@{}*{3}{>{$}p{2em}<{$} @{} >{\ttfamily}p{7em}}} 571 | ( & ( & [ & [ or \char92 lbrack & \uparrow & \char92 uparrow \\ 572 | ) & ) & ] & ] or \char92 rbrack & \downarrow & \char92 downarrow \\ 573 | \{ & \{ or \char92 lbrace & \} & \} or \char92 rbrace & \updownarrow & \char92 updownarrow \\ 574 | \langle & \char92 langle & \rangle & \char92 rangle & \backslash & \char92 backslash \\ 575 | \lfloor & \char92 lfloor & \rfloor & \char92 rfloor & \Updownarrow & \char92 Updownarrow \\ 576 | \lceil & \char92 lceil & \rceil & \char92 rceil & \Uparrow & \char92 Uparrow \\ 577 | \Vert & \char92 | or \char92 Vert & | & | or \char92 vert & \Downarrow & \char92 Downarrow \\ 578 | \hline 579 | \multicolumn{6}{c}{-- 以下需要amssymb宏包 --} \\ 580 | \multicolumn{3}{c}{$\ulcorner$ \quad \texttt{\char92 ulcorner}} & \multicolumn{3}{c}{$\urcorner$ \quad \texttt{\char92 urcorner}} \\ 581 | \multicolumn{3}{c}{$\llcorner$ \quad \texttt{\char92 llcorner}} & \multicolumn{3}{c}{$\lrcorner$ \quad \texttt{\char92 lrcorner}} 582 | \end{tabular} 583 | \end{table} 584 | 585 | 使用\latexline{left}, \latexline{right}还有\latexline{middle}能够使定界符自适应式子的高度: 586 | \begin{codeshow} 587 | \[P\left(X \middle\vert Y=0\right) 588 | =\left.\int_0^1 p(t)\ud t\middle/ N\right.\] 589 | \end{codeshow} 590 | 591 | 如果希望手动指定定界符的尺寸,这时使用后: 592 | \begin{codeshow} 593 | % 加l, r, m对应上述三种自适应命令 594 | $(\big(\Big(\bigg(\Bigg<\qquad 595 | \bigl[\frac{x+y}{x^2}\bigr]$ 596 | \end{codeshow} 597 | 598 | 有时\latexline{left.}和\latexline{right.}能灵活地用于跨行控制,因为它们并非实际配对: 599 | \begin{codeshow} 600 | \begin{align*} 601 | x &=\left(\frac{1}{2}x\right.\\ 602 | &\left.\vphantom{\frac{1}{2}} 603 | +y^2+z_1\right) 604 | \end{align*} 605 | \end{codeshow} 606 | 607 | 其中\latexline{vphantom}命令用于输出一个高度虚位,使得第二行的自适应定界符与第一行同等大小。特别地,命令\latexline{mathstrut}表示一个有圆括号总高的虚位: 608 | \begin{codeshow} 609 | $\sqrt{b}\sqrt{y}\qquad 610 | \sqrt{\mathstrut b}\sqrt{\mathstrut y}$ 611 | \end{codeshow} 612 | 613 | \subsection{希腊字母} 614 | 希腊字母表如\tref{tab:greekletter}所示。表中包含了小写希腊字母、大写希腊字母,其中部分希腊字母的输入方式与英文字母一致。 615 | \begin{table}[!htb] 616 | \centering 617 | \caption{希腊字母表} 618 | \label{tab:greekletter} 619 | \renewcommand\arraystretch{1} 620 | \begin{tabular}{*{4}{>{$}c<{$}!{}>{\ttfamily\char`\\}p{6em} @{}}} 621 | \alpha & alpha & \theta & theta & o & \multicolumn{1}{p{6em}}{o} & \upsilon & upsilon \\ 622 | \beta & beta & \vartheta & vartheta & \pi & pi & \phi & phi \\ 623 | \gamma & gamma & \iota & iota & \varpi & varpi & \varphi & varphi \\ 624 | \delta & delta & \kappa & kappa & \rho & rho & \chi & chi \\ 625 | \epsilon & epsilon & \lambda & lambda & \varrho & varrho & \psi & psi \\ 626 | \varepsilon & varepsilon & \mu & mu & \sigma & sigma & \omega & omega \\ 627 | \zeta & zeta & \nu & nu & \varsigma & varsigma & \eta & eta \\ 628 | \xi & xi & \tau & tau & \multicolumn{4}{c}{} \\ 629 | A & \multicolumn{1}{p{6em}}{A} & B & \multicolumn{1}{p{6em}}{B} & \Gamma & Gamma & \varGamma & varGamma \\ 630 | \Delta & Delta & \varDelta & varDelta & E & \multicolumn{1}{p{6em}}{E} & Z & \multicolumn{1}{p{6em}}{Z} \\ 631 | H & \multicolumn{1}{p{6em}}{H} & \Theta & Theta & \varTheta & varTheta & I & \multicolumn{1}{p{6em}}{I} \\ 632 | \Lambda & Lambda & \varLambda & varLambda & M & \multicolumn{1}{p{6em}}{M} & N & \multicolumn{1}{p{6em}}{N} \\ 633 | \Xi & Xi & \varXi & varXi & O & \multicolumn{1}{p{6em}}{O} & \Pi & Pi \\ 634 | \varPi & varPi & P & \multicolumn{1}{p{6em}}{P} & \Sigma & Sigma & \varSigma & varSigma \\ 635 | T & \multicolumn{1}{p{6em}}{T} & \Upsilon & Upsilon & \varUpsilon & varUpsilon & \Phi & Phi \\ 636 | \varPhi & varPhi & X & \multicolumn{1}{p{6em}}{X} & \Psi & Psi & \varPsi & varPsi \\ 637 | \Omega & Omega & \varOmega & varOmega & \multicolumn{4}{c}{} 638 | \end{tabular} 639 | \end{table} 640 | 641 | \subsection{二元运算符} 642 | 二元运算符包括常见的加减乘除,还有集合的交、并、补等运算。\tref{tab:operator}只列出常用的二元运算符,更多的请参考symbols-a4文档。 643 | \begin{table}[!htb] 644 | \centering 645 | \caption{二元运算符:\latexline{mathbin}} 646 | \label{tab:operator} 647 | \renewcommand\arraystretch{1} 648 | \begin{tabular}{@{}*{2}{>{$}c<{$}!{} >{\ttfamily\char92}p{5em} @{}}*{2}{>{$}p{2em}<{$} @{} >{\ttfamily\char92}p{6em} @{}}} 649 | + & \multicolumn{1}{p{6em}}{+} & - & \multicolumn{1}{p{6em}}{-} & \times & times & \div & div \\ 650 | \pm & pm & \mp & mp & \circ & circ & \triangleright & triangleright \\ 651 | \cdot & cdot & \star & star & \ast & ast & \triangleleft & triangleleft \\ 652 | \cup & cup & \cap & cap & \setminus & setminus & \bullet & bullet \\ 653 | \oplus & oplus &\ominus & ominus & \otimes & otimes & \oslash & oslash \\ 654 | \odot & odot & \bigcirc & bigcirc & \vee & vee,lor & \wedge & wedge,land \\ 655 | \bigcup & bigcup & \bigcap & bigcap & \bigvee & bigvee & \bigwedge & bigwedge 656 | \end{tabular} 657 | \end{table} 658 | 659 | \subsection{二元关系符} 660 | 二元关系符常常被用于判断两个数的大小关系,或者集合中的从属关系。\tref{tab:relation-operator}和\tref{tab:amsrelation-operator}只列出常用的二元关系符,更多的请参考symbols-a4文档。 661 | \begin{table}[!htb] 662 | \centering 663 | \caption{二元关系符:\latexline{mathrel}} 664 | \label{tab:relation-operator} 665 | \renewcommand\arraystretch{1} 666 | \begin{tabular}{@{}*{4}{>{$}c<{$}!{} >{\ttfamily\char92}p{6em} @{}}} 667 | < & \multicolumn{1}{p{6em}}{<} & > & \multicolumn{1}{p{6em}}{>} & \le & le(q) & \ge & ge(q) \\ 668 | \ll & ll & \gg & gg & \equiv & equiv & \neq & neq \\ 669 | \prec & prec & \succ & succ & \preceq & preceq & \succeq & succeq \\ 670 | \sim & sim & \simeq & simeq & \cong & cong & \approx & approx \\ 671 | \subset & subset & \supset & supset & \subseteq & subseteq & \supseteq & supseteq \\ 672 | \in & in & \ni & ni & \notin & notin & \propto & propto \\ 673 | \parallel & parallel & \perp & perp & \smile & smile & \frown & frown \\ 674 | \asymp & asymp & \bowtie & bowtie & \vdash & vdash & \dashv & dashv 675 | \end{tabular} 676 | \end{table} 677 | 678 | \tref{tab:amsrelation-operator}中的二元关系符需要\pkg{amssymb}宏包。 679 | \begin{table}[!htb] 680 | \centering 681 | \caption{amssymb二元关系符} 682 | \label{tab:amsrelation-operator} 683 | \renewcommand\arraystretch{1} 684 | \begin{tabular}{@{}*{4}{>{$}c<{$}!{} >{\ttfamily\char92}p{6em} @{}}} 685 | \leqslant & leqslant & \geqslant & geqslant & \because & because & \therefore & therefore \\ 686 | \nless & nless & \ngtr & ngtr & \lessdot & lessdot & \gtrdot & gtrdot \\ 687 | \lessgtr & lessgtr & \gtrless & gtrless & \lesseqqgtr & lesseqqgtr & \gtreqqless & gtreqqless \\ 688 | \subseteqq & subseteqq & \supseteqq & supseteqq & \subsetneqq & subsetneqq & \supsetneqq & supsetneqq 689 | \end{tabular} 690 | \end{table} 691 | 692 | \subsection{箭头与长等号} 693 | 在\tref{tab:delimiter}中给出了几个箭头符号,但是不够全,这里给出总表如\tref{tab:arrow}。 694 | \begin{table}[!htb] 695 | \centering 696 | \caption{箭头} 697 | \label{tab:arrow} 698 | \renewcommand\arraystretch{1} 699 | \begin{tabular}{@{}*{2}{>{$}c<{$}!{} >{\ttfamily\char92}p{10em} @{}}} 700 | \leftarrow & leftarrow & \longleftarrow & longleftarrow \\ 701 | \rightarrow & rightarrow & \longrightarrow & longrightarrow \\ 702 | \leftrightarrow & leftrightarrow & \longleftrightarrow & longleftrightarrow \\ 703 | \Leftarrow & Leftarrow & \Longleftarrow & Longleftarrow \\ 704 | \Rightarrow & Rightarrow & \Longrightarrow & Longrightarrow \\ 705 | \Leftrightarrow & Leftrightarrow & \Longleftrightarrow & Longleftrightarrow \\ 706 | \mapsto & mapsto & \longmapsto & longmapsto \\ 707 | \nearrow & nearrow & \searrow & searrow \\ 708 | \swarrow & swarrow & \nwarrow & nwarrow \\ 709 | \leftharpoonup & leftharpoonup & \rightharpoonup & rightharpoonup \\ 710 | \leftharpoondown & leftharpoondown & \rightharpoondown & rightharpoondown \\ 711 | \rightleftharpoons & rightleftharpoons & \iff & iff (bigger space) 712 | \end{tabular} 713 | \end{table} 714 | 715 | \LaTeX\ 定义了逻辑命令\latexline{iff}, \latexline{implies}, \latexline{impliedby},与箭头符大小相同但是两侧间距更大: 716 | \begin{codeshow} 717 | $x=y \implies a=b$\\ 718 | $x=y \impliedby a=b$\\ 719 | $x=y \iff a=b$ 720 | \end{codeshow} 721 | 722 | 依旧另外给出一个基于\pkg{amssymb}宏包的附\tref{tab:amsarrow}。 723 | \begin{table}[!htb] 724 | \centering 725 | \caption{amssymb箭头} 726 | \label{tab:amsarrow} 727 | \renewcommand\arraystretch{1} 728 | \begin{tabular}{@{}*{2}{>{$}c<{$}!{} >{\ttfamily\char92}p{10em} @{}}} 729 | \dashleftarrow & dashleftarrow & \dashrightarrow & dashrightarrow \\ 730 | \circlearrowleft & circlearrowleft & \circlearrowright & circlearrowright \\ 731 | \leftrightarrows & leftrightarrows & \rightleftarrows & leftrightarrows \\ 732 | \nleftarrow & nleftarrow & \nLeftarrow & nLeftarrow \\ 733 | \nrightarrow & nrightarrow & \nRightarrow & nRightarrow \\ 734 | \nleftrightarrow & nleftrightarrow & \nLeftrightarrow & nLeftrightarrow 735 | \end{tabular} 736 | \end{table} 737 | 738 | 最后,宏包\pkg{extarrows}给出了一些实用的长箭头与长等符号: 739 | 740 | \begin{codeshow} 741 | $\xlongequal{\Delta}$\quad 742 | $\xLeftrightarrow{\Delta}$\\ 743 | $\xleftrightarrow{x=\tan t}$\\ 744 | $\xLongleftarrow{x} \xLongrightarrow{y}$ 745 | \end{codeshow} 746 | 747 | \subsection{其他符号} 748 | 注意冒号如果从键盘输入,会识别为关系符,例如$:=$。在表示比例时也可以借用,或者外加\latexline{mathbin}命令$a\mathbin{:}b$。数学中可能用到的冒号,请使用\latexline{colon}命令,像$x\colon y\to\infty$这样。 749 | 750 | 类似西文断词的\latexline{-}命令,在数学环境中使用\latexline{*}命令可以提醒\LaTeX\ 断词。\LaTeX\ 如果在此处断词,会自动补一个$\times$叉乘号。你也可以自定义来让\LaTeX\ 补点乘号: 751 | \begin{latex} 752 | \renewcommand{\*}{\discretionary{\,\mbox{$\cdot$}}{}{}} 753 | \end{latex} 754 | 755 | 最后是一些其他的难以归类的符号,也不全是数学领域会用到的,只不过它们可以在数学环境下输出出来,以及被\pkg{amssymb}宏包所支持。如\tref{tab:othersym}和\tref{tab:amsothersym}。 756 | \begin{table}[!htb] 757 | \centering 758 | \caption{其他符号} 759 | \label{tab:othersym} 760 | \renewcommand\arraystretch{1} 761 | \begin{tabular}{@{}*{4}{>{$}c<{$}!{} >{\ttfamily\char92}p{5.5em} @{}}} 762 | \dots & dots & \cdots &cdots & 763 | \vdots & vdots & \ddots & ddots \\ 764 | \forall & forall & \exists & exists & 765 | \Re & Re & \aleph & aleph \\ 766 | \angle & angle & \infty & infty & 767 | \triangle & triangle & \nabla & nabla \\ 768 | \hbar & hbar & \imath & imath & 769 | \jmath & jmath & \ell & ell \\ 770 | \spadesuit & spadesuit & \heartsuit & heartsuit & 771 | \clubsuit & clubsuit & \diamondsuit & diamondsuit \\ 772 | \flat & flat & \natural & natural & 773 | \sharp & sharp & \multicolumn{2}{l}{} \\ 774 | \hline 775 | \multicolumn{8}{l}{非数学符号:} \\ 776 | \multicolumn{1}{p{2em}}{\pounds} & pounds & \multicolumn{1}{p{2em}}{\S} & S & 777 | \multicolumn{1}{p{2em}}{\copyright} & copyright & \multicolumn{1}{p{2em}}{\P} & P \\ 778 | \multicolumn{1}{p{2em}}{\dag} & dag & \multicolumn{1}{p{2em}}{\ddag} & ddag & 779 | \multicolumn{1}{p{2em}}{\textregistered} & \multicolumn{3}{l}{\ttfamily \char`\\ textregistered} 780 | \end{tabular} 781 | \end{table} 782 | 783 | \begin{table}[!htb] 784 | \centering 785 | \caption{amssymb其他符号} 786 | \label{tab:amsothersym} 787 | \renewcommand\arraystretch{1} 788 | \begin{tabular}{@{} >{$}c<{$}!{} >{\ttfamily\char92}p{6em} @{}*{2}{>{$}p{2em}<{$} @{} >{\ttfamily\char92}p{8em} @{}}} 789 | \square & square & \blacksquare & blacksquare & \hslash & hslash \\ 790 | \bigstar & bigstar & \blacktriangle & blacktriangle & \blacktriangledown & blacktriangledown \\ 791 | \lozenge & lozenge & \blacklozenge & blacklozenge & \measuredangle & measuredangle \\ 792 | \mho & mho & \varnothing & varnothing & \eth & eth 793 | \end{tabular} 794 | \end{table} 795 | -------------------------------------------------------------------------------- /LaTeX-cn/chapters/TikZ.tex: -------------------------------------------------------------------------------- 1 | %!TEX root = ../LaTeX-cn.tex 2 | \chapter{\tikzz\ 绘图*(编写中,更新于\today)} 3 | 本章节极大地参考了 \tikzz\ 宏包手册\cite{tikzmanual}。 4 | \section{\tikzz\ 简介} 5 | ``\tikzz \& PGF''(大多直接称为\tikzz)是 \LaTeX\ 上与 PSTricks(PostScript Tricks) 齐名的绘图扩展,而这两者基本上是在你的 \LaTeX\ 文档中绘制矢量图的唯二选择。Till Tantau\footnote{Till Tantau(1975---),德国吕贝克大学理论计算机科学研究处教授。他同时也是 \LaTeX\ 大名鼎鼎的幻灯片制作宏包 \pkg{beamer} 的开发者。} 开发了 \tikzz。 6 | 7 | 其中,``PGF'' 是 ``Portable Graphic Format''(便携图像格式)的缩写,是整个绘图系统的底层(或者后端);而 ``\tikzz'' 是 ``TikZ ist \emph{kein} 8 | Zeichenprogramm'' 的缩写,即英文的 ``TikZ is not a drawing program''(“\tikzz\ 不是绘图软件”),则是系统的前端。Till 是仿造 GNU 的缩写 ``GNU is Not Unix'' 这种递归式格式命名 \tikzz\ 的,他在文档中也提及了这一点。 9 | 10 | 从 \tikzz\ 发布稳定版以来,它的功能可以说涵盖了文档绘图的绝大部分\textbf{科学绘图场景}(我强调这一点,是因为我相信用它画艺术设计图的效率会很低)——对于研究工作者或者学生,这再好不过了。举个例子:笔者在大学期间的计算机和统计课程的所有出图都是由 \tikzz\ 绘制的。 11 | 12 | \tikzz\ 的官方文档,使用\texttt{texdoc tikz}命令调出。看的出来,Till 努力将文档写的生动有趣。如果不是篇幅实在有些长,相信你读起来会很愉快。 13 | 14 | \subsection{选择 \tikzz\ 还是 PSTricks} 15 | 关于这两者应该学哪一个,大家甚至展开圣战;虽然没有计算机行业 Vim 和 Emacs 圣战那么夸张,但是着实给不少想要学习 \LaTeX\ 绘图的人带来困扰\footnote{笔者就颇受困扰,所以都尝试过。当年还有人把 Asymptote 也扯进这场圣战,但笔者认为它的竞争力没有那么强。}。 16 | 17 | 笔者最后选择了 \tikzz\ 。为什么?相比 PSTricks,语法顺畅,可读性更高。易读易写,十分难得。至于谁的绘图能力更强,我认为他们都已经涵盖了你正常需要的范畴。所以,如果你仍然不确定的话,就去搜索一些他们各自的例子片段再决定吧。 18 | 19 | \subsection{选择 \tikzz\ 还是外部绘图软件} 20 | 为什么选择 \tikzz\ 而不是用外部绘图软件呢?一些理由: 21 | \begin{itemize} 22 | \item \textbf{绘制矢量图}。外部绘图为 pdf 矢量图再用加载图片的方式加载进来当然可以;但是很多情况下,切换软件的时间成本与切换到另一个软件的操作模式的思考成本是很高的。 23 | \item \textbf{更小的体积}。相比加载外部绘图,体积会小一些;虽然不是特别明显。 24 | \item \textbf{更易维护}。外部绘制的图片需要你通过安装相应的绘图软件进行维护;但是使用 \tikzz\ 绘图,你只需要一台装有 \LaTeX\ 核心和 \tikzz\ 宏包的设备。 25 | 26 | 千万别小看这一点;很多时候你需要在别人的电脑上更改你的插图。比如学术圈子里,电脑上安装有 \TeX\ Live 是一件稀松平常的事情;但是安装有 GNUplot 绘图,矢量图编辑器?那可不一定。 27 | \item \textbf{完全的文本文件}。如果你使用 git 之类的版本控制工具,你应该会明白这一条是什么意思。不管你是将 \tikzz\ 代码写在主 tex 文档中,还是另存到一份单独的 tex 文档,它们都是文本文件。如果用加载外部 pdf 的方式导入图片,那想对它们进行版本控制简直是一场灾难。 28 | \end{itemize} 29 | 30 | \section{\tikzz\ 的输入输出} 31 | \subsection{基本绘图方式} 32 | \tikzz\ 的基本绘图方式有两种:使用 \latexline{tikz} 命令,或者使用 \envi{tikzpicture} 环境。请注意,\RED{语句用分号结尾}。当然,你需要先加载 \pkg{tikz} 宏包,有时你还需要加载一些 \tikzz\ 的库: 33 | \begin{latex} 34 | \usepackage{tikz} 35 | % 加载库:\usetikzlibrary{lib1, lib2, ...} 36 | \end{latex} 37 | 38 | 两个例子: 39 | \begin{codeshow} 40 | % 使用 \tikz 命令 41 | \tikz{\draw (0,1) -- (1,0)} 42 | % 使用 tikzpicture 环境 43 | \begin{tikzpicture} 44 | \draw (0,0) -- (1,1); 45 | \end{tikzpicture} 46 | \end{codeshow} 47 | 48 | 如果你使用 \TeX\ 而非 \LaTeX\ ,那么请在 \latexline{tikzpicture} 和 \latexline{endtikzpicture} 之中使用 \tikzz\ 代码。 49 | 50 | \subsection{输出图像到独立文件} 51 | 要输出为\texttt{.svg}矢量文件,用于更多的插图场合。需要在电脑安装pdf2svg\footnote{\url{http://www.cityinthesky.co.uk/opensource/pdf2svg/}}。不过在\LaTeX 使用的场合,可以去掉下述的\texttt{convert}参数,以输出\texttt{.pdf}格式的矢量文件。下例中的\texttt{multi=false}表示只输出为单页文件。 52 | 53 | \begin{latex} 54 | \documentclass[tikz,convert=pdf2svg,multi=false]{standalone} 55 | % tikz package already loaded by 'tikz' option 56 | \begin{document} 57 | \begin{tikzpicture} 58 | \draw (0,0) -- (10,10); 59 | \draw (10,0) -- (0,10); 60 | \end{tikzpicture} 61 | \end{document} 62 | \end{latex} 63 | 64 | 在编译时如果是\xelatex ,还需要添加参数: 65 | \begin{latex} 66 | % 如果上例的文件名为 example.tex 67 | xelatex -shell-escape example.tex 68 | \end{latex} 69 | 70 | \section{基础几何元素} 71 | 本节介绍 \tikzz\ 的基础几何元素,希望能够帮助读者较系统地进行学习。如果读者希望通过例子入手,请参考\secref{sec:tikz-eg}。 72 | 73 | \subsection{点与线段} 74 | 点和线是绘图的基本要素。\tikzz\ 通过坐标的方式指定点的位置,坐标书写在一对圆括号内;通过两个短横线“--”来连接点与点,形成线段。下例连续画了两段。\RED{为了简洁,下文展示代码时省略 tikzpicture 环境首尾}。 75 | \begin{tikzshow} 76 | \draw (0,0) -- (1,0) -- (2,0.5); 77 | \end{tikzshow} 78 | 79 | 默认的单位长度是 1 cm。如果想要修改比例尺,或者调整线型、颜色等属性参数,请参考\secref{sec:tikz-property}。极坐标参考\secref{subsec:coord}。 80 | 81 | \subsection{路径} 82 | 命令 \latexline{path} 可以只创建路径但不绘制;实质上,\latexline{draw} 命令就是 \latexline{path[draw]} 的简写形式。\latexline{fill} 命令也类似。 83 | 84 | \subsection{\bz\ 曲线} 85 | \tikzz\ 允许你使用 \tikzkw{.. controls and ..} 方式来指定\bz\ 曲线的两个控制点。第二控制点可以省略;省略时,设为与第一控制点相同。 86 | \begin{tikzshow} 87 | \draw (0,0) .. controls (0.5,1) and (1.5,1) .. (2,0); 88 | \end{tikzshow} 89 | 90 | 控制点并不会显式地画在图中。为了帮助不熟悉 \bz\ 曲线的读者理解,在此绘制一些辅助说明的点和线: 91 | \begin{tikzshow} 92 | \draw (0,0) .. controls (0.5,1) and (1.5,1) .. (2,0); 93 | % Auxilary Points & Lines 94 | \filldraw[black] (0,0) circle [radius=2pt] (0.5,1) circle [radius=2pt] (1.5,1) circle [radius=2pt] (2,0) circle [radius=2pt]; 95 | \draw[dashed] (0,0) -- (0.5,1); 96 | \draw[dashed] (1.5,1) -- (2,0); 97 | \end{tikzshow} 98 | 99 | \subsection{矩形} 100 | 指定矩形的西南角点和东北角点,用 \tikzkw{rectangle} 命令连接: 101 | \begin{tikzshow} 102 | \draw (0,0) rectangle (2,1); 103 | \end{tikzshow} 104 | 105 | \subsection{圆与椭圆} 106 | 指定圆或者椭圆的中心,然后指明它半径的参数\footnote{\texttt{circle (1cm)} 的写法较陈旧,不建议再使用。椭圆绘制也请使用 \tikzkw{circle},而不是陈旧的 \tikzkw{ellipse}。}: 107 | \begin{tikzshow} 108 | \draw (0,0) circle [x radius=12pt, y radius=6pt]; 109 | \draw (2,0) circle [radius=0.5cm]; 110 | \end{tikzshow} 111 | 112 | \subsection{圆弧与椭圆弧} 113 | 指定圆弧的起点,在选项中给出起始角度、终止角度和半径,即可画弧: 114 | \begin{tikzshow} 115 | \draw (2,0) arc [start angle=0, end angle=45, radius=2]; 116 | \draw (1,0) arc [start angle=0, end angle=270, x radius=1, y radius=.5]; 117 | \end{tikzshow} 118 | 你也可以不指定 \tikzkw{end angle} 而使用圆弧对应的圆心角 \tikzkw{delta angle}。 在绘制弧时使用极坐标,请参考\secref{subsec:coord}。 119 | 120 | \subsection{网格} 121 | 网格即为自动绘制的等距线: 122 | \begin{tikzshow} 123 | \draw[step=0.5,lightgray,thin] (0,0) grid (2,2); 124 | \draw (1,1) circle [radius=.5]; 125 | \end{tikzshow} 126 | 默认的 \tikzkw{step} 是 1。 \tikzkw{xstep} 和 \tikzkw{ystep} 命令可分别指定沿两个轴向的间距。 127 | 128 | \subsection{抛物线*} 129 | 抛物线使用 \tikzkw{parabola} 绘制,并可使用 \tikzkw{bend} 指定拐点位置: 130 | \begin{tikzshow} 131 | \draw[help lines, xstep=1, ystep=2] (0,0) grid (3,4); 132 | \draw (0,2) parabola[bend at end] (1,0); 133 | \draw[xshift=1cm] (0,1) parabola (1,2); 134 | \draw[xshift=2cm] (0,0) parabola bend (0.5,2) (1,0); 135 | \draw[yshift=2cm] (0,0) parabola[bend pos=0.75] bend +(0,1) (1,0); 136 | \draw[xshift=1cm, yshift=2cm] (0,0) -- (1,2) parabola cycle; 137 | \draw[xshift=2cm, yshift=2cm] (0,0) parabola[parabola height=2cm] +(1,0); 138 | \end{tikzshow} 139 | 其中 \tikzkw{xshift/yshift} 参考 \secref{subsubsec:shift}。抛物线的参数解释如下: 140 | \begin{para} 141 | \item[bend at end] 或者 \tikzkw{bend at start},这样抛物线是正常情况的一半。 142 | \item[bend] 指定在何处设置拐点。 143 | \item[bend pos=L] 在起点、终点连线的 L 分点处为基准设置拐点,比如上例为四分之三分点向上偏移 1 单位。 144 | \item[cycle] 使用 \tikzkw{cycle} 结尾,自动直线连接首尾,形成闭合路径。 145 | \item[parabola height=H] 在起终点连线的二分之一分点处向上偏移 H 处设置拐点。 146 | \end{para} 147 | 148 | \subsection{正弦线与余弦线*} 149 | 使用 \tikzkw{sin} 和 \tikzkw{cos} 绘制。 150 | 151 | \section{坐标与图像} 152 | \subsection{引言:画笔位置} 153 | \tikzz\ 中一个很重要的概念是画笔,在一个常规的 \latexline{draw} 命令中,想象使用画笔从头到尾依次连接各个点。每次检测到“--”这条绘制命令,\tikzz\ 都将移动画笔位置并画线。 154 | 155 | \tikzz\ 提供了一种方法,可以在移动画笔的同时不划线。这个命令就是 \tikzkw{++}: 156 | \begin{tikzshow} 157 | \draw (0,0) -- (1,0) ++(0,1) circle [radius=.25] -- ++(-1,0) -- (0,0); 158 | \end{tikzshow} 159 | 160 | \tikzz\ 还提供了一个命令 \tikzkw{+},可以\textbf{临时}偏移画笔: 161 | \begin{tikzshow} 162 | \draw (0,0) -- (1,0) -- +(0,1) circle [radius=.25] -- +(-1,1) -- +(-1,0); 163 | \end{tikzshow} 164 | 165 | 请仔细体会两个命令的不同之处:单加号用于\uline{指代相对坐标},而相对坐标的基准点不会改变,直到指定新的绝对坐标 ;双加号用于\uline{移动画笔},基准点的位置会随之改变。 166 | 167 | \subsection{指定坐标} 168 | \label{subsec:coord} 169 | 本节介绍了如何指定坐标,包括直角坐标、极坐标,以及如何指定一个相对于已知点的坐标。其他坐标系也会在此介绍。 170 | 171 | \subsubsection{直角坐标与极坐标} 172 | 通常会使用直角坐标系(coordinate system)来标定坐标位置,正如上一节所示。直角坐标的格式是 \texttt{(x,y)},其中 $x$ 轴正向指向纸面右方,$y$ 轴正向指向纸面上方;而极坐标的格式是 \texttt{(角度:\mbox{}距离)}。 173 | 174 | 实质上,上述坐标的是隐式指定的;如果要显式指定,格式如下例的第二行: 175 | \begin{tikzshow} 176 | \draw[red] (0,0) circle [radius=0.5] -- (30:1cm); 177 | \draw (canvas cs: x=0, y=0) -- (canvas polar cs: radius=1cm, angle=60); 178 | \end{tikzshow} 179 | 180 | \subsubsection{相对已知点的坐标} 181 | 大致有这么几种方法: 182 | \begin{feai} 183 | \item 使用上一节中的单加号或双加号指令来指定相对位置; 184 | \item 使用平移参数 \tikzkw{shift} (参考\secref{subsubsec:shift}内容); 185 | \item 使用扭转参数 \tikzkw{turn},它基于进入当前点的切线方向,这在绘制折线时很有用; 186 | \item 使用 \pkg{calc} 库支持的 \verb|($ ... $)| 指令进行计算。 187 | \end{feai} 188 | 189 | 一个综合上述方法的例子: 190 | \begin{tikzshow} 191 | \draw (0,0) circle[radius=1]; 192 | \draw (0,0) { [current point is local]-- ++(1,-1)} -- ++(0,-0.5); 193 | \draw[red] (0,0) 194 | -- ([shift=(90:.5cm)] 210:1cm) 195 | -- (210:1cm) -- cycle; 196 | \draw[blue] (0,0) -- (1,0) 197 | -- ($ (1,0) + (120:1cm) $) -- cycle; 198 | \draw[green] (0,0) -- (150:.5cm) -- ([turn]-45:.5cm) 199 | arc[start angle=105, delta angle=-135, radius=.5]; 200 | \end{tikzshow} 201 | 其中,选项 \tikzkw{current point is local} 表示当前花括号内的画笔移动不会影响到外部的画笔位置。 202 | 203 | \subsubsection{三维坐标系*} 204 | 通常 \tikzz\ 绘图只需要用到平面坐标,但它也支持三维坐标系。 205 | 206 | \tikzz\ 使用了名为 \texttt{xyz} 的坐标系统来支持三维坐标,因此调用是: 207 | \begin{tikzshow}[thick] 208 | \draw (0,0) -- (xyz cs: x=1); 209 | \draw[red] (0,0) -- (0,1,0); 210 | \draw[blue] (0,0) -- (0,0,1); 211 | \end{tikzshow} 212 | 213 | \subsubsection{重心坐标系*} 214 | 重心坐标系(barycentric coordinate system)指定一系列向量 $\overrightarrow{v_1}, \overrightarrow{v_2},\ldots,\overrightarrow{v_n}$,然后坐标为 $(p_1,p_2,\ldots,p_n)$ 的点的位置是它们的线性组合向量对应的位置: 215 | \[ \frac{p_1\overrightarrow{v_1}+p_2\overrightarrow{v_2}+\cdots+p_n\overrightarrow{v_n}}{p_1+p_2+\cdots+p_n} \] 216 | 217 | 一个例子(涉及的命令会在另外的章节介绍): 218 | \begin{tikzshow} 219 | \tikzset{small/.style={draw=none, circle, fill=#1!70, inner sep=1pt}} 220 | \coordinate[label=above:A] (A) at (90:1cm); 221 | \coordinate[label=below left:B] (B) at (210:1cm); 222 | \coordinate[label=below right:C] (C) at (-30:1cm); 223 | \draw (A) -- (B) -- (C) -- cycle; 224 | \node[small=red] at (barycentric cs:A=0,B=0.3,C=0.7) {}; 225 | \node[small=blue] at (barycentric cs:A=0.5,B=0.5,C=0.5) {}; 226 | \node[small=green] at (barycentric cs:A=0.5,B=0.5,C=0.1) {}; 227 | \end{tikzshow} 228 | 229 | \subsection{交点} 230 | \label{subsec:intersection} 231 | \tikzz\ 提供一种简洁的坐标交点控制,例如 \texttt{( -| )} 中,用短横表示过 \texttt{p1} 的水平线、用竖线表示过 \texttt{p2} 的竖直线,这两条线的交点就是该命令表示的点。类似还有命令 \tikzkw{|-} 。 232 | \begin{tikzshow} 233 | \draw (0,0) circle [radius=1cm] -- (30:1 |- 0,0) -- (30:1) -- cycle; 234 | \end{tikzshow} 235 | 236 | 利用 \tikzz\ 的 \pkg{intersections} 库,还可以寻找两条路径的交点: 237 | \begin{tikzshow} 238 | % \usetikzlibrary{intersections} 239 | \path[name path=line1] (0,0) -- (1,1); 240 | \path[name path=line2] (0,1) -- (1,0); 241 | \draw[name intersections={of=line1 and line2, by=A}] (0,0) -- (A) -- (1,0); 242 | \end{tikzshow} 243 | 244 | 有时路径会有多个交点,这时你可以依次用 \texttt{intersection-1, 2, \ldots} 来指定它们。或者,你可以使用 \tikzkw{name} 选项代替上例的 \tikzkw{by},然后使用你的自定义名称: 245 | \begin{tikzshow} 246 | \path[name path=line1] (-2,.25) -- (2,.25); 247 | \draw[name path=circle] (0,0) circle [radius=.5]; 248 | \draw[name intersections={of=circle and line1, name=A}] (1,0) -- (A-1); 249 | \draw (0,0) -- (A-2); 250 | \end{tikzshow} 251 | 252 | 用 \tikzkw{total} 可以存储交点个数到一个宏命令,而 \tikzkw{sort by} 可以指定以相交路径中的某一条来给交点排序\cite{tikzmanual}: 253 | \begin{tikzshow}[scale=0.7] 254 | \tikzset{small/.style={draw, circle, fill=#1!70, inner sep=2pt}} 255 | \foreach \pathname/\offset/\color in {la/0cm/black,lb/3cm/red} { 256 | \tikzset{yshift=\offset} 257 | \draw[->,name path=la] (2,4) -- (0,0); 258 | \draw[->,name path=lb] (1,.5) .. controls (0,1) and +(-2,-1) .. (1.5,2) 259 | .. controls +(2,1) .. (1,3); 260 | \path[name intersections={of=la and lb, sort by=\pathname, name=inter, total=\s}] \foreach \i in {1,2,...,\s} { 261 | (inter-\i) node[small=\color, 262 | label=below right:\i] {} 263 | }; 264 | } 265 | \end{tikzshow} 266 | 267 | \subsection{图像变换} 268 | \tikzz\ 的图像变换主要包括 4 种:平移、旋转、缩放与倾斜。 269 | 270 | 除了这 4 种变换以外,\tikzz\ 也允许你使用 \tikzkw{cm} 选项,通过输入变换矩阵来完成变换。传入 4 值 1 坐标 \texttt{cm=\{a,b,c,d,(p,q)\}},则点 \((x,y)\) 会被变换为 \((x',y')\): 271 | \[ 272 | \begin{pmatrix} x' \\ y' \end{pmatrix} = 273 | \begin{pmatrix} a & c\\ b & d \end{pmatrix} 274 | \begin{pmatrix} x \\ y \end{pmatrix} + \begin{pmatrix} p \\ q \end{pmatrix} 275 | \] 276 | 由于使用率极低,这里不再给出 \tikzkw{cm} 的例子;下面介绍 4 种主要变换。 277 | 278 | \subsubsection{平移(shift)} 279 | \label{subsubsec:shift} 280 | 在使用绘制命令时使用 \tikzkw{xshift}、\tikzkw{yshift} 或 \tikzkw{shift} 选项,可以平移路径。使用 \tikzkw{shift} 时,相对或绝对坐标都需写在花括号内。 281 | \begin{tikzshow} 282 | \draw (0,0) circle [radius=.5] -- (1,0); 283 | \draw[xshift=1cm] (0,0) circle [radius=.5]; 284 | \end{tikzshow} 285 | 286 | 特别指出,\RED{平移是可以在路径的中间操作的,它只影响其后的绘制命令}: 287 | \begin{tikzshow} 288 | \draw (0,0) circle [radius=.5] [xshift=1cm, ultra thick] -- (0,0) circle [radius=.5]; 289 | \draw (.5,0) [shift={+(.5,.5)},->] -- (0,0); 290 | \end{tikzshow} 291 | 上例使用了相对坐标,只把点 \((0,0)\) 变换成了点 \((1,.5)\)。 292 | 293 | 另外,上例中的 \tikzkw{ultra thick} 影响了整个路径而不只是其后的部分,这也是 \tikzz\ 参数的一般情况;也就是说,平移参数不同于一般参数。 294 | 295 | \subsubsection{旋转(rotate)} 296 | \tikzkw{rotate} 参数默认绕原点旋转。使用 \tikzkw{rotate around} 来指定旋转中心: 297 | \begin{tikzshow}[scale=1.5] 298 | \draw[lightgray] (0,0) rectangle (2,1) 299 | [rotate=15] (0,0) rectangle (2,1); 300 | \begin{scope}[ultra thick] 301 | \draw[blue] (.5,.5) rectangle (1.5,1); 302 | \draw[red] (.5,.5) [rotate around={45:(1,.5)}] rectangle (1.5,1); 303 | \draw[brown] (.5,.5) [rotate around={-60:+(.5,0)}] rectangle (1.5,1); 304 | \end{scope} 305 | \end{tikzshow} 306 | 注意上例中相对坐标的使用,两次指定的旋转中心是同一个点。 307 | 308 | 旋转命令还可以用于三维坐标系中,例如使用 \tikzkw{rotate around x=} 来使绘图对象绕着 \(x\) 轴旋转。 309 | 310 | \subsubsection{缩放(scale)} 311 | 使用 \tikzkw{xscale}、\tikzkw{yscale} 或 \tikzkw{scale} 选项,可以作为 \envi{tikzpicture} 环境的可选参数使用,也可以直接用在命令中: 312 | \begin{tikzshowenvi} 313 | \begin{tikzpicture}[scale=.5] 314 | \draw[very thick] (1,0) circle [radius=1]; 315 | \draw[scale=2] (0,0) circle [radius=1]; 316 | \end{tikzpicture} 317 | \end{tikzshowenvi} 318 | 第二行的缩放 \texttt{scale} 是正常图像的 \(0.5\times 2=1\) 倍。 319 | 320 | 使用负值来实现“翻转”效果,以及使用 \tikzkw{scale around} 来指定缩放中心: 321 | \begin{tikzshow}[very thick] 322 | \draw[thin] (0,0) circle [radius=1]; 323 | \draw[xscale=-1] (0,0) rectangle (1,1); 324 | \draw[red, xscale=-1] (0,0) rectangle (1,1); 325 | \draw[blue, scale around={1.5:(1,1)}] (0,0) rectangle (1,1); 326 | \end{tikzshow} 327 | 328 | 注意,缩放命令 \tikzkw{scale} 并不更改对象的属性,比如点的字体大小、线宽等等。如果想要改变这些,参考\secref{subsec:nodescaling}部分。 329 | 330 | \subsubsection{倾斜(slant)*} 331 | 倾斜不是一个常用的图像变换。\tikzz\ 中的倾斜指令是 \tikzkw{xslant} 与 \tikzkw{yslant}。简单地解释,\texttt{xslant=k} 会把图像中坐标为 \((x,y)\) 的点变换为 \((x+k\times y, y)\)。 332 | \begin{tikzshow}[very thick,scale=.6] 333 | \draw[help lines] (0,0) grid (4,2); 334 | \draw (0,0) -- (1,1) -- (1,2) -- cycle; 335 | \draw[red, xslant=1.5] (0,0) -- (1,1) -- (1,2) -- cycle; 336 | \draw[blue, xslant=-1] (0,0) -- (1,1) -- (1,2) -- cycle; 337 | \end{tikzshow} 338 | 339 | \subsection{裁剪(clip)} 340 | 在 \latexline{clip} 命令\RED{之后}的所有绘图都会只显示该裁剪视窗中的部分: 341 | \begin{tikzshow} 342 | \clip (0,0) rectangle (1.1, 1.1); 343 | \draw[red, thick] (0,0) circle [radius=1]; 344 | \end{tikzshow} 345 | 346 | 添加 \tikzkw{draw} 选项可以把 \latexline{clip} 命令的“轮廓”绘制出来\footnote{也可使用 \latexline{draw} 命令并将 \tikzkw{clip} 作为参数,还可将两者作为 \latexline{path} 命令的参数。}: 347 | \begin{tikzshow} 348 | \clip[preaction={draw=red,ultra thick}] (1.2,0) arc [start angle=0, end angle=225, radius=1.2]; 349 | \draw (-1,-1) rectangle (1,1); 350 | \draw (-1,1) -- (1,-1); 351 | \end{tikzshow} 352 | 上例使用一个非闭合的路径(圆弧)来裁剪,\tikzz\ 会自动将其首尾连接。其中,\tikzkw{preaction} 选项表示在 \latexline{clip} 命令\RED{之前}先沿该路径按传递给其的参数绘制,之后再创建裁剪视窗;这样可以实现视窗轮廓的自定义绘制(因为裁剪只影响其后的绘制命令)。 353 | 354 | \subsection{分组(scope)} 355 | \label{subsec:scope} 356 | 分组操作允许你对当前组使用参数——这些参数会叠加到全局参数上,并且不影响到组外的对象: 357 | \begin{tikzshowenvi} 358 | \begin{tikzpicture}[red, very thick, scale=.5] 359 | \draw (1,0) circle [radius=1]; 360 | \begin{scope}[blue, scale=2] 361 | \draw (0,0) circle [radius=1]; 362 | \end{scope} 363 | \end{tikzpicture} 364 | \end{tikzshowenvi} 365 | 366 | \subsection{画布大小} 367 | 命令 \latexline{useasboundingbox} 可以 368 | 369 | \section{点(node)与文本} 370 | 371 | \subsection{点的坐标指定} 372 | 使用 \latexline{coordinate} 命令给点命名,便于之后引用。 373 | \begin{tikzshow} 374 | \coordinate (A) at (1,0); 375 | \coordinate (B) at (1,1); 376 | \draw (0,0) -- (A) circle[radius=.5] -- (B) -- cycle; 377 | \end{tikzshow} 378 | \tikzkw{coordinate} 也可以在绘制命令中作为选项使用。 379 | 380 | \subsection{点的基本命令} 381 | 如需显式地绘制点(即占有面积的点),使用 \latexline{node} 命令,或者 \latexline{path} 命令的 \tikzkw{node} 选项,并配合 \tikzkw{draw} 选项。选项 \tikzkw{shape} 用于指定点的绘制方式。 382 | \begin{tikzshow} 383 | \node at (0,0) [shape=circle, draw] (C) {$p_C$}; 384 | \node at (1,0) [rectangle, draw, fill=red] {}; 385 | \path[yshift=1cm] (0,.5) node[draw] (A) {$p_A$} 386 | (1,.5) node[draw] (B) {$p_B$}; 387 | \draw (A) -- (B) -- (C); 388 | \end{tikzshow} 389 | 选项 \tikzkw{shape} 还可赋值为 \texttt{coordinate},这样在点之间连线时会从点中心开始绘制;但我建议此时直接使用 \tikzkw{coordinate} 命令。 390 | 391 | \subsubsection{点的锚点(anchor)} 392 | 使用 \tikzkw{anchor} 选项定义锚点位置,可传入的值是 4 个基本方位(east, west, south, north)、4 个复合方位(south west 等),以及 center。或者你可以依次用 left, right, above, below 来替代四个基本方位: 393 | \begin{tikzshow} 394 | \draw[help lines] (0,0) grid (2,2); 395 | \draw (0,0) node [anchor=south west] {$\beta$}; 396 | \node at (0,1) [above right] {Here}; 397 | \node at (1,0) [above=2pt] {Hi}; 398 | \draw (1,2) node [below right=1pt and 8pt] {$1,0$}; 399 | \end{tikzshow} 400 | 其中,如果像最后一行给出双距离参数,需加载 \pkg{positioning} 库。 401 | 402 | 也可以直接用数字指定 \tikzkw{anchor} 的角度,\tikzz\ 会自动定位到点边界上对应角度的位置: 403 | \begin{tikzshow} 404 | \draw (0,0) circle [radius=1]; 405 | \foreach \x in {1,...,12} { 406 | \node at (90-30*\x:1) [anchor=270-30*\x] {\x}; 407 | } 408 | \end{tikzshow} 409 | 410 | 点的命名类似 \latexline{coordinate} 的用法: 411 | \begin{tikzshow} 412 | \path node (a) at (0,0) {} 413 | node (b) at (1,0) {}; 414 | \draw (a) -- (b); 415 | \end{tikzshow} 416 | 417 | \subsubsection{点的尺寸} 418 | 点的大小用 \tikzkw{inner sep} 指定文字到点边框的距离,用 \tikzkw{minimum size} 指定边框的最小尺寸。也可以配合 \tikzkw{text width} 选项指定文本的每行宽度。 419 | \begin{tikzshow} 420 | \tikzset{every node/.style={draw, circle}} 421 | \node (a) {a}; 422 | \node[yshift=1cm] (b) {b}; 423 | \node[shift={(1,2)}, inner sep=2pt] (c) {c}; 424 | \node[xshift=1cm, minimum size=8pt] (d) {d}; 425 | \node[shift={(1,1)}, minimum size=8pt, inner sep=0pt] (e) {e}; 426 | \end{tikzshow} 427 | 注意点 \(d\) 和点 \(e\) 的区别。 428 | 429 | \subsection{点的相对放置} 430 | 点的相对放置有两种方式。其一如下例,双距离语句需要 \pkg{positioning} 库。 431 | \begin{tikzshow} 432 | \tikzset{every node/.style={draw, circle}} 433 | \draw[help lines] (0,0) grid (3,3); 434 | \node (a) {a}; 435 | \node (b) [above=of a] {b}; 436 | \node (c) [above right=.5cm and 2cm of b] {c}; 437 | \node (d) [below=.5cm of c, on grid] {d}; 438 | \draw[red] (b) rectangle (d); 439 | \end{tikzshow} 440 | \tikzkw{on grid} 选项表示从边框而不是点中心开始计算距离,因此 \(b\) 与 \(d\) 的纵坐标不同。另一种方式是使用方位词结合点的名称,组成 \texttt{点名\mbox{.}方位词} 的语法: 441 | \begin{tikzshow} 442 | \node (a) {a}; 443 | \node[above] (aa) at (a.north) {a.north}; 444 | \end{tikzshow} 445 | 上例中的 \tikzkw{above} 选项不是必须的,但往往添加以避免点间的覆盖。 446 | 447 | \subsection{点的旁置文本(label/pin)} 448 | 旁置文本(或标签)可用上一节的语法画另一个点来实现,但 \tikzkw{label} 或 \tikzkw{pin} 选项更简洁,会直接在主点旁画一个旁置点。对同一个主点画多个 \tikzkw{label} 或 \tikzkw{pin} 都是允许的;它们的区别在于后者会在主点和旁置点之间连一条线。 449 | 450 | 标签位置的语法是 \texttt{角度\mbox{:}文本}——它还有一个特殊的角度参数 \texttt{center},会将标签放在主点的中心处。你也可以通过 \tikzkw{label distance} 或 \tikzkw{pin distance} 选项来指定距离。 451 | \begin{tikzshow}[every node/.style={draw, circle}] 452 | \draw node[pin={[pin distance=.2cm, pin edge={<-, thick}]above right:$a_{p}$}] (a) at (0,0) {a} 453 | node[label={[red]30:$b'$}] (b) at (0,1) {b} 454 | node[label=120:$c'$, label=below:$c''$] (c) at (1.5,1) {c}; 455 | \end{tikzshow} 456 | 上例中甚至给 \tikzkw{label} 传入了颜色参数。还可以使用 \texttt{every pin, every pin edge} 或 \texttt{every label} 样式设定默认值。 457 | 458 | 当点被旋转时,参数 \tikzkw{absolute} 可以帮助你定位。如果它的值是 \texttt{true} 或缺省,那么方向不会跟随点而旋转,而是始终以纸面做参照: 459 | \begin{tikzshow} 460 | \tikzset{ 461 | every node/.style={draw, rectangle}, 462 | every label/.style={draw=red, font=\footnotesize} 463 | } 464 | \node[rotate=-80,label=right:label] (a) at (0,0) {normal}; 465 | \draw[blue, thick] (0,0) -- (-80:1); 466 | \node[rotate=-80,label={[absolute]right:label}] (b) at (1,0) {absolute}; 467 | \draw[blue, thick] (1,0) -- +(0:1); 468 | \end{tikzshow} 469 | 左侧标签的锚点(位于红色矩形的左侧边上)在点“normal”右侧边框的中点,而右侧标签的锚点则位于穿过点“absolute”中心的水平向右的线上。\RED{上例中出现了方括号嵌套时,不要忘记添加花括号}。 470 | 471 | \subsection{点的沿路径文本} 472 | \subsubsection{显示指定} 473 | 将 \tikzkw{node} 选项放于对应的点坐标之后,称为显示(explicitly)指定。 474 | 475 | 对于沿路径的文本标记,\tikzz\ 预定义了 7 种位置,分别是 \tikzkw{at start/end}, \tikzkw{(very) near start/end},以及缺省时的 \tikzkw{midway}。 476 | \begin{tikzshow} 477 | \draw (0,0) .. controls (.5,2) .. (1.5,2) 478 | node[at start] {at start} 479 | node[midway, sloped, above] {midway} 480 | node[pos=1, right, text width=3ex] {at end}; 481 | \end{tikzshow} 482 | 上例中的一些参数: 483 | \begin{para} 484 | \item[sloped] 设置文字基线与图中此处的切线平行。 485 | \item[pos] 定量化的位置参数\footnote{并不是严格的空间分点;而是基于首、尾、控制点间向量计算出速度,取其时间分点。很难精确指定。}。比如预定义的 \tikzkw{very near start} 即为 \(0.125\),\tikzkw{near start} 即为 \(0.25\)。 486 | \end{para} 487 | 488 | 对于交点指定(\tikzkw{|-} 或 \tikzkw{-|}),中点(\tikzkw{midway})即为垂足: 489 | \begin{tikzshow} 490 | \draw (0,0) |- (2,1) \foreach \p in {0,0.5,1} { 491 | node[pos=\p] {\p} 492 | }; 493 | \end{tikzshow} 494 | 495 | 不同位置放置文本的场合,使用 \tikzkw{auto} 选项,并可以设定 \texttt{left} 或者 \texttt{right} 参数;选项 \tikzkw{swap} 则允许你将其文本放在对称位置。注意:这两个选项\RED{只对沿路径的放置有效}。 496 | \begin{tikzshow}[scale=.5, every node/.style={circle, inner sep=2pt}] 497 | \foreach \x in {1,...,4} { 498 | \draw (90-90*\x:2) -- (-90*\x:2) 499 | node[midway, fill=red!30, auto=left] {\x} 500 | node[midway, fill=blue!30, auto, swap] {\x}; 501 | } 502 | \end{tikzshow} 503 | 504 | \subsubsection{隐式指定} 505 | 路径里点的位置可以隐式(implicitly)指定,放在 \texttt{--} 命令与要连接的点之间即可。只有隐式指定的点才会继承全局参数(因此隐式指定往往可以省略一些参数,比如 \tikzkw{midway})。例子\cite{tikzmanual}: 506 | \begin{tikzshowenvi} 507 | \begin{tikzpicture}[near end] 508 | \draw (0,2.5) -- (3,2.5) node{A}; 509 | \draw (0,2) -- node{B} (3,2); 510 | \draw (0,1.5) -- node[midway] {C} (3,1.5); 511 | \draw (0,1) -- (3,1) node[midway] {D} ; 512 | \end{tikzpicture} 513 | \end{tikzshowenvi} 514 | 将上述代码中的 \tikzkw{--} 换成 \tikzkw{to} 也可以;通常后者是个更强的命令,在下一节中也会介绍。 515 | 516 | \subsection{点之间的连线} 517 | \label{subsec:connectingnodes} 518 | \subsubsection{基础连线} 519 | 点之间连线会自动检测点的绘制边界,主要要三种操作方式: 520 | \begin{enumerate} 521 | \item 在点名称后增加小数点和方位词来指定,比如点 a 的左侧就用 \texttt{(a.west)}; 522 | \item 使用 \texttt{to} 代替 \texttt{--},并附加 \tikzkw{out} 与 \tikzkw{in} 选项。(如果不附加则会画直线) 523 | \item 使用 \texttt{to} 附加 \tikzkw{bend left/right} 选项。下例中最后一行以 a 到 b 直线方向为角度 0,\texttt{bend left=45} 表示逆时针旋转 $45$ 度作为 \tikzkw{out} 值,旋转 $180-45=135$ 度作为 \tikzkw{in} 值。 524 | \end{enumerate} 525 | \begin{tikzshow} 526 | \tikzset{every node/.style={draw,circle}} 527 | \node (a) {a}; 528 | \node (b) [below=of a] {b}; 529 | \node (c) [left=of b] {c}; 530 | \draw[blue, ->] (c.north) .. controls +(up:1) and +(left:1) .. (a.west); 531 | \draw[red, ->] (c) [out=315, in=225] to (b); 532 | \draw[->] (a) to [bend left=45] (b); 533 | \end{tikzshow} 534 | 535 | \subsubsection{绘制到命令(to)} 536 | 除了上面提到的 \tikzkw{to} 命令的用法,它还有以下灵活的使用方式: 537 | 538 | 使用 \tikzkw{edge node} 来给点之间的连接线添加文本。但更好用的是 \tikzkw{edge label} 命令,表示以 \tikzkw{auto} 选项来自动放置文本;如果换成 \tikzkw{edge label'},则表示以 \tikzkw{auto, swap} 选项放置。 539 | \begin{tikzshow} 540 | \coordinate (a); 541 | \coordinate (b) at ($ (a)+(2,1) $); 542 | \draw (a) to[edge node={node [sloped,above] {ab}}] (b); 543 | \draw (a) to[color=red, bend right=45, edge label=auto, edge label'=swap] (b); 544 | \end{tikzshow} 545 | 546 | 最后,该命令允许用户以 \tikzkw{to path} 选项来指定绘制方式,并用 \latexline{tikztostart} 表示当前 \tikzkw{to} 命令的起始点,\latexline{tikztotarget} 表示终止点,\latexline{tikztonodes} 表示绘制路径时伴随的点(可省略)。实质上是添加了一个路径分组(花括号内的选项不会应用到外部): 547 | \begin{latex} 548 | {[every to, ] } 549 | \end{latex} 550 | 551 | 例子: 552 | \begin{tikzshow} 553 | \tikzset{selfloop/.style={to path={.. controls +(75:1) and +(105:1) .. (\tikztotarget) \tikztonodes}}} 554 | \node (a) {$a$}; 555 | \node[right=of a] (b) {$b$}; 556 | \node[below=of b] (c) {$c$}; 557 | \draw[->] (a) edge (b) (b) edge[selfloop] node[above] {Hi} (b) edge (c); 558 | \end{tikzshow} 559 | 你可能注意到,上例中虽然定义了 \tikzkw{to path},但使用了 \tikzkw{edge} 而不是 \tikzkw{to};实质上两者的语法有相近之处,但使用 \tikzkw{to} 会导致只有最后一条子路径有箭头。 560 | 561 | 库 \pkg{topaths} 定义了一些实用的样式,比如在上例中就可以直接使用它预定义 \tikzkw{loop above}。 562 | 563 | \subsubsection{边命令(edge)} 564 | 边命令的底层形式是,其中 \verb|| 与 \tikzkw{to} 格式相同: 565 | \begin{latex} 566 | \path[every edge, ] (\tikztostart) 567 | \end{latex} 568 | 569 | 因此它将绘制包含同一个点(即 \texttt{\char`\\tikztostart})的所有边。当你想要给每个点的边进行定制时,这会十分有用: 570 | \begin{tikzshow} 571 | \tikzset{every node/.style={draw,circle}} 572 | \node (a) {a}; 573 | \node (b) [below=of a] {b}; 574 | \node (c) [left=of b] {c}; 575 | \draw[thick] (c) edge[red, -latex] (b) 576 | edge[bend left=45] (a) 577 | edge[blue, <-] (a); 578 | \end{tikzshow} 579 | 提醒一下那些熟悉图论的读者:别忘了尽管最后一行中边的箭头方向是从 a 到 c 的,但仍可以像上面一样用 c 点的 \tikzkw{edge} 命令来绘制。 580 | 581 | 你还可以连写边命令,并沿边加上文字: 582 | \begin{tikzshow} 583 | \node foreach \name/\angle in {a/0,b/90,c/180,d/270} 584 | (\name) at (\angle:1.5) {$\name$}; 585 | \path[->] (b) edge node[above right] {$5$} (a) 586 | edge (c) 587 | (c) edge [-,dashed, blue] node[auto] {auto} 588 | node[auto, swap] {swap} (a) 589 | edge (d) 590 | (d) edge [red] node[above,sloped] {very} 591 | node[below,sloped] {red} (a); 592 | \end{tikzshow} 593 | 这里用到了之前提及的 \tikzkw{auto} 命令。注意,只要 \tikzkw{path} 命令指定了箭头选项,\tikzkw{edge} 命令绘制的每条边都有箭头。 594 | 595 | \subsection{点与画布的缩放} 596 | \label{subsec:nodescaling} 597 | 598 | 599 | \subsection{作为图像的点(pic)*} 600 | 一段绘图代码可能需要复用;如果它比较复杂,可以使用 \latexline{pic} 来重复调用。 601 | \begin{tikzshow}[scale=0.8] 602 | \tikzset{dcircle/.pic={\draw (0,0) circle [x radius=.5, y radius=.8] circle [radius=1];}} 603 | % 两种调用方式 604 | \draw[help lines] (0,-1) grid (2,2); 605 | \pic at (0,0) {dcircle}; 606 | \path (2,0) pic {dcircle}; 607 | \end{tikzshow} 608 | 语法非常类似 \tikzkw{node}。其中 \tikzkw{at} 也可以写成 \texttt{[at=\{(0,0)\}]} 这种形式。 609 | 610 | \tikzkw{pic actions} 选项用于传入 \texttt{draw, fill, shade, 或 clip} 参数: 611 | \begin{tikzshow}[scale=0.6, transform shape] 612 | \tikzset{circlerect/.pic = { 613 | \path[pic actions] (.5,.5) circle [radius=.3]; 614 | \draw (0,0) rectangle (1,1); 615 | }} 616 | \draw[red] (0,0) grid (4,2); 617 | \pic [blue, thick] at (.5,.5) {circlerect}; 618 | \pic [draw=blue, fill=white] at (2.5,.5) {circlerect}; 619 | \end{tikzshow} 620 | 当不传入 \tikzkw{draw} 选项时,圆的 \latexline{path} 命令是不会绘制的;同时注意,因为绘制矩形的是 \latexline{draw} 命令,因此不受\tikzkw{fill} 选项影响。 621 | 622 | 插入的 \tikzkw{pic} 中的点可以在外部调用,一个例子: 623 | \begin{tikzshow} 624 | \tikzset{mypic/.pic={ 625 | \draw[blue] (0,0) coordinate (-A) 626 | -- (1,1) coordinate (-B); 627 | }} 628 | 629 | \draw[help lines] (0,0) grid (1,2); 630 | \pic (P) {mypic}; 631 | \pic (Q) at (0,1) {mypic}; 632 | \draw[red] (P-A) -- (Q-B); 633 | \end{tikzshow} 634 | \tikzkw{pic} 定义时用短横命名是为了可读性。调用时语法类似 \tikzkw{node}。 635 | 636 | \pkg{quotes} 库支持以加引号字串的方式传入参数,作为 \tikzkw{pic text} 选项的值。比如 \texttt{angles} 这个预定义的 \tikzkw{pic}(由 \pkg{angle} 库支持): 637 | \begin{tikzshow} 638 | \draw (0,-1) coordinate (P1) 639 | -- (0,0) coordinate (O) 640 | -- (1,1) coordinate(P2) 641 | pic [draw, "$\alpha$"] {angle=P1--O--P2}; 642 | \end{tikzshow} 643 | 644 | 一些其他注意: 645 | \begin{feai} 646 | \item 如果有 \texttt{foreach} 语句,\textbf{请放在 \texttt{pic} 定义的首行} 。 647 | \item \tikzkw{pic} 虽说从用法上近似 \tikzkw{node},实质上它是以类似 \tikzz\ \envi{scope} 环境的方式工作的。因此,如果想要其外部的图像变换对其生效,须添加 \tikzkw{transform shape} 选项于 \envi{tikzpicture} 环境。 648 | \item \tikzkw{pic} 对象也能像 \tikzkw{node} 一样,沿路径放置,设置 \tikzkw{at start} 等选项。 649 | \item 将 \tikzkw{pic} 作为选项使用时,添加 \tikzkw{behind path} 或者 \tikzkw{in front of path} 来指定将 \tikzkw{pic} 插入到所在路径的下方或是上方图层。 650 | \item 如果你只是临时使用而不想额外定义,这里有一个使用 \tikzkw{code} 选项的例子\cite{tikzmanual}: 651 | \begin{tikzshow} 652 | \draw (0,0) .. controls(1,0) and (2,1) .. (3,1) 653 | foreach \t in {0, 0.1, ..., 1} { 654 | pic [pos=\t] { 655 | code={\draw circle [radius=2pt];} 656 | } 657 | }; 658 | \end{tikzshow} 659 | 注意,本例只有一句语句。句中 \tikzkw{pic} 是 \latexline{draw} 命令的选项。 660 | \end{feai} 661 | 662 | \section{路径(path)} 663 | 虽然我们不常直接使用 \latexline{path} 命令,而是使用它的变体 \latexline{draw} 等,但是我们仍然需要介绍一些它的特性。 664 | 665 | 最常用的情景就是只声明点,但却不显示地绘制它们: 666 | \begin{tikzshow} 667 | \path coordinate (a) 668 | coordinate[right=of a] (b) 669 | coordinate[above=of b] (c); 670 | \draw (a) -- (b) -- (c) -- cycle; 671 | \end{tikzshow} 672 | 673 | 特别指明,点命令(\tikzkw{node} 或者 \tikzkw{coordinate})总是在路径绘制结束后再绘制的;它们不是路径的一部分。 674 | 675 | 以下路径命令已在上文(或将在其他小节)进行介绍: 676 | \begin{description} 677 | \item[移动(move-to)指令] 隐式。如 \verb|draw (a) -- (b) (c) -- (d)|,在 b 与 c 间即为移动指令。 678 | \item[直线(line-to)指令] 包括直线指令 \tikzkw{--} 与水平竖直线指令 \tikzkw{|-} 和 \tikzkw{-|}。 679 | \item[曲线(curve-to)指令] 即绘制 \bz\ 曲线的 \tikzkw{.. controls ..} 指令。 680 | \item[绘制到(to)指令] 上文介绍过 \tikzkw{to} 配合 \tikzkw{out, in, bent left} 等命令的用法,参考前文\secref{subsec:connectingnodes}。它实际将指令解释为以上三种指令之一。 681 | \item[几何形状指令] 包括圆或椭圆 \tikzkw{circle}、矩形 \tikzkw{rectangle} 与弧 \tikzkw{arc} 指令。 682 | \item[函数指令*] 包括抛物线 \tikzkw{parabola}、正弦 \tikzkw{sin} 与余弦 \tikzkw{cos} 指令。更复杂的函数会在 683 | \item[网格指令] 即 \tikzkw{grid} 指令。 684 | \item[圆角指令*] 即 \tikzkw{rounded corners} 与 \tikzkw{sharp corners} 指令。 685 | \item[循环指令] 即 \tikzkw{foreach} 指令,具体可参考\secref{subsec:foreach}部分。 686 | \item[暂存指令] 即 \tikzkw{let} 指令,将数据暂存以供语句之后调用。参考\secref{subsec:nodesdistance}部分。 687 | \item[图指令*] 即 \tikzkw{graph} 指令,绘制图、树、网络的命令。参考\secref{sec:network}部分。 688 | \item[图像指令*] 即 \tikzkw{pic} 命令, 689 | \end{description} 690 | 691 | 本节会介绍除上述指令外的其他路径指令。 692 | 693 | \subsection{路径分组} 694 | 类似与 \envi{scope} 环境,\tikzz\ 允许在路径中创建一个“分组”,分组中的选项不会影响到分组外部的内容。只需要将想要建立分组的部分用花括号包围即可: 695 | \begin{tikzshow} 696 | \path coordinate (a) 697 | coordinate[right=of a] (b) 698 | coordinate[above=of b] (c) 699 | coordinate[left=of c] (d); 700 | \draw (a) -- (b) {[rounded corners] -- (c) -- (d) {[sharp corners] -- cycle}}; 701 | \end{tikzshow} 702 | 注意,并不是所有参数都支持分组。例如,每条路径只能有一个颜色,因此在分组中指定另一种颜色是无效的。 703 | 704 | \subsection{SVG 指令*} 705 | 加载 \pkg{svg.path} 库后,路径中的 \tikzkw{SVG} 选项允许你使用类似网页 \texttt{HTML} 中 \texttt{SVG} 的语法进行绘制。这里不再详细对 SVG 语法做说明,仅给出一个例子: 706 | \begin{tikzshow} 707 | \draw[fill=red!50] svg {M 0 0 L 10 10 h 20 v -10} -- cycle; 708 | \end{tikzshow} 709 | 该库只支持真正的 \texttt{SVG} 指令集的主要部分,并不是完全涵盖。 710 | 711 | \subsection{绘图指令(plot)} 712 | 该指令用于绘制点较多的图,也可以从外部文件读取。 713 | 714 | \subsection{计算指令(pgfextra)} 715 | 该指令只能用于路径命令内部,运行到此处时路径绘制会挂起,直到运行完该命令内部的部分再继续绘制。一个例子: 716 | \begin{tikzshow} 717 | \newdimen\myloc 718 | \myloc=0cm 719 | \draw (0,\myloc) \pgfextra{\myloc=.5cm} 720 | circle [radius=\myloc] -- (0,1); 721 | \end{tikzshow} 722 | 723 | \section{数学绘制:几何与函数图像} 724 | 严格的几何学绘图需要一些特别的命令,比如计算两点间的距离。而且,通常会使用 \tikzkw{coordinate} 而不是 \tikzkw{node} 命令;因为前者并不占用面积,这样画线时才能保证抵达点所在的中心坐标。 725 | 726 | \subsection{坐标计算} 727 | 库 \pkg{calc} 允许用户使用 \texttt{\$ ... \$} 的形式来计算,并放在一对圆括号中作为坐标: 728 | \begin{tikzshow} 729 | \coordinate[label=below:A] (A); 730 | \coordinate[above right=.5 and 1.5 of A, label=right:B] (B); 731 | \draw (A) -- (B); 732 | \draw ($ (A) + (.3,.4) $) circle (.5); 733 | \end{tikzshow} 734 | 735 | \subsection{两点距离计算} 736 | \label{subsec:nodesdistance} 737 | 上一节中的半径值是人工计算的。下例让 \tikzz\ 计算距离,并用 \tikzkw{let} 选项将其储存起来,在 \tikzkw{in} 选项的后方进行调用: 738 | \begin{tikzshow}[scale=0.6, transform shape] 739 | \coordinate[label=left:A] (A); 740 | \coordinate[above right=.5 and 1.5 of A, label=right:B] (B); 741 | \draw (A) -- (B); 742 | \draw let \p1 = ($ (B) - (A) $), 743 | \n{rad} = {veclen(\x1,\y1)} 744 | in (B) circle[radius=\n{rad}] 745 | (A) circle[radius=\n{rad}]; 746 | \end{tikzshow} 747 | 命令 \verb|\p<数字>| 用于存储向量计算结果,比如 \verb|\p1|。对应的,使用 \verb|\x1| 或者 \verb|\y1| 可以调用向量的两个坐标值。而 \verb|\n<数字>| 则用于存储数值。此外,命令 \tikzkw{veclen} 用于计算向量的欧式长度 \(\sqrt{x^2+y^2}\)。 748 | 749 | 如果不想使用数字命名,可以像上例的存储数值一样使用字符串;不过这样命名需要加上花括号。事实上,已知圆心 $A$ 和圆周上一点 $B$,有更简单的画圆方法,参考\secref{subsec:circlethrough}部分的内容。 750 | 751 | \subsection{$\lambda$分点与垂线} 752 | \subsubsection{比例分点} 753 | 分点是几何中常用的概念,\pkg{calc} 库支持像 \pkg{xcolor} 混合颜色类似的命令:\verb|<点A>!<分点比例>![角度]<点B>|,不同的是“角度”会将分点位置绕 A 旋转一个角度。将它还可以用最后一行中链式的方法进行连写: 754 | \begin{tikzshow} 755 | \coordinate[label=left:A] (A); 756 | \coordinate[above right=.5 and 1.5 of A, label=right:B] (B); 757 | \coordinate (X) at ($ (A)!0.5!(B) $); 758 | \coordinate[label=above:C] (C) at ($ (X)!{sqrt(3)}!90:(B) $); 759 | \path[draw=black, fill=blue!20] (A) -- (B) -- (C) -- cycle; 760 | \node[draw=black, fill=red!20, circle through=(X)] at ($ (A)!0.5!(B)!{tan(30)}!90:(B) $) {}; 761 | \end{tikzshow} 762 | 763 | \subsubsection{距离分点} 764 | 你也可以用(直线段)分点距离代替分点比例,加上单位即可: 765 | \begin{tikzshow} 766 | \coordinate[label=left:A] (A); 767 | \coordinate[above right=.5 and 1.5 of A, label=right:B] (B); 768 | \coordinate (C) at ($ (A)!0.5!(B) $); 769 | \draw ($ (C)!1cm!90:(B) $) edge (B) edge (A) 770 | edge[dashed] node[above, sloped, font=\footnotesize] {1cm} (C); 771 | \end{tikzshow} 772 | 773 | \subsubsection{投影分点(垂线)} 774 | 用投影点代替分点比例,则得到该点向连线段的投影: 775 | \begin{tikzshow} 776 | \coordinate[label=left:A] (A); 777 | \coordinate[above right=.5 and 2 of A, label=right:B] (B); 778 | \coordinate[above right=1 and .5 of A, label=above:C] (C); 779 | \draw (A) -- (B) -- (C) -- cycle; 780 | \draw[red] (C) -- ($ (A)!(C)!(B) $); 781 | \end{tikzshow} 782 | 783 | \subsection{过某点的圆*} 784 | \label{subsec:circlethrough} 785 | 使用 \pkg{through} 库可以方便地画出给定圆心和过某点的圆,而不需要做两点距离计算: 786 | \begin{tikzshow}[scale=0.6] 787 | \coordinate[label=below left:A] (A); 788 | \coordinate[above=1 of A, label=above right:B] (B); 789 | \draw (A) -- (B); 790 | \node[draw, circle through=(B), label=left:C] at (A) {}; 791 | \node[draw, circle through=(A), label=right:D] at (B) {}; 792 | \end{tikzshow} 793 | 注意,\tikzkw{circle through} 仅仅适用于 \tikzkw{node} 命令。 794 | 795 | \subsection{交点} 796 | 在\secref{subsec:intersection}中已经介绍过交点的使用,包括 \tikzkw{-|} 指令与 \pkg{intersections} 库的一些用法。这里的例子更复杂一些,也复习了之前等分点的用法: 797 | \begin{tikzshow} 798 | \tikzset{small/.style={draw, circle, fill=black, inner sep=1pt}} 799 | \coordinate[label=left:A] (A); 800 | \coordinate[above right=.5 and 1.5 of A, label=right:B] (B); 801 | \coordinate[label=below:C] (C) at ($ (A)!0.5!(B) $); 802 | \coordinate (D) at ($ (C)!2!90:(B) $); 803 | \coordinate (E) at ($ (C)!2!-90:(B) $); 804 | \draw (A) -- (B); 805 | \draw[red, name path=Lv] (E) -- (D); 806 | \node[draw, circle through=(B), name path=Ca] at (A) {}; 807 | \path[name intersections={of=Lv and Ca, by={[label=above right:D]D, [label=right:E]E}}]; 808 | \foreach \x in {A,C,D,E} 809 | \node[small] at (\x) {}; 810 | \end{tikzshow} 811 | 注意上例中的 \latexline{path} 命令虽声明了交点,但没有画任何内容。 812 | 813 | \section{图与网络绘制*} 814 | \label{sec:network} 815 | 816 | \section{属性} 817 | \label{sec:tikz-property} 818 | 819 | \subsection{线宽} 820 | \tikzz\ 预定义了 7 种线宽,从细到粗是:\tikzkw{ultra thin}, \tikzkw{very thin}, \tikzkw{thin}, \tikzkw{semithick}, \tikzkw{thick}, \tikzkw{very thick}, \tikzkw{ultra thick}。或者利用 \tikzkw{line width} 选项指定。 821 | \begin{tikzshow} 822 | \draw[ultra thin] (0,0) -- (1,0); 823 | \draw[ultra thick] (1,0) -- (2,0); 824 | \draw[line width=10pt] (0,1) -- (2,1); 825 | \end{tikzshow} 826 | 初始线宽是 0.4pt;两个 \tikzkw{ultra} 线宽分别是 0.1pt 与 1.6pt。 827 | 828 | \subsection{线型} 829 | \tikzz\ 预定义了 4 种基本线型:\tikzkw{dashed}, \tikzkw{dotted}, \tikzkw{dash dot}, \tikzkw{dash dot dot}。它们还可以配合 \tikzkw{loosely} 或者 \tikzkw{densely} 进行微调。 830 | \begin{tikzshow} 831 | \draw[dashed] (0,0) -- (1,0); 832 | \draw[dotted] (0,-0.5) -- (1,-0.5); 833 | \draw[dash dot] (0,-1) -- (1,-1); 834 | \draw[dash dot dot] (0,-1.5) -- (1,-1.5); 835 | \draw[loosely dashed] (0,-2) -- (1,-2); 836 | \draw[densely dotted] (0,-2.5) -- (1,-2.5); 837 | \end{tikzshow} 838 | 839 | 如果的确需要深度自定义,请使用 \tikzkw{dash pattern} 自定义线型,并可配合 \tikzkw{dash phase} 指定线型的起始位置。 840 | \begin{tikzshow} 841 | \draw[dash pattern=on .1cm off .25cm on .25cm off .15cm, dash phase=1cm] (0,0) -- (3,0); 842 | \end{tikzshow} 843 | 844 | 有时你可能会看到一些复杂的装饰线(需要 \pkg{decorations} 库),比如:\tikz{\draw [->,decorate,decoration=snake] (0,0) -- (2,0)}。请参考\secref{subsec:deco}。 845 | 846 | \subsection{线尾(line cap)*} 847 | 如果线宽度较大,不同的线尾 \tikzkw{line cap} 明显对应不同的效果: 848 | \begin{tikzshow}[every label/.style={font=\footnotesize}] 849 | \foreach \offset/\s in {0/rect, .5cm/butt, 1cm/round} { 850 | \draw[yshift=\offset,line width=5pt, line cap=\s] (0,0) -- (1,0) node[label=right:\s] {}; 851 | \draw[yshift=\offset, white] (0,0) -- (1,0); 852 | } 853 | \end{tikzshow} 854 | 855 | \subsection{线交(line joint)*} 856 | 连续画线时(非连续画线处此选项无效),可以设置 \tikzkw{line joint}: 857 | \begin{tikzshow}[every label/.style={font=\footnotesize}] 858 | \foreach \offset/\s in {0/round, 1.25cm/bevel, 2.5cm/miter} { 859 | \draw[xshift=\offset,line width=5pt, line join=\s] (0,0) -- (.5,1) node[label=above:\s] {} -- (1,0) ; 860 | } 861 | \end{tikzshow} 862 | 其中 \tikzkw{miter} 线交在锐角时会产生一个非常“尖”的效果,可以设置 \tikzkw{miter limit} 参数来设置一个角度值,使小于该角度的 \tikzkw{miter} 线交自动转变为 \tikzkw{bevel} 形式。 863 | 864 | \subsection{箭头} 865 | \tikzz\ 中的箭头使用的细节多到可以单独开一个章节,但我并不想全部详尽地介绍。用大于或小于号表示箭头的指向,用竖线表示是否加上截断符号。一些基本的样例: 866 | \begin{tikzshow} 867 | \draw[->|] (1,3) -- (2,3); 868 | \draw[stealth-] (1,2) -- (2,2); 869 | \draw[->,>=stealth, line width=3pt] (1,1) arc [start angle=90, end angle=30, radius=1]; 870 | \draw[<->] (.5,4) -- (.5,0) -- (2.5,0); 871 | \end{tikzshow} 872 | 其中,用 \texttt{>=stealth} 或 \texttt{-stealth} 的方式指定了箭头末端的类型为 \texttt{stealth}。你也可以将它们作为整个 \envi{tikzpicture} 环境的参数进行传递。 873 | 874 | \tikzz\ 的 \pkg{arrows.meta} 库包含很多箭头,读者可以自行查阅。 875 | 876 | \subsection{绘制颜色} 877 | 在绘制网格一节,已经使用过 \texttt{lightgray} 作为网格的绘制颜色;当时省略了 \tikzkw{color} 选项。该选项设定\RED{除了 shading 外的所有}颜色,包括绘制、填充等: 878 | \begin{tikzshow} 879 | \path[draw,fill,red!50] (0,0) -- (1,0) circle[radius=.5]; 880 | \end{tikzshow} 881 | 注意:单独使用 \latexline{draw} 或者 \latexline{fill} 只会执行绘制或填充其一,除非详细指定局部的参数。 882 | 883 | 可以使用 \tikzkw{draw} 来单独指定绘制的颜色: 884 | \begin{tikzshow} 885 | \draw[draw=red!50!white, ultra thick] (0,0) rectangle (1,1); 886 | \end{tikzshow} 887 | 其中,双感叹号加数字是表示插值比例为 0.5;\pkg{xcolor} 宏包支持该语法。常用的颜色包括: 888 | \begin{tikzshow} 889 | \tikzset{every pin/.style={pin distance=.5cm, font=\footnotesize, inner sep=0pt}} 890 | \draw (0,0) circle[radius=1]; 891 | \foreach \c[count=\i] in {red,green,blue,cyan,magenta,yellow,black, 892 | lightgray,gray,darkgray,white,brown, 893 | lime,olive,orange,pink,purple,teal,violet} 894 | \node[circle,draw=black, fill=\c, pin={[pin edge={draw=\c, thick}] 90-360/19*\i:\c}] at (90-360/19*\i:1cm) {}; 895 | \end{tikzshow} 896 | 897 | 在 \tikzz\ 环境内部,还可以使用 \latexline{colorlet} 或者 \latexline{definecolor} 自定义颜色(它们实际上是 \TeX\ 指令),例如: 898 | \begin{latex} 899 | \colorlet{linecolor}{red!60!black} 900 | \definecolor{fillcolor}{rgb}{1,0.5,1} 901 | \end{latex} 902 | 903 | \subsection{单色填充} 904 | 填充命令 \latexline{fill} 只能使用于闭合区域,\textbf{且不绘制区域边界}。你可以在一般绘制命令的末尾添加 \tikzkw{cycle} 来创建一个闭合对象: 905 | \begin{tikzshow} 906 | \fill[green] (0,0) -- (1,0) -- (1,1) -- cycle; 907 | \end{tikzshow} 908 | 909 | 在填充的同时绘制\footnote{准确地说,\latexline{filldraw} 命令是先绘制再填充。},使用 \latexline{filldraw} 命令,并分别指定绘制和填充颜色: 910 | \begin{tikzshow} 911 | \filldraw[draw=black, fill=cyan] (0,0) -- (2,0) arc (0:30:2); 912 | \end{tikzshow} 913 | \tikzkw{filldraw} 填充的区域会比用 \tikzkw{fill} 稍大一些,因为前者考虑了线宽。 914 | 915 | 要了解填充的细节,需要介绍两个区域特性: 916 | \subsubsection{非零区域} 917 | 该特性是默认的区域特性。\tikzz\ 使用计数器的方式来区分路径的内部与外部。对于某点的判断,它会从该点发射一条到无穷远的射线;如果沿途的路径是从左到右(顺时针)地与这条射线相交,那么计数器加一;反之减一。最后计数器如果是零,那么该点在路径外部;否则,它在区域内部。 918 | 919 | 下例逆时针地绘制了小矩形、顺时针地绘制了完全围住小矩形的大矩形。这样小矩形的内部被识别为“外部”,因此未被填充。 920 | \begin{tikzshow} 921 | \filldraw[fill=blue!50] (0,0) -- (0,.5) -- (1,.5) -- (1,0) -- cycle 922 | (-.5,-.5) -- (1.5,-.5) -- (1.5,1) -- (-.5,1) -- cycle; 923 | \end{tikzshow} 924 | 925 | \subsubsection{奇偶区域} 926 | 奇偶区域也会发射一条射线,但只要遇到路径就会计数器加一。利用区域的奇偶性填充,使用 \tikzkw{even odd rule}: 927 | \begin{tikzshow} 928 | \fill[even odd rule, blue] (0,0) -- (2,0.5) -- (1,1) circle (0.25); 929 | \end{tikzshow} 930 | 931 | \subsection{图案与图像填充*} 932 | 在指定了 \tikzkw{pattern} 选项时,它会自动进行填充操作(即使你使用的是 \latexline{draw} 命令)。要使用图案填充,请加载 \pkg{patterns} 库。 933 | \begin{tikzshow} 934 | \draw[pattern=dots, pattern color=red] (0,0) rectangle (1,1); 935 | \end{tikzshow} 936 | 937 | 图像填充允许你使用外部图像,或者一般的 \tikzz\ 命令。注意配合 \tikzkw{path picture bounding box} 使用。 938 | \begin{tikzshow} 939 | 940 | \end{tikzshow} 941 | 942 | \subsection{渐变填充*} 943 | 使用 \latexline{shade} 命令控制渐变填充, 944 | 945 | \subsection{透明度*} 946 | p169 947 | 948 | \subsection{双线*} 949 | 双线选项在某些场合也是实用的。可以用 \tikzkw{double distance} 指定双线内间距(默认 0.6pt),或者用 \tikzkw{double distance between line centers} 指定双线的中心间距。 950 | \begin{tikzshow} 951 | \draw[double] (0,0) -- (1,1); 952 | \draw[draw=white, double=cyan] (1,0) -- (0,1); 953 | \draw[double distance=1pt] (1.2,0) -- (1.2,.5); 954 | \draw[double distance=1pt,thick] (1.2,.5) -- (1.2,1); 955 | \end{tikzshow} 956 | 上例的 \tikzkw{draw} 指定为白色,实质创造一种“从上方穿过”的效果。 957 | 958 | 还有一个特殊的双线选项 \tikzkw{double equal sign distance},可以将双线间距设置成与当前字体的等号($=$)间距一致。 959 | 960 | \section{样式与高级控制} 961 | \subsection{样式(style)} 962 | 如果某种属性需要用来反复作图,可以把它自定义为样式: 963 | 964 | 上文中出现过的 \texttt{help lines},就是 \tikzz\ 预定义的一种样式。其相当于于: 965 | \begin{latex} 966 | \begin{tikzpicture}[help lines/.style={line width=0.2pt,gray}] 967 | ... 968 | \end{tikzpicture} 969 | \end{latex} 970 | 971 | 你也可以在进入 \tikzz\ 环境后(或在文档导言区),使用 \latexline{tikzset} 命令来定义。 972 | 973 | \subsection{循环语句(foreach)} 974 | \label{subsec:foreach} 975 | \tikzz\ 支持循环语句,这一点对于科技绘图来说十分重要。 976 | \begin{tikzshow}[place/.style={circle, draw, fill=black, minimum size=5pt, inner sep=0pt}] 977 | \foreach \x in {1,2,3} { 978 | \node at (\x, 0) [place] {}; 979 | \draw (\x, 0) circle [radius=1/\x]; 980 | } 981 | \end{tikzshow} 982 | 983 | 有时候我们需要循环一个等差数列,这时候使用 \ldots\ 即可。\tikzz\ 会将 \(a,b,\ldots,c\) 识别为从 \(a\) 到 \(c\) 以 \(b-a\) 为公差的等差数列;如果你不指定 \(b\),那么默认以 \(1\) 为公差。 984 | \begin{tikzshow}[place/.style={circle, draw, fill=black, minimum size=5pt, inner sep=0pt}] 985 | \foreach \x in {1,1.5,...,3,4} { 986 | \node at (\x, 0) [place] {}; 987 | \draw (\x, 0) circle [radius=\x/8]; 988 | } 989 | \end{tikzshow} 990 | 上例中的 \(4\) 不在数列内,这样写是允许的。数列后也可以接另一个数列。 991 | 992 | 大部分需要知道“循环到列表第几个”的场合,都可以配合移动画笔或相对坐标命令实现: 993 | \begin{tikzshow}[scale=.5] 994 | \draw[red] (0,0) grid (3,3); 995 | \foreach \x/\y in {0,1/2,2} 996 | \draw (\x, \y) +(.5,.5) circle [radius=.4]; 997 | \end{tikzshow} 998 | 上例同时循环了多个变量,中间用斜线分隔;它们分别按照列表中斜线分隔后的对应值进行循环。如果某一位置的列表提供值的个数小于变量的个数,那么“多出”的变量将都取最后一个值。 999 | 1000 | 此外,如果 \latexline{foreach} 内部只有一条语句,像上例一样不加花括号也可以。 1001 | 1002 | \subsection{图层*} 1003 | 一般情况不会用到此指令。但有时你需要先画完上层的内容才能确定下层元素的尺寸,这时候可能需要图层\cite{tikzmanual}(需要 \pkg{backgrounds} 库): 1004 | \begin{tikzshow} 1005 | \tikzset{every node/.style={draw,circle,inner sep=.1cm, minimum size=.8cm}} 1006 | \foreach \x/\pos in {{a/(0,0)},{b/(1.5,0)},{c/(1,-1)}} 1007 | \node (\x) at \pos {\x}; 1008 | \draw (b.east) .. controls +(0:1) and +(0:1) .. (c.east); 1009 | \begin{scope}[on background layer] 1010 | \node[draw=none,fill=lightgray, rectangle, fit=(b) (c)] {}; 1011 | \end{scope} 1012 | \end{tikzshow} 1013 | 上例中还使用了 \pkg{fit} 库,用来创建一个“遮盖”点 b 和点 c 的背景点——这个点的矩形边框被 \tikzkw{fit} 命令处理成图中的大小。 1014 | 1015 | \subsection{装饰*(decorations)} 1016 | \label{subsec:deco} 1017 | 最简单的装饰是蛇形线\cite{tikzmanual},需要 \pkg{decorations.pathmorphing} 库: 1018 | \begin{tikzshow} 1019 | \draw[->,decorate,decoration=snake] (0,0) -- (2,0); 1020 | \end{tikzshow} 1021 | 1022 | 通常,我们希望在线段结束就终止装饰(否则会蛇形绘制到线段末尾,这可能引起困惑)。下面是一个复杂的例子: 1023 | \begin{tikzshow} 1024 | \draw[->, decorate, decoration={snake,amplitude=.4mm,segment length=4mm,post length=2mm}] (0,0) -- (3,0) 1025 | node[above, align=center, midway, text width=2.5cm, font=\footnotesize] { 1026 | multiline text controlled by \texttt{text width} option of \textcolor{blue}{node} 1027 | }; 1028 | \end{tikzshow} 1029 | 大部分的参数都比较好理解。\tikzkw{amplitude} 控制波动的强弱,\tikzkw{segment length} 控制一个周期的长度,\tikzkw{post length} 控制在终点之前何处结束装饰。 1030 | 1031 | \subsection{随机数*} 1032 | \tikzz\ 使用 \tikzkw{rand} 来生成从 $-1$ 到 $1$ 的随机数(服从均匀分布);如果使用 \pkg{calc},你还可以在指定坐标时使用 \texttt{(\$...\$)} 并在其中做坐标计算: 1033 | \begin{tikzshow} 1034 | \makeatletter\def\pgfcurrentseed{ 1035 | \pgfmathparse{\pgfmath@rnd@z}\pgfmathresult 1036 | }\makeatother 1037 | \coordinate [label=left:$A$] (A) at (.5*rand,.5*rand); 1038 | \draw (0,0) node[below=1] {\pgfcurrentseed} circle [radius=1]; 1039 | \coordinate [label=left:$B$] (B) at ($ (0,0) + (rand,rand)$); 1040 | \path (0,0) node[above=1] {\pgfcurrentseed}; 1041 | \end{tikzshow} 1042 | 上例中在 \TeX\ 底层中使用 pgf 命令从 \latexline{pgfmath@rnd@z} 中读取当前随机数种子的值,并赋给自定义命令。每次使用 \tikzkw{rand} 命令都会改变随机数种子的值。 1043 | 1044 | \subsection{外部数据文件*} 1045 | 1046 | \section{实用范例} 1047 | \label{sec:tikz-eg} 1048 | 本节通过例子的方式,向读者展示 \tikzz\ 的常用情形。 -------------------------------------------------------------------------------- /LaTeX-cn/chapters/To-Readers.tex: -------------------------------------------------------------------------------- 1 | %!TEX root = ../LaTeX-cn.tex 2 | \chapter{\mbox{写给读者}*} 3 | 4 | 我见过许多朋友初试\LaTeX\ ,他们都感到非常不能理解。主要有以下几个疑问: 5 | \begin{feae} 6 | \item “我平常使用MS Word,似乎也能完成科技排版工作,那么为什么我还需要\LaTeX\ ?”\hfill \textit{——见“为什么需要\LaTeX\ ?”一节。} 7 | \item “\LaTeX\ 看上去不像是排版工具,更像是编程语言。我讨厌用写代码一样的方式来写文章。”\hfill \textit{——文本文件使你更专注于内容而不是排版细节。} 8 | \item “\LaTeX\ 能生成doc文件吗?我平时上交作业/提交汇报时难道使用不便修改pdf文件么?”\hfill \textit{——见“\LaTeX\ 生成的文件格式?”一节。} 9 | \end{feae} 10 | 11 | 本章希望能解决读者的这些疑问,让读者对于\LaTeX\ 有基础的了解,再决定是否需要学习。当然,如果你是被迫进入了\LaTeX\ 这个坑,你也可以阅读本章,或许本章能让你喜欢上\LaTeX\ 呢。 12 | 13 | \section{什么是\LaTeX\ ?} 14 | 先讲\TeX\ (读音类似于“泰赫”)。 15 | 16 | \TeX\ 是Knuth\footnote{Donald Ervin Knuth(高德纳,1938--),现代计算机科学的先驱者,斯坦福大学计算机系的终身荣誉教授,图灵奖和冯诺依曼奖得主,\TeX\ 和 \hologo{METAFONT} 的发明人。同时也是业内经久不衰的著作\emph{The Art of Computer Programming}的作者。}研发的免费、开源的排版系统,其初衷是为了“改变排版界糟糕的排版技术”,并用于排版他的著作《计算机程序设计艺术》。 17 | 18 | \TeX\ 对于读者来说应该是底层的内容,如果你有兴趣,可以阅读Knuth著的\emph{The \TeX\ book},这本书是学习\TeX\ 最权威的材料,没有之一。在本手册的参考文献中也给出了其他\TeX\ 学习的资料。\dpar 19 | 20 | 再讲\LaTeX\ (读音类似于“拉泰赫”)。 21 | 22 | \LaTeX\ 是基于\TeX\ 的宏\footnote{“宏(Macro)”是一个计算机概念,指用单个命令或操作完成一系列底层命令或操作的组合。}集,其作者是Dr.~Lamport\footnote{Leslie Lamport(1941--),美国计算机科学家,图灵奖和冯诺依曼奖得主。};其姓氏开头两个字母La与底层排版系统\TeX\ 相结合,就组成了名称\LaTeX\ 。\LaTeX\ 在\TeX\ 基础上定义了众多的宏命令,使得用户可以更方便地进行排版。本手册的参考文献中就有他的作品。 23 | 24 | \LaTeX\ 现在的版本是\LaTeXe ,意思是2.x版而没到3.0版。错位排版的字母E和字母A暗示了它是排版系统。在无法这样输出的场合,请写作LaTeX和LaTeX~2e。 25 | 26 | \section{\TeX\ 与\LaTeX\ 的优缺点} 27 | \TeX\ 的优点:\qd{稳定、精确、美观}。底层的\TeX\ 系统已经很多年没有进行大的变动了,因为它注重\uline{稳定};\TeX\ 系统可以让你把排版内容通过数字参数的方式写到任意的位置,量化的参数意味着\uline{精确};\TeX\ 底层的空距调整机制,以及对于数学公式近乎完美的支持,则确保了排版效果的\uline{美观}。 28 | 29 | \LaTeX\ 是基于\TeX\ 的,自然不会抛弃上述\TeX\ 的优点。具体包括: 30 | \begin{feai} 31 | \item 排版出来就是印刷品。专业而美观。 32 | \item 易用、全面的数学排版支持,无出其右。 33 | \item 撰写文档时不会被文档排版细节干扰精力。你可以使用之前自定义的模板,或者方便地在文字组织完毕后调整你的模板,以轻松达到满意的效果。 34 | \item 复杂的排版功能支持,比如图表目录、索引、参考文献管理、高度自定义的目录样式、双栏甚至多栏排版。 35 | \item 丰富的功能以及易寻的帮助文档。众多的\LaTeX\ 宏包赋予了\LaTeX\ 强大的扩展功能,它们都自带文档供你学习。 36 | \item 源文件是\RED{文本文件}\footnote{文本文件的另一个优点是易于进行版本控制,比如利用git. 你可以方便地比较你相比上次修改了什么内容,也可以方便地恢复到之前某个时刻的版本。}。你可以在任何设备、任何文本编辑器中书写文档内容,无须担心复制时格式的变化;最后粘贴到同一个tex文件中编译即可。 37 | \item 跨平台,免费,开源。 38 | \end{feai} 39 | 40 | 那缺点呢?我认为主要有: 41 | \begin{feai} 42 | \item 入门门槛高。想要熟练地使用\LaTeX\ 并轻松地编写有自己的风格的文档,不是一两天就能够达到的。 43 | \item 并非“所见即所得”,需要编译才能看到效果。编译查错有时令人恼火。 44 | \item 完善一个自己的模板可能需要很长的时间。尽管\LaTeX\ 原生定义的模板能够满足绝大多数场合的需要。 45 | \item 排版长表格有些复杂。但作为补充,在表格内插入数学公式是非常简单的。 46 | \end{feai} 47 | 48 | \section{为什么需要\LaTeX\ ?} 49 | 你可能基于以下原因学习\LaTeX\ : 50 | \begin{feae} 51 | \item 你的投稿对象要求你使用\LaTeX\ 排版,而不是MS Word——这种情况对没听说过\LaTeX\ 的你来说,真是糟糕透了。 52 | \item 你需要在多个设备上撰写同一份文档。但你发现把内容在多个文档间复制粘贴时,格式总是会出现问题。 53 | \item 你受够了MS Word自带的公式编辑器,或者你觉得购买的插件MathType的效果也不尽如人意。但你经常需要排版公式。 54 | \item 你想参加某个科学竞赛,比如MCM,然后你发现你的朋友用的一个叫\LaTeX\ 的东西似乎还不错。 55 | \item 你想出版一本书,或者投稿你的作品——结果他们告知你如果你使用\LaTeX\ 而不是MS Word攥写原稿件,他们会更快地把作品印刷出来。 56 | \item 呃……也许,你只是喜欢学习新事物? 57 | \end{feae} 58 | 59 | 对于科研工作者或者在校研究生,我认为\LaTeX\ 是非常优秀的工具。如果你是本科生,或者更年轻的群体,你也可以先学习\LaTeX\ ,因为到了研究生和工作中,学习这类基础工具的时间可能就非常有限了。 60 | 61 | \section{MS Word难道不优秀吗?} 62 | 我想说的是,\qd{MS Word当然是优秀的软件}。但是它与\LaTeX\ 的定位不同,所以它们分别适用于不同场合。前者注重简单组织内容,后者注重排版效果。 63 | 64 | 在\uline{排版书籍、科学文档}方面,\LaTeX\ 非常专业、美观,公式支持性极佳,几乎所有参数你都可以量化调整。如果你想\uline{高度自定义一份文件},比如拥有特殊几何、颜色元素,且易于更改模板的简历,\LaTeX\ 可以完全独当一面。在这些这方面,MS Word是无法匹敌\LaTeX\ 的。 65 | 66 | 但是如果你只是为了生成\uline{非正式的文档},比如1--2页的作业稿;或者只是一份\uline{易于别人修改的非科学稿件},比如一份需要同事修改的演讲稿……那你无须使用\LaTeX\ 。这些方面,\LaTeX\ 无疑是比不上MS Word的。 67 | 68 | \section{\LaTeX\ 生成的文件格式?} 69 | 一般广为使用的是pdf,以及dvi的格式。\LaTeX\ 无法生成doc或者docx扩展名文件,因为那是属于MS的商用格式,两者的工作机理也完全不同。 70 | 71 | 所以很遗憾,如果你身处一个要求你“必须提交docx”的环境中,那么\LaTeX\ 对你并不是一个好选择。但我想指出的是,这是稳定、优秀的pdf格式没有得到你身处环境认可的遗憾——pdf也可以方便地添加批注,并在不同设备的显示上有更好的稳定性。 -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-0.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-1.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-10.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-11.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-12.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-13.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-14.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-15.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-16.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-17.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-18.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-19.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-2.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-20.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-21.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-22.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-23.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-24.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-25.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-26.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-27.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-28.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-29.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-3.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-30.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-31.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-32.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-33.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-34.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-35.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-36.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-37.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-38.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-39.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-4.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-40.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-41.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-42.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-43.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-44.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-45.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-46.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-47.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-48.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-49.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-5.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-50.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-51.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-52.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-53.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-54.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-54.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-55.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-56.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-57.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-58.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-59.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-59.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-6.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-60.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-61.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-61.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-62.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-62.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-63.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-63.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-64.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-65.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-65.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-66.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-66.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-67.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-67.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-68.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-68.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-69.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-69.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-7.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-70.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-71.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-71.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-72.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-73.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-73.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-74.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-74.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-75.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-75.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-76.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-77.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-77.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-78.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-78.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-79.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-79.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-8.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-80.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-81.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-81.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-82.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-82.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-83.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-83.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-84.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-84.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-85.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-85.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-86.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-86.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-87.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-88.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-88.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-89.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-89.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-9.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-90.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-91.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-92.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-92.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-93.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-93.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-94.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-94.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-95.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-95.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-96.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-97.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-97.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib-98.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib-98.png -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Py3-matplotlib.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Py3-matplotlib.gif -------------------------------------------------------------------------------- /LaTeX-cn/tikz/Texcharbox.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/Texcharbox.pdf -------------------------------------------------------------------------------- /LaTeX-cn/tikz/enumitemsep.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wklchris/Note-by-LaTeX/5b25fabb3dbe0a0c86f5a9d670d6270ef0b467b9/LaTeX-cn/tikz/enumitemsep.pdf -------------------------------------------------------------------------------- /LaTeX-cn/tikz/geometry-paper.tex: -------------------------------------------------------------------------------- 1 | \begin{tikzpicture}{scale=0.9} 2 | % outer-width & outer-height 3 | \newcommand{\owd}{5}; 4 | \newcommand{\oht}{8}; 5 | % inner-width & inner-height 6 | \newcommand{\iwd}{3}; 7 | \newcommand{\iht}{6}; 8 | % line length 9 | \newcommand{\len}{5} 10 | 11 | % Total Layout 12 | \draw (0,0)--(\owd,0)--(\owd,\oht)--(0,\oht)--(0,0); 13 | \draw[line width=0.06cm] (1,1)--(1+\iwd,1)--(1+\iwd,1+\iht)--(1,1+\iht)--(1,1); 14 | \draw[ultra thick,dotted] (1+\iwd,1+\iht)--(\iwd+\len,1+\iht); 15 | \draw[ultra thick,dotted] (1+\iwd,1)--(\iwd+\len,1); 16 | % Arrow 17 | \draw[<->,line width=0.05cm] (0,1/3*\oht)--(1,1/3*\oht); 18 | \node[label=180:\texttt{left}] at (0,1/3*\oht){}; 19 | \node[label=225:\texttt{(inner)}] at (0,1/3*\oht){}; 20 | \draw[<->,line width=0.05cm] (1+\iwd,1/3*\oht)--(2+\iwd,1/3*\oht); 21 | \node[label=0:\texttt{right}] at (2+\iwd,1/3*\oht){}; 22 | \node[label=315:\texttt{(outer)}] at (2+\iwd,1/3*\oht){}; 23 | \draw[<->,line width=0.05cm] (1+\iwd/2,1)--(1+\iwd/2,0); 24 | \node[label=0:\texttt{bottom}] at (1+\iwd/2,0.5){}; 25 | \draw[<->,line width=0.05cm] (1+\iwd/3,1+\iht)--(1+\iwd/3,\oht); 26 | \node[label=180:\texttt{top}] at (1+\iwd/3,1/2+\iht/2+\oht/2){}; 27 | % Outer Page Label 28 | \node[label=135:\color{blue}{\ttfamily\slshape{paper}}] at (\owd,\oht){}; 29 | \node[label=225:\color{blue}{\ttfamily\slshape{body}}] at (1+\iwd,1+\iht){}; 30 | 31 | % Inner Page 32 | \newcommand{\inn}{\iwd+\len}; 33 | \draw[line width=0.06cm] (\inn,1)--(\inn+\iwd,1)--(\inn+\iwd,1+\iht)--(\inn,1+\iht)--(\inn,1); 34 | \node[label=180:\color{red}{\ttfamily{textheight}}] at (\inn,1+\iht/2){}; 35 | \node[label=90:\color{red}{\ttfamily{textwidth}}] at (\inn+\iwd/2,1){}; 36 | % Margin 37 | \newcommand{\marsep}{0.2} 38 | \newcommand{\marwd}{1} 39 | \newcommand{\mar}{\inn+\iwd+\marsep} 40 | \draw[thick,dashed] (\mar,1)--(\mar+\marwd,1)--(\mar+\marwd,1+\iht)--(\mar,1+\iht)--(\mar,1); 41 | \draw (\mar-\marsep/2,1.5)--(\inn+3/4*\iwd,2); 42 | \node[label=180:\texttt{marginparsep}] at (\inn+3/4*\iwd,2){}; 43 | \draw (\mar+\marwd/2,1)--(\inn+\iwd,-0.3); 44 | \node[label=180:\texttt{marginparwidth}] at (\mar+\marsep/2,-0.5){}; 45 | % Foot 46 | \draw[dashed] (\inn,0.2)--(\inn+\iwd,0.2); 47 | \node[label=90:\color{blue}{\ttfamily\slshape{foot}}] at (\inn+\iwd/2,0){}; 48 | % Head 49 | \draw[dashed] (\inn,1+\iht+0.8)--(\inn+\iwd,1+\iht+0.8); 50 | \draw[dashed] (\inn,1+\iht+0.2)--(\inn+\iwd,1+\iht+0.2); 51 | \node[label=90:\color{blue}{\ttfamily\slshape{head}}] at (\inn+\iwd/2,1+\iht){}; 52 | \draw (\inn,1+\iht+0.1)--(\inn-\len/8,1+\iht+0.5); 53 | \node[label=180:\texttt{headsep}] at (\inn-\len/8,1+\iht+0.5){}; 54 | \draw (\inn+\iwd/4,1+\iht+0.5)--(\inn+\iwd/2,1+\iht+1.2); 55 | \node[label=0:\texttt{headheight}] at (\inn+\iwd/2,1+\iht+1.2){}; 56 | 57 | % Total 58 | \node[label=180:\color{red}{\ttfamily{paperheight}}] at (0,2/3*\oht){}; 59 | \node[label=270:\color{red}{\ttfamily{paperwidth}}] at (\owd/2,0){}; 60 | \node[label=\color{blue}{\ttfamily\slshape{body}}] at (\inn+\iwd/2,1+\iht/2){}; 61 | \node[label=180:\color{blue}{\ttfamily\slshape{marginal}}] at (\mar+\marwd,1+\iht/2){}; 62 | \node[label=225:\color{blue}{\ttfamily\slshape{note}}] at (\mar+\marwd,1+\iht/2){}; 63 | \end{tikzpicture} -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | # 《简单粗暴LaTeX》开源仓库 2 | 3 | 本仓库是手册《简单粗暴LaTeX》的开源仓库。本书涵盖了LaTeX的基本使用场景,以简明的例子来展现各命令的用法。书风如其名。 4 | 5 | **所有PDF内容的下载会发布在本仓库的[release页面](https://github.com/wklchris/Note-by-LaTeX/releases)中。** 当然,读者也可以自行下载本仓库的tex文件,并进行pdf编译。 6 | 7 | ## 公告 8 | 9 | *本公告于2020年9月15日发送;当前版本 v1.6.4-pre,稳定版本为 v1.6.3.* 10 | 11 | - 本手册正在更新到 v2.0.0,预计主要是勘误。手册暂时没有太多新内容需要添加;本人今年也较为忙碌,该更新可能会比较缓慢。 12 | - 本手册的稿件已经交由中国工信出版集团、人民邮电出版社完成出版,出版后的书名在本仓库的书名基础上有改动。纸质出版手册的链接: 13 | * [京东 - 人民邮电出版社](https://item.jd.com/12925624.html) 14 | * [当当 - 人民邮电出版社](http://product.dangdang.com/28989929.html) 15 | * [图灵社区](https://www.ituring.com.cn/book/2685) 16 | 17 | 出版书封面 18 | 19 | ISBN: 978-7-115-53440-8 20 | 21 | *出版书相比本仓库的版本主要有以下不同:内容上,添加了一章“LATEX 环境配置”;叙述上,本人与编辑讨论进行了校对与改动;样式上,全书由出版社进行了重新排版。* 22 | 23 | ## 关于 24 | 25 | 以下是几点关于本仓库的说明: 26 | 27 | - 手册出版后,本仓库继续维护与开源。 28 | - 自从手册基本定稿后,本仓库的维护周期就大约是每年一次,主要是内容订正的汇总。在另行通知前,我预计将继续保持这个维护频率。 29 | --------------------------------------------------------------------------------