\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