From 7f7d595e4d9c90e76aeaa6617d8c7bf8333ae19e Mon Sep 17 00:00:00 2001 From: Louis Stuart Date: Sat, 25 Mar 2017 12:43:29 +0800 Subject: [PATCH] Minor update Fix some typos and mistakes. Supplements for TikZ instructions. --- src/INSTRUCTIONS.md | 2 +- src/Makefile | 4 +- src/chap/chap.01.basics.tex | 2 +- src/chap/chap.05.style.tex | 30 ++++------ src/chap/chap.07.graphic.tex | 112 ++++++++++++++++++++++++++++++----- src/make.bat | 4 +- 6 files changed, 115 insertions(+), 39 deletions(-) diff --git a/src/INSTRUCTIONS.md b/src/INSTRUCTIONS.md index 09f30c5..14b686f 100644 --- a/src/INSTRUCTIONS.md +++ b/src/INSTRUCTIONS.md @@ -89,7 +89,7 @@ cmdname 和 envname 可写多个命令和环境名,以逗号分隔(唯一例 ``` 用 `\rule` 命令画的一个宽度示意符号。 -**command 环境** 用表格生成的一个加框的命令展示环境。多行命令在每行末尾(最后一行除外)加 \\。 +**command 环境** 用表格生成的一个加框的命令展示环境。多行命令在每行末尾(最后一行除外)加 `\\`。 **intro 环境** 每章开头的一个摘要环境。 diff --git a/src/Makefile b/src/Makefile index 1781029..4a7b464 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,10 +1,10 @@ LSHORT = lshort-zh-cn PDF = $(LSHORT).pdf REQUIRE = $(LSHORT).tex $(LSHORT)-style.sty $(LSHORT)-layout.tex $(LSHORT).ist -TEMP = $(LSHORT).{aux,log,idx,ind,ilg,out,toc,los} $(LSHORT)-example.aux +TEMP = $(LSHORT).{aux,log,idx,ind,ilg,out,toc,los,synctex.gz} $(LSHORT)-example.aux TEX = xelatex -MODE = -interaction=nonstopmode +MODE = -interaction=nonstopmode -synctex=1 MAKEIDX = makeindex RM = rm -f diff --git a/src/chap/chap.01.basics.tex b/src/chap/chap.01.basics.tex index df43eb9..60b7ed2 100644 --- a/src/chap/chap.01.basics.tex +++ b/src/chap/chap.01.basics.tex @@ -276,7 +276,7 @@ \subsection{文档类}\label{subsec:classes} \begin{description} \item [\texttt{proc}] 基于 \cls{article} 文档类的一个简单的学术文档模板。 \item [\texttt{slides}] 幻灯格式的文档类,使用无衬线字体。 - \item [\texttt{minimal}] 一个极其精简的文档类,只设定了纸张大小和字号, + \item [\texttt{minimal}] 一个极其精简的文档类,只设定了纸张大小和基本字号, 用作代码测试的最小工作示例(Minimal Working Example)。 \end{description} \hrule diff --git a/src/chap/chap.05.style.tex b/src/chap/chap.05.style.tex index 600384f..bf53c18 100644 --- a/src/chap/chap.05.style.tex +++ b/src/chap/chap.05.style.tex @@ -170,19 +170,21 @@ \subsection{字体编码}\label{subsec:font-encs} \pkg{stix} & Times 风格的字体宏包 \\ \pkg{newtxtext},\pkg{newtxmath} & \pkg{txfonts} 的改进版本,分别设置文本和数学字体 \\ \pkg{newpxtext},\pkg{newpxmath} & \pkg{pxfonts} 的改进版本,分别设置文本和数学字体 \\ - \pkg{mathptmx} & \pkg{psnfss} 组件之一,Times 风格,较为陈旧,不推荐使用 \\ - \pkg{mathpazo} & \pkg{psnfss} 组件之一,Palatino 风格,较为陈旧,不推荐使用 \\ + \pkg{mathptmx} & \pkg{psnfss} 字体宏集之一,Times 风格,较为陈旧,不推荐使用 \\ + \pkg{mathpazo} & \pkg{psnfss} 字体宏集之一,Palatino 风格,较为陈旧,不推荐使用 \\ \pkg{fourier} & fourier 风格数学字体,配合 Utopia 正文字体 \\ \pkg{fouriernc} & fourier 风格数学字体,配合 New Century Schoolbook 正文字体 \\ - \pkg{arev} & Arev 无衬线字体宏包,Bitstream Vera sans 风格 \\ + \pkg{arev} & Arev 无衬线字体宏包,Vera Sans 风格 \\ \pkg{mathdesign} & 配合 Charter/Garamond/Utopia 正文字体的数学字体宏包(Garamond 字体可能需要单独安装) \\ \hline \multicolumn{2}{c}{文本字体宏包} \\ + \multicolumn{2}{l}{\small 以下字体包括传统的 \LaTeX\ 字体格式以及 TrueType / OpenType 格式。} \hline \pkg{dejavu} & DejaVu 开源字体 \\ \pkg{droid} & Droid 开源字体 \\ \pkg{inconsolata} & Inconsolata 开源等宽字体 \\ \pkg{libertine} & Linux Libertine / Linux Biolium 开源字体 \\ + \pkg{roboto} & Roboto 开源无衬线字体 \\ \pkg{sourcesanspro} & Source Sans Pro 开源无衬线字体 \\ \pkg{sourcecodepro} & Source Code Pro 开源等宽字体 \\ \hline @@ -205,7 +207,7 @@ \subsection{使用 \pkg{fontspec} 宏包更改字体 (\texttt{xelatex})}\label{s \pkgindex{fontspec} \cmdindex[fontspec]{setmainfont,setsansfont,setmonofont} \texttt{xelatex} 命令下支持用户调用字体的宏包是 \pkg{fontspec}。宏包提供了几个设置全局字体的命令,设置 \cmd{rmfamily} 等对应命令的默认字体% -\footnote{新版本 \pkg{fontspec} 的命令支持把必选参数 \Arg{font name} 放在可选参数 \Arg{font features} 的前面。}: +\footnote{新版本 \pkg{fontspec} 的命令支持(并且推荐)把必选参数 \Arg{font name} 放在可选参数 \Arg{font features} 的前面。}: \begin{command} \cmd{setmainfont}\oarg{font features}\marg{font name} \\ \cmd{setsansfont}\oarg{font features}\marg{font name} \\ @@ -290,7 +292,7 @@ \subsection{行距}\label{subsec:linespread} \cmd{linespread}\marg{factor} \end{command} -这里的 \Arg{factor} 是在基础行距上而不是字号上乘以一个因子。大部分时候,默认的基础行距是 1.2 倍字号大小, +这里的 \Arg{factor} 是在基础行距上而不是字号上乘以一个因子。大部分时候,默认的基础行距是 1.2 倍字号大小(参考 \cmd{fontsize} 命令), 因此设置 1.5 倍行距的命令 \cmd{line\-spread}\marg*{1.5} 意味着最终行距为 1.8 倍的字号大小。 \cmdindex{selectfont} @@ -335,22 +337,12 @@ \subsection{段落格式}\label{subsec:par-shape} \cmdindex{indent,noindent} \LaTeX\ 默认在段落开始时缩进,长度为你用上述命令设置的 \cmd{parindent}。如果你在某一段不想使用缩进,可使用某一段开头使用 -\begin{command} -\cmd{noindent} -\end{command} -命令。相反地, -\begin{command} -\cmd{indent} -\end{command} -命令强制开启一段首行缩进的段落。多个 \cmd{indent} 命令可以累加缩进量。 +\cmd{noindent} 命令。相反地,\cmd{indent} 命令强制开启一段首行缩进的段落。多个 \cmd{indent} 命令可以累加缩进量。 \pkgindex{indentfirst} \LaTeX\ 还默认\textbf{在 \cmd{chapter}、\cmd{section} 等章节标题命令之后的第一段不缩进}% \footnote{\pkg{ctex} 宏包和文档类默认按照中文习惯保持标题后第一段的首行缩进。}。 -如果不习惯这种设定,可以调用 \pkg{indent\-first} 宏包: -\begin{verbatim} -\usepackage{indentfirst} -\end{verbatim} +如果不习惯这种设定,可以调用 \pkg{indent\-first} 宏包,令第一段的首行缩进照常。 \cmdindex{parskip} 段落间的垂直间距为 \cmd{parskip},如设置段落间距在 \texttt{0.8ex} 到 \texttt{1.5ex} 变动: @@ -587,9 +579,9 @@ \subsection{基本的页眉页脚样式}\label{subsec:basic-pagesyle} \begin{tabularx}{0.8\textwidth}{lX} \hline \texttt{empty} & 页眉页脚为空 \\ - \texttt{plain} & 页眉为空,页脚为页码。(article 和 report 文档类默认;book 文档类的每章第一页也为 plain 格式) \\ + \texttt{plain} & 页眉为空,页脚为页码。(\cls{article} 和 \cls{report} 文档类默认;\cls{book} 文档类的每章第一页也为 plain 格式) \\ \hline - \texttt{headings} & 页眉为章节标题和页码,页脚为空。(book 文档类默认) \\ + \texttt{headings} & 页眉为章节标题和页码,页脚为空。(\cls{book} 文档类默认) \\ \texttt{myheadings} & 页眉为页码及 \cmd{markboth} 和 \cmd{markright} 命令手动指定的内容,页脚为空。\\ \hline \end{tabularx} diff --git a/src/chap/chap.07.graphic.tex b/src/chap/chap.07.graphic.tex index 2e2b398..9692245 100644 --- a/src/chap/chap.07.graphic.tex +++ b/src/chap/chap.07.graphic.tex @@ -23,7 +23,7 @@ \section{绘图语言简介}\label{sec:pict-lang} \item \TikZ\ \& \pkg{pgf} \par 德国的 Till Tantau 在开发著名的 \LaTeX\ 幻灯片文档类 \cls{beamer} 时一并开发了绘图宏包 \pkg{pgf}, 目的是令其能够在 \texttt{pdflatex} 或 \texttt{xelatex} 等不同的编译命令下都能使用。 - \TikZ\ 是在 \pkg{pgf} 基础上封装的一个宏包,提供了方便的绘图命令,绘图能力不输 PSTricks。 + \TikZ\ 是在 \pkg{pgf} 基础上封装的一个宏包,采用了类似 \hologo{METAPOST} 的语法,提供了方便的绘图命令,绘图能力不输 PSTricks。 \item \hologo{METAPOST} \& Asymptote \par \hologo{METAPOST} 脱胎于高德纳为 \TeX\ 配套开发的字体生成程序 \hologo{METAFONT}, @@ -36,7 +36,7 @@ \section{绘图语言简介}\label{sec:pict-lang} 其复杂程度已远远超出入门手册的范围(\TikZ\ 的帮助文档有上千页之厚)。 对此感兴趣的读者需要自行查阅帮助手册,或者到互联网上参考现成的范例。 -\section{\TikZ}\label{sec:tikz} +\section{\TikZ\ 绘图语言}\label{sec:tikz} \index{TikZ@\TikZ} \pkgindex{tikz} @@ -46,15 +46,16 @@ \section{\TikZ}\label{sec:tikz} \footnote{\texttt{latex + dvipdfmx} 编译方式要在 \pkg{tikz} 宏包之前调用 \pkg{graphicx} 宏包并指定 \texttt{dvipdfmx} 选项。}: \begin{command} \cmd{tikz}\oarg*{\ldots} \Arg{tikz code}\texttt{;} \\[1ex] +\cmd{tikz}\oarg*{\ldots} \marg*{\Arg{tikz code 1}\texttt{;} \Arg{tikz code 2}\texttt{;} \ldots} \\[1ex] \cmd{begin}\marg*{tikzpicture}\oarg*{\ldots} \\ \Arg{tikz code 1}\texttt{;} \\ -\Arg{tikz code 2}\texttt{;} \\ +\Arg{tikz code 2}\texttt{;}\ldots \\ \ldots \\ \cmd{end}\marg*{tikzpicture} \end{command} 前一种用法为 \cmd{tikz} 带单条绘图命令,以分号结束,一般用于在文字之间插入简单的图形; -后一种用法较为常见,使用多条绘图命令,可以在 \env{figure} 等浮动体中使用。 +后两种用法较为常见,使用多条绘图命令,可以在 \env{figure} 等浮动体中使用。 \subsection{\TikZ\ 坐标和路径}\label{subsec:tikz-path} @@ -78,6 +79,18 @@ \subsection{\TikZ\ 坐标和路径}\label{subsec:tikz-path} \end{tikzpicture} \end{example} +坐标的表示形式还包括“垂足”形式: +\begin{example} +\begin{tikzpicture} +\coordinate (S) at (2,2); +\draw[gray] (-1,2) -- (S); +\draw[gray] (2,-1) -- (S); +\draw[red] (0,0) -- (0,0 -| S); +\draw[blue] (0,0) -- (0,0 |- S); +\end{tikzpicture} +\end{example} + + \TikZ\ 最基本的路径为两点之间连线,如 \texttt{(\Arg{$x_1$},\Arg{$y_1$}) -{}- (\Arg{$x_2$},\Arg{$y_2$})},可以连用表示多个连线(折线)。 连续使用连线时,可以使用 \texttt{cycle} 令路径回到起点,生成闭合的路径。 \begin{example} @@ -101,13 +114,39 @@ \subsection{\TikZ\ 坐标和路径}\label{subsec:tikz-path} \end{example} \begin{itemize} - \item 直角、圆弧: + \item 直角、圆弧、椭圆弧: \end{itemize} \begin{example} \begin{tikzpicture} \draw (0,0) |- (1,1); \draw (1,0) -| (2,1); \draw (4,0) arc (0:135:1); +\draw (6,0) arc (0:135:1 and 0.5); +\end{tikzpicture} +\end{example} + +\begin{itemize} + \item 正弦、余弦曲线(四分之一个周期): +\end{itemize} +\begin{example} +\begin{tikzpicture} +\draw (0,0) sin (1.57,1); +\draw (0,1) sin (1.57,0); +\draw (2,1) cos (3.57,0); +\draw (2,0) cos (3.57,1); +\end{tikzpicture} +\end{example} + +\begin{itemize} + \item 抛物线,用 \texttt{bend} 控制顶点: +\end{itemize} +\begin{example} +\begin{tikzpicture} +\draw (0,0) parabola (1,2); +\draw (2,0) parabola + bend (2.25,-0.25) (3,2); +\draw (4,0) parabola + bend (4.75,2.25) (5,2); \end{tikzpicture} \end{example} @@ -154,7 +193,18 @@ \subsection{\TikZ\ 绘图命令和参数}\label{subsec:tikz-draw} 绘图参数可作为可选参数用在 \env{tikzpiture} 环境或 \cmd{tikz} 命令时,参数会影响到所有具体的绘图命令; 用在单个绘图命令 \cmd{draw}、\cmd{filldraw} 等时,只对这个命令起效。 -\TikZ 有数不清的绘图参数,这些参数令 \TikZ\ 能够绘制丰富多彩的图像,同时也令 \TikZ\ 易学难精。 +\envindex[tikz]{scope} +\TikZ\ 还提供了 \env{scope} 环境,令一些绘图参数在局部起效: +\begin{example} +\begin{tikzpicture} +\draw (0,0) rectangle (2.5, 2.5); +\begin{scope}[fill=gray,scale=0.5] +\filldraw (0,0) rectangle (2.5, 2.5); +\end{scope} +\end{tikzpicture} +\end{example} + +\TikZ\ 有数不清的绘图参数,这些参数令 \TikZ\ 能够绘制丰富多彩的图像,同时也令 \TikZ\ 难以精通。 本手册仅总结常用的一些绘图参数,见表 \ref{tbl:tikz-options}。 \begin{table}[htp] @@ -166,7 +216,7 @@ \subsection{\TikZ\ 绘图命令和参数}\label{subsec:tikz-draw} 为线条(\cmd{draw})或填充(\cmd{fill})指定颜色,\Arg{color} 使用颜色名或是 \pkg{xcolor} 的混合颜色语法。 往往可以不写 \texttt{color=} 直接写颜色名称。 \item \texttt{fill=\Arg{color} / draw=\Arg{color}} \par - 分别给 \cmd{filldraw} 指定填充和描边的颜色。也可分别给 \cmd{fill} 和 \cmd{draw} 命令使用。 + 分别给 \cmd{filldraw} 指定填充和描边的颜色。也可给 \cmd{fill} 和 \cmd{draw} 命令使用。 不带参数直接使用 \texttt{fill} 和 \texttt{draw},相当于用默认颜色。 \end{itemize} \hrule @@ -210,6 +260,8 @@ \subsection{\TikZ\ 文字结点}\label{subsec:tikz-node} \begin{command} \cmd{node}\oarg{options} \texttt{(\Arg{name})} \texttt{at (\Arg{coordinate})} \marg{text}\texttt{;} \end{command} +\texttt{(\Arg{name})} 为结点命名,类似 \cmd{coordinate};\texttt{at (\Arg{coordinate})} 指定结点的位置。 +这两者和前面的 \Arg{options} 都可以省略,只有 \Arg{text} 是必填的。 \begin{example} \begin{tikzpicture} \node (A) at (0,0) {A}; @@ -247,7 +299,7 @@ \subsection{\TikZ\ 文字结点}\label{subsec:tikz-node} \hrule \end{table} -\cmd{node} 命令不仅为文字结点的位置命名(类似 \cmd{coordinate} 命令),在 \cmd{draw} 等命令中还可以使用某个结点的相对位置, +\cmd{node} 命令不仅为文字结点的位置命名,在 \cmd{draw} 等命令中还可以使用某个结点的相对位置, 以“东南西北”的方式命名: \begin{example} @@ -272,8 +324,8 @@ \subsection{\TikZ\ 文字结点}\label{subsec:tikz-node} \end{tikzpicture} \end{example} -除了 \cmd{node} 命令之外,\cmd{coordinate} 也可以通过参数为某个位置添加文字。 -我们最后举一个较为复杂的例子,综合前面介绍过的各种路径、形状、文字结点和参数设置。 +除了 \cmd{node} 命令之外,\cmd{coordinate} 也可以通过参数为某个位置添加文字(label)。 +在此举一个较为复杂的例子,综合前面介绍过的各种路径、形状、文字结点和参数设置。 \begin{sourcecode}[htp] \begin{Verbatim} @@ -282,8 +334,8 @@ \subsection{\TikZ\ 文字结点}\label{subsec:tikz-node} \draw[-stealth,line width=0.2pt] (0,-0.5) -- (0,2.5); \coordinate (a) at (0.5,1.9); \coordinate (b) at (4,1.2); -\coordinate[label=below:$a$] (a0) at (0.5,0); -\coordinate[label=below:$b$] (b0) at (4,0); +\coordinate[label=below:$a$] (a0) at (a |- 0,0); +\coordinate[label=below:$b$] (b0) at (b |- 0,0); \filldraw[fill=gray!20,draw,thick] (a0) -- (a) .. controls (1,2.8) and (2.7,0.4) .. (b) -- (b0) -- cycle; \node[above right,outer sep=0.2cm, rounded corners, @@ -297,8 +349,8 @@ \subsection{\TikZ\ 文字结点}\label{subsec:tikz-node} \draw[-stealth,line width=0.2pt] (0,-0.5) -- (0,2.5); \coordinate (a) at (0.5,1.9); \coordinate (b) at (4,1.2); -\coordinate[label=below:$a$] (a0) at (0.5,0); -\coordinate[label=below:$b$] (b0) at (4,0); +\coordinate[label=below:$a$] (a0) at (a |- 0,0); +\coordinate[label=below:$b$] (b0) at (b |- 0,0); \filldraw[fill=gray!20,draw,thick] (a0) -- (a) .. controls (1,2.8) and (2.7,0.4) .. (b) -- (b0) -- cycle; \node[above right,outer sep=0.2cm, rounded corners, @@ -309,4 +361,36 @@ \subsection{\TikZ\ 文字结点}\label{subsec:tikz-node} \caption{\TikZ\ 绘图示例源代码和效果。}\label{code:tikz-example} \end{sourcecode} +\subsection{在 \TikZ\ 中使用循环} + +\cmdindex[tikz]{foreach} +\TikZ\ 通过 \pkg{pgffor} 功能宏包实现了简单的循环功能,语法为: +\begin{command} +\cmd{foreach} \cmd{a} \texttt{in} \marg{list} \marg{commands} +\end{command} +上述语法定义了 \cmd{a} 为变量,在 \marg{commands} 中使用 \cmd{a} 完成循环。 + +\Arg{list} 可以直接将所有值写出来,如 1,2,3,4;也可以写成省略形式,如 1,2,\ldots,10。 +\begin{example} +\begin{tikzpicture} +\draw (0,0)--(5,0); +\foreach \i in {0.0,0.1,...,5.0} + {\draw[very thin] + (\i,0)--(\i,0.15);} +\foreach \I in {0,1,2,3,4,5} + {\draw (\I,0)--(\I,0.25) + node[above] {\I};} +\end{tikzpicture} +\end{example} + +\cmd{foreach} 还可使用变量对参与循环: +\begin{example} +\begin{tikzpicture} +\foreach \n/\t in + {0/\alpha,1/\beta,2/\gamma} + {\node[circle,fill=lightgray,draw] + at (\n,0) {$\t$};} +\end{tikzpicture} +\end{example} + \endinput \ No newline at end of file diff --git a/src/make.bat b/src/make.bat index ebb8cad..aef1674 100644 --- a/src/make.bat +++ b/src/make.bat @@ -1,12 +1,12 @@ @echo off set LSHORT=lshort-zh-cn set PDF=%LSHORT%.pdf -set TEMP=%LSHORT%.aux %LSHORT%.log %LSHORT%.idx %LSHORT%.ind %LSHORT%.ilg %LSHORT%.out %LSHORT%.toc %LSHORT%.los %LSHORT%-example.aux +set TEMP=%LSHORT%.aux %LSHORT%.log %LSHORT%.idx %LSHORT%.ind %LSHORT%.ilg %LSHORT%.out %LSHORT%.toc %LSHORT%.los %LSHORT%-example.aux %LSHORT%.synctex.gz if "%1"=="clean" goto clean set TEX=xelatex -set MODE=-interaction=nonstopmode +set MODE=-interaction=nonstopmode -synctex=1 set MAKEINDEX=makeindex %TEX% %MODE% %LSHORT%