LaTeX 第三课:真正的文档

本期的主要内容有:

  • 文档的结构化
  • 标签与交叉引用
  • 如何获取帮助

文档的结构化

在上期中我们已经学会了如何用 LaTeX 写作一篇基本的文章。但我们有时候更需要的是一个结构化的文档。它可以分不同的小节,小节与小节之间还需要有不同的层次,比如第几大点第几小点(像领导讲话一样)。如果我们在写作的时候能有一个提纲,那么写作的思路就会更加清晰,文档也更加简洁易懂。

在 ctexart/article 文类中,LaTeX 提供了如下的小标题级别和对应的命令:

  1. section(\section{节标题})
  2. subsection(\subsection{小节标题})
  3. subsubsection(\subsubsection{小小节标题})
  4. paragraph(\paragraph{段落标题})
  5. subparagraph(\subparagraph{小段落标题})

其中前三个级别是有编号的,后两个则没有编号,效果大概是这样的:

在一般情况下,三级编号五级结构已经足够大家使用了,太深的组织结构会让读者觉得很乱,也会把文字打得很散,不利于表现主题。在编译的过程中, 引擎会自动为这个节标题进行编号。这是一个非常好用的特性。如果你的文章有十个 section,你想在第二个和第三个之间加入一个 section ,只需要直接往里面加就行了,完全不用考虑编号的事。再比如有几个 section 你想要加深一级变成 subsection,再合并成一个 section,在 LaTeX 这种组织结构下可以很轻松地完成。如果是手打的编号的话,大家可以自行想象一下编号改动的工作量,我反正是不敢想。

在编制目录的时候(下期会讲到),我们有时候不希望给某一节编号,也不想它进入目录。这个时候只需要在命令后加上一个星号(*)就可以了,比如 \section*{不编目的小节}。

在 ctexrep/report 和 ctexbook/book 文类中,会有更高的音节级别,比如 part,chapter 之类。chapter 在学术论文的写作中还算常用,比 section 高一个级别,如果篇幅比较大的话可以更有效地组织文档。写作学术论文的时候一般会有模板可以使用,这时只要按照模板的说明操作就可以了,这里列出仅供参考。

标签与交叉引用

在行文过程中,我们可能需要引用自己前面写过的结果。比如“在第一章第5节我们提到……”“请参见我在第327页做的推导……”之类的。在这种情况下,自动化的需求是非常高的。如果说我手动输入了这些数字,那么一旦文档结构有变动,产生的工作量将非常可观。这些东西你还不能不改,因为你不改的话完全就是错的,本来想引用第3节结果写的是“见第2节”。但这在 LaTeX 中完全不是问题。我们可以用标签(label)交叉引用(cross reference)来解决这个问题。

标签和交叉引用的基本思路是这样的。首先把我需要引用的章节用 \label{标签名称} 进行标记,然后在需要引用它的时候用 \ref{标签名称} 进行引用。这样一来,引擎在进行编译的时候就需要编译两次:第一次生成所有章节的编号,第二次再把这些编号填充到相应的位置。所以如果使用了这个命令但只编译了一次,这些引用的地方都将显示为问号。这对所有交叉引用都是一样的。道理很简单,引擎每编译一次就把整个源码读一遍,而只读一遍是没有办法知道被引用的章节编号是多少的(尤其是在前面引用后面的章节)。所以引擎在读第一遍的时候就把需要引用的地方都做上标记,第二次再来处理。下面我们来看一个使用的例子:

如果这个时候我在这两节之间加入了新的一节,LaTeX 介绍就变成了第3节,那么我们不需要复杂的操作,该写什么写什么就行了。例子如下:

大家可以注意到,除了第6行和第7行之外,我什么也没有改。这就是 LaTeX 给我们提供的便利,只要标签打好了,引用的是什么就交给引擎来做吧。

另外这里还有一个需求,就是我在读到这个引用的时候想跳转到被引用的地方去看一看,该怎么办呢?这里我们可以使用 hyperref 宏包,下面举一个例子(这里加上了 colorlinks 选项,方便大家看清楚):

这个时候红色的标记就可以在阅读时用鼠标点击,会直接跳转到被引用的地方。

