summaryrefslogtreecommitdiff
path: root/info/latex-notes-zh-cn/src/misc.tex
diff options
context:
space:
mode:
Diffstat (limited to 'info/latex-notes-zh-cn/src/misc.tex')
-rw-r--r--info/latex-notes-zh-cn/src/misc.tex322
1 files changed, 322 insertions, 0 deletions
diff --git a/info/latex-notes-zh-cn/src/misc.tex b/info/latex-notes-zh-cn/src/misc.tex
new file mode 100644
index 0000000000..eed39c5f1a
--- /dev/null
+++ b/info/latex-notes-zh-cn/src/misc.tex
@@ -0,0 +1,322 @@
+\chapter{杂项}
+
+\section{超链接}
+\label{sec:hyperlink}
+
+\verb|hyperref|~宏包\citep{Rahtz_2006}提供了一些超链接功能。它给文档内部的交叉引用和参考文献自动加上了超链接,还提供了几个命令。
+
+\verb|\hyperref|~命令对已经定义的label进行简单包装,加上文字描述。
+
+\begin{code}
+\usepackage{hyperref}
+...
+\label{sec:hyperlink}
+...
+例如\ref{sec:hyperlink}是编号形式的链接,而\hyperref[sec:hyperlink]{这个链接}是文字形式的链接,都指向本节开始。
+\end{code}
+
+\begin{out}
+例如\ref{sec:hyperlink}是编号形式的超链接,而\hyperref[sec:hyperlink]{这个链接}则是文字形式,都指向本节开始。
+\end{out}
+
+\verb|\url|~和~\verb|\href|~命令可以用来定义外部链接,后者有文字描述。
+
+\begin{code}
+\url{http://www.dralpha.com/}
+\href{http://www.dralpha.com/}{包老师的主页}
+\end{code}
+
+\begin{out}
+\url{http://www.dralpha.com/}
+
+\href{http://www.dralpha.com/}{包老师的主页}
+\end{out}
+
+%hyperref选项
+
+\section{长文档}
+当文档很长时,我们可以把它分为多个文件,然后在主控文档的正文中引用它们。注意~\verb|\include|~命令会新起一页,如果不想要新页可以改用~\verb|\input|~命令。
+\begin{code}
+%master.tex
+\begin{document}
+\include{chapter1.tex}
+\include{chapter2.tex}
+...
+\end{document}
+\end{code}
+
+当文档很长时,编译一遍也会很花时间,我们可以用~\verb|syntonly|~宏包。这样编译时就只检查语法,而不生成结果文件。
+\begin{code}
+\usepackage{syntonly}
+...
+\syntaxonly
+\end{code}
+
+\section{参考文献}
+在文档中,我们经常要引用参考文献(bibliography)。\LaTeX~提供的~\verb|thebibliography|~环境和~\verb|\bibtem|~命令可以用来定义参考文献条目及其列表显示格式,\verb|cite|~命令用来在正文中引用参考文献条目。这种方法把内容和格式混在一起,用户需要为每个条目设置格式,很繁琐且易出错。
+
+\subsection{BibTeX}
+1985年,~Oren Patashnik\footnote{Wiki~上说他是~Knuth~的学生,我发现他不在~Knuth~的博士生列表上,而在姚期智的博士生列表上,也许他是~Knuth~的硕士生。}和~Lamport~开发了~\BibTeX\citep{Patashnik_1988},其详细使用方法请参阅~Nicolas Markey~的《Tame the BeaST: The B to X of BibTeX》\citep{Markey_2005}
+
+\BibTeX~把参考文献的数据放在一个~\verb|.bib|~文件中,显示格式放在~\verb|.bst|~文件中。普通用户一般不需要改动~\verb|.bst|,只须维护~\verb|.bib|~数据库。
+
+一个~\verb|.bib|~文件可以包含多个参考文献条目(entry),每个条目有类型、关键字,以及题目、作者、年份等字段。常用条目类型有~article、~book、conference、manual、misc、techreport~等。每种类型都有一些自己的规定字段和可选字段,字段之间用逗号分开。数据库中每个条目的关键字要保持唯一,因为引用时要用到它们。
+
+下例显示了一个条目,它的类型是~\verb|manual|,关键字是~\verb|Markey_2005|。~\verb|.bib|~文件可以用普通文本编辑器来编辑,也可以用专门的文献管理软件来提高效率。包老师推荐~\href{http://jabref.sourceforge.net/}{JabRef}。
+
+\begin{code}
+@MANUAL{Markey_2005,
+ title = {Tame the BeaST: The B to X of BibTeX},
+ author = {Nicolas Markey},
+ year = {2005},
+ url = {http://www.ctan.org/tex-archive/info/bibtex/
+ tamethebeast/}
+}
+\end{code}
+
+有了数据库,我们可以象下面这样引用一个条目。
+\begin{demo}
+请参阅\cite{Markey_2005}。
+\end{demo}
+
+前文中我们提到含有交叉引用的文档需要编译两遍。含有参考文献的文档更麻烦,它需要依次执行~\verb|latex、bibtex、latex、latex|~等四次编译操作。
+
+\begin{enumerate}
+ \item 第一遍~\verb|latex|~只把条目的关键字写到中间文件~\verb|.aux|~中去。
+ \item \verb|bibtex|~根据\verb|.aux、.bib、.bst|~生成一个~\verb|.bbl|~文件,即参考文献列表。它的内容就是~\verb|thebibliography|~环境和一些~\verb|\bibtem|~命令。
+ \item 第二遍~\verb|latex|~把交叉引用写到~\verb|.aux|~中去。
+ \item 第三遍~\verb|latex|~则在正文中正确地显示引用。
+\end{enumerate}
+
+\begin{figure}[htbp]
+\centering
+\begin{tikzpicture}
+ \node[box] (tex) {.tex};
+ \node[box, right=4 of tex] (aux) {.aux};
+ \node[box, right=6 of aux] (bbl) {.bbl};
+ \node[box, above=1.5 of aux] (bib) {.bib};
+ \node[box, below=1.5 of aux] (bst) {.bst};
+ \path (tex) edge [arrow] node[auto] {latex} (aux)
+ (aux) edge [arrow] node[auto] {bibtex} (bbl)
+ (bib.east) edge [rloop] (bst);
+\end{tikzpicture}
+\caption{\BibTeX~的编译}
+\label{fig:bibtex}
+\end{figure}
+
+注意在长文档中使用参考文献时,应该用~\verb|latex|~编译主控文档,而用~\verb|bibtex|~编译子文档。
+
+\begin{code}
+latex master(.tex)
+bibtex chapter1(.tex)
+latex master(.tex)
+latex master(.tex)
+\end{code}
+
+\subsection{natbib}
+参考文献的引用通常有两种样式:作者-年份和数字。\LaTeX~本身只支持数字样式,而~\verb|natbib|~宏包\citep{Daly_2007}则同时支持这两种样式。
+
+使用~\verb|natbib|~宏包时,我们首先要引用宏包;其次设置文献列表样式和引用样式,每种列表样式都有自己的缺省引用样式,所以后者可选;然后指定参考文献数据库。
+\begin{code}
+\usepackage{natbib}
+...
+\begin{document}
+\bibliographystyle{plainnat}
+\setcitestyle{square,aysep={},yysep={;}}
+\bibliography{mybib.bib}
+...
+\end{document}
+\end{code}
+
+\verb|natbib|~提供了三种列表样式:plainnat、abbrvnat、unsrtnat。前两种都是作者-年份样式,文献列表按作者-年份排序,后者会使用一些缩写(比如作者的~first name);unsrtnat~是数字样式,文献列表按引用顺序排序。
+
+\verb|\setcitestyle|~命令可以用来改变引用样式的设置,其选项见~\Fref{tab:citestyle}。
+
+\begin{table}[htbp]
+\caption{参考文献引用样式选项}
+\label{tab:citestyle}
+\centering
+\begin{tabular}{ll}
+ \toprule
+ 引用模式 & authoryear、numbers、super \\
+ 括号 & round、square、open={char},close={char} \\
+ 引用条目分隔符 & 分号、逗号、citesep={char} \\
+ 作者年份分隔符 & aysep={char} \\
+ 共同作者年份分隔符 & yysep={char} \\
+ 注解分隔符 & notesep={text} \\
+ \bottomrule
+\end{tabular}
+\end{table}
+
+注意在长文档中,每个含参考文献的子文档都需要分别设置列表样式,并指定数据库。
+
+\verb|natbib|~提供了多种引用命令,其中最基本的是~\verb|\citet|~和~\verb|\citep|~,它们在不同引用模式下效果不同。一般不推荐使用~\LaTeX~本身提供的~\verb|\cite|,因为它在作者-年份模式下和~\verb|\citet|~一样,在数字模式下和~\verb|\citep|~一样。
+
+作者-年份模式下引用命令的效果如下。
+\setcitestyle{authoryear}
+\begin{demo}
+参阅\cite{Daly_2007}\\
+参阅\citet{Daly_2007}\\
+参阅\citep{Daly_2007}
+\end{demo}
+
+数字模式下引用命令的效果如下。
+\setcitestyle{numbers}
+\begin{demo}
+参阅\cite{Daly_2007}\\
+参阅\citet{Daly_2007}\\
+参阅\citep{Daly_2007}
+\end{demo}
+
+上标模式下引用命令的效果如下。
+\setcitestyle{super}
+\begin{demo}
+参阅\cite{Daly_2007}\\
+参阅\citet{Daly_2007}\\
+参阅\citep{Daly_2007}
+\end{demo}
+
+另外还有一些引用命令,如~\verb|\citetext、\citenum、\citeauthor|、~\verb|\citeyear|~等,此处不赘述。
+
+\section{索引}
+\verb|makeidx|~宏包提供了索引功能。应用它时,我们首先需要在文档序言部分引用宏包,并使用~\verb|makeindex|~命令;其次在正文中需要索引的地方定义索引,注意索引关键字在全文中须保持唯一;最后在合适的地方(一般是文档末尾)打印索引。
+
+\begin{code}
+\usepackage{makeidx}
+\makeindex
+...
+\begin{document}
+\index{索引关键字}
+...
+\printindex
+\end{document}
+\end{code}
+
+当编译含索引的文档时,用户需要执行~\verb|latex、makeindex、latex|~等三次编译操作。
+
+\begin{enumerate}
+ \item 第一遍~\verb|latex|~把索引条目写到一个~\verb|.idx|~文件中去。
+ \item \verb|makeindex|~把~\verb|.idx|~排序后写到一个~\verb|.ind|~文件中去。
+ \item 第二遍~\verb|latex|~在~\verb|\printindex|~命令的地方引用~\verb|.ind|~的内容,生成正确的DVI。
+\end{enumerate}
+
+\begin{figure}[htbp]
+\centering
+\begin{tikzpicture}
+ \node[box] (tex) {.tex};
+ \node[box, right=4 of tex] (idx) {.idx};
+ \node[box, right=7 of idx] (ind) {.ind};
+ \node[box, right=6 of ind] (dvi) {.dvi};
+ \node[box, above=1.5 of ind] (tex1) {.tex};
+ \node[right=1 of ind] (point) {};
+ \path (tex) edge [arrow] node[auto] {latex} (idx)
+ (idx) edge [arrow] node[auto] {makeindex} (ind)
+ (ind) edge [arrow] node[auto] {latex} (dvi)
+ (tex1.east) edge [rloop] (point);
+\end{tikzpicture}
+\caption{索引的编译}
+\label{fig:makeidx}
+\end{figure}
+
+\section{页面布局}
+在~\LaTeX~中用户可以通过~\verb|\pagestyle|~和~\verb|\pagenumbering|~命令来设置页眉(header)、页脚(footer)的样式和内容。页面样式有以下四种。
+
+\begin{table}[htbp]
+\caption{\LaTeX~页面样式}
+\centering
+\begin{tabular}{ll}
+ \toprule
+ \texttt{empty} & 页眉、页脚空白 \\
+ \texttt{plain} & 页眉空白,页脚含居中页码 \\
+ \texttt{headings} & 页脚空白,页眉含章节名和页码 \\
+ \texttt{myheadings} & 页脚空白,页眉含页码和用户自定义信息 \\
+ \bottomrule
+\end{tabular}
+\end{table}
+
+\verb|fancyhdr|\citep{Oostrum_2004}宏包提供了更灵活的控制。我们可以用以下代码定制页眉、页脚的内容,以及页眉下方、页脚上方的横线。
+
+\begin{code}
+\usepackage{fancyhdr}
+...
+\pagestyle{fancy} %fancyhdr宏包新增的页面风格
+\lhead{左擎苍}
+\chead{三个代表}
+\rhead{右牵黄}
+\lfoot{左青龙}
+\cfoot{八荣八耻}
+\rfoot{右白虎}
+\renewcommand{\headrulewidth}{0.4pt}
+\renewcommand{\footrulewidth}{0.4pt}
+\end{code}
+
+\ \\
+\begin{tikzpicture}
+\draw (0,0) rectangle (36,10);
+\node at(2,9) {左擎苍};
+\node at(18,9) {三个代表};
+\node at(34,9) {右牵黄};
+\draw (.5,8)--(35.5,8);
+\node at(18,5) {和谐社会};
+\draw (.5,2)--(35.5,2);
+\node at(2,1) {左青龙};
+\node at(18,1) {八荣八耻};
+\node at(34,1) {右白虎};
+\end{tikzpicture}
+
+用户可以在页眉、页脚中使用一些~\LaTeX~变量,比如分别代表页码和章节编号的~\verb|\thepage、\thechapter、\thesection|;代表章节起始单词(Chapter、Section等)的~\verb|\chaptername、\sectionname|~等。
+
+这些变量组合起来可以构成复合标记~\verb|\leftmark|~和~\verb|\rightmark|~。当文档奇偶页面布局不同时,我们可以使用以下方法为奇偶页分别设置页眉、页脚。\verb|fancyhdr|~宏包会自动把每章起始页的样式设为~\verb|plain|,若想去掉页脚中间的页码,可以重定义~\verb|plain|~样式。
+
+\begin{code}
+\pagestyle{fancy}
+\fancyhf{} %清空页眉页脚
+\fancyhead[LE,RO]{\thepage} %偶数页左,奇数页右
+\fancyhead[RE]{\leftmark} %偶数页右
+\fancyhead[LO]{\rightmark} %奇数页左
+\fancypagestyle{plain}{ %重定义plain页面样式
+ \fancyhf{}
+ \renewcommand{\headrulewidth}{0pt}
+}
+\end{code}
+
+\ \\
+\begin{tikzpicture}
+\draw (0,0) rectangle (36,10);
+\node at(2.5,9) {3.2 节名};
+\node at(35,9) {17};
+\draw (.5,8)--(35.5,8);
+\node at(18,5) {奇数页};
+\end{tikzpicture}
+
+\ \\
+\begin{tikzpicture}
+\draw (0,0) rectangle (36,10);
+\node at(1,9) {18};
+\node at(32,9) {Chapter 3 章名};
+\draw (.5,8)--(35.5,8);
+\node at(18,5) {偶数页};
+\end{tikzpicture}
+
+Lamport当初设计~\LaTeX~时把页面布局变量的定义方式搞得比较晦涩,用户在重定义~\verb|\leftmark|~和~\verb|\rightmark|~时,不能直接用~\verb|\renewcommand|~的方法,而要用另外两个命令。
+
+\begin{code}
+\markboth{main-mark}{sub-mark}
+\markright{sub-mark}
+\end{code}
+
+\verb|\leftmark|~即~main-mark,是一种高层次标记,在~article~文档类中它包含~section~的信息,在~report~和~book~则包含~chapter~的信息;\verb|rightmark|~则是一种低层次标记,在~article~中包含~subsection~信息,在~report~和~book~中包含~section~信息。
+
+比如在~\verb|book|~文档类中,章节标记是通过下面的方法定义的,其中的~\verb|#1|~指的是章节的名字。
+
+\begin{code}
+\renewcommand\chaptermark[1]{\markboth{\chaptername \thechapter.
+ #1}{}}
+\renewcommand\sectionmark[1]{\markright{\thesection. #1}}
+\end{code}
+
+%\section{演示文档}
+
+\bibliographystyle{unsrtnat}
+\bibliography{reading}
+\newpage