diff options
Diffstat (limited to 'Master/texmf-doc/doc/chinese/lnotes/src/misc.tex')
-rw-r--r-- | Master/texmf-doc/doc/chinese/lnotes/src/misc.tex | 322 |
1 files changed, 322 insertions, 0 deletions
diff --git a/Master/texmf-doc/doc/chinese/lnotes/src/misc.tex b/Master/texmf-doc/doc/chinese/lnotes/src/misc.tex new file mode 100644 index 00000000000..eed39c5f1a4 --- /dev/null +++ b/Master/texmf-doc/doc/chinese/lnotes/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 |