对于标签再多啰嗦两句。标签的命名非常重要,如果还命名成1,2,3这些数字的话,就完全失去了标签的意义了。标签最好要能体现被引段落的内容,这样你在引用的时候就会想起,我要引用的是什么内容,然后打出相应的标签。这是一个非常好的习惯,尤其是在管理特别大的文档的时候。

关于标题和引用格式的定制,我们将在下一期介绍。

如何获取帮助

就像你买的洗衣机、电视机、照相机有说明书一样,每个软件也有说明书,我们称之为文档(documentation)。对于 LaTeX 的基本命令的使用,我在电脑上装了一个软件 Dash,它专门用于看各种文档,里面就包含 LaTeX 的文档。比如刚刚我们介绍的交叉引用及其相关命令,就可以在其中搜索到。

遇到关于 LaTeX 自带命令不知道怎么使用时,就可以用这个工具来进行一些查询。没有 Dash 也没有关系,直接打开 Google 或者 Bing 之类的搜索引擎把相关的命令打进去一定能找到结果。

还有一些情况下,是你需要使用一个宏包,但是不知道相关的功能怎么使用。这个时候我们就需要命令行工具(Windows 下的 cmd,macOS、OS X、*nix下的 shell)了。在其中输入“texdoc 宏包名”就可以查阅宏包的文档,里面有详细的使用说明,在提出更多问题之前一定要好好阅读。比如我们要查刚刚使用的宏包 hyperref 的文档,就可以在命令行输入“texdoc hyperref”,一个回车下去就会跳出一个 PDF 文档,那就是你要的说明书。

如果你只是想要实现一个功能,既不知道用什么命令,也不知道用什么宏包,那么这个时候你需要 Google。到搜索引擎中去把你想要的功能加上 LaTeX 作为关键词就可以搜到很多有用的资料。在阅读这些资料的时候一定要注意两点:(1)最好阅读英文,更容易找到你要的内容;(2)注意时效性,太旧的文章要辩证接受。当你知道相关的命令和相关的宏包时,你就可以在本地查阅相关的文档了。

如果你找遍了搜索引擎和文档都没有自己想要的,这时就可以选一个社区去提问了。LaTeX 是一个开源软件,拥有完善的文档体系和庞大的社区,只要你有需要,基本都可以得到帮助解决。但是提问之前一定要注意以下几点:

  • 你的帖子题目一定要包含要点,千万不要发个帖子标题叫“大家帮帮忙”“跪求大神帮助,在线等”,这种问题一定是没有人会点进来看的。好的问题比如“如何排版横向并排的表格?”,总之一定要具体。
  • 提问的时候你需要说明你查阅了哪些文档,搜索到了哪些其他人提出的解决方案,它们为什么没有起作用。这样可以让愿意帮助你的人更了解你的情况,也避免他们提出你尝试过的解决方案。总之就是要说明你做了哪些努力。
  • 如果是你遇到了一个错误,你要提供给大家一个复现你遇到问题的途径。你应该在问题中说明你使用的电脑型号、操作系统、TeX 版本、编译引擎等。同时你最好能提供一个“最小错误示例”——即用最少的源代码来重现你遇到的问题。
  • 最好能够再提供你的编译日志(.log文件),一般情况下应该在编译后它会出现在你的源文件旁边。
  • 不要做伸手党,可以自己搜索到的内容不要问别人。没有人有义务来帮助你。

另外,如果你手上有一本合适的参考书,也最好先仔细阅读,对 LaTeX 有一个基本的掌握,你阅读文档搜索帮助的效率会更高。

写这一节主要是因为我这一系列的教程更新可能会跟不上大家的学习速度,于是把学习之法先告诉大家,如果有什么自己的需要可以直接自己学习~

今天的教程就到这里。下期我们将介绍目录的制作,更多的定制文档的实践,还有一些其他实用排版样式。

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

您正在使用您的 WordPress.com 账号评论。 注销 /  更改 )

Google photo

您正在使用您的 Google 账号评论。 注销 /  更改 )

Twitter picture

您正在使用您的 Twitter 账号评论。 注销 /  更改 )

Facebook photo

您正在使用您的 Facebook 账号评论。 注销 /  更改 )

Connecting to %s