标题说明了一切。缩进 TeX 文档的“正确”方法是什么?
不同的编程语言有不同的约定。Python 建议使用 4 个空格。如果您不使用制表符进行缩进,您的 Makefile 甚至无法工作。通常,规范化的(Allman 样式)BSD C 代码使用宽度为 8 的制表符进行缩进。
作为 OpenBSD 用户,我倾向于使用制表符(设置为 8 个字符)来缩进所有代码,包括 TeX(Python 除外)。但是,由于我使用显示行号的 NVI,因此我的终端的有效宽度只有 72 个字符,再加上 8 个字符的缩进,导致我的一些 TeX 文档难以阅读。
另一方面快速看看我的
/usr/local/share/texmf-dist/tex/latex
目录显示 LaTeX 样式文件缩进两个空格。一般来说是这样吗?我也应该对 LaTeX 文档使用相同的约定吗?
答案1
缩进 TeX 文档的“正确”方法是什么?
我认为没有“正确”的方法——当然没有单身的正确的方法——缩进普通 TeX 或 LaTeX 文档的输入行。(对于遵循 LaTeX3 编码方法的输入,情况可能会有所不同,但我不确定。)只要 TeX 可以解析输入,它就完全不知道它收到的输入的形式。因此,任何缩进做法——无论是使用“软制表符”还是“硬”空格缩进,以及缩进量是 2、4 还是 8 个空格——都是完全表面的和自愿的。可以肯定的是,我认为任何有理智的人都不会提倡不是使用一些规则用于缩进 TeX 代码的各个部分。
另一个想法:为了提高 TeX 输入代码的可读性,一种可能与采用某些缩进规则一样重要(甚至可能更重要)的技术是使用垂直空白自由而一致地——在段落之间、在分段命令之上、在\newenvironment
语句之前和之后、在 LaTeX 之前和之后float
等等。
答案2
从个人角度来看,这可能非常主观。有些人使用<TAB>
s,其他人使用<space>
s,以及它们的任意组合。我认为,如果您开始.sty
在 CTAN 上查找不同作者的文件,您可能会发现非常不同的缩进样式。我的感觉是缩进应该反映水平嵌套,也许垂直分组。在这两种情况下,这都定义了代码中的某种结构。
从 TeX 的角度来看,这在大多数情况下是无关紧要的。也就是说,除非类别代码已更改。特别是,在环境中verbatim
,空格被视为空格;即使是连续的空格。
摘自 TeX Book(第 8 章:您输入的字符,第 46 页起):
TeX 的输入是一系列“行”。每当 TeX 从文件中读取一行文本,或者读取您直接在终端上输入的一行文本时,计算机的读取装置处于以下三种状态之一:
- 状态
N
:开始新行;- 状态
M
:线的中间;- 状态
S
:跳过空白。... 如果 TeX 看到行尾字符(类别 5),它会丢弃当前行上可能保留的任何其他信息。然后,如果 TeX 处于状态
N
(新行),行尾字符将转换为控制序列标记\par
(段落结束);如果 TeX 处于状态M
(中间行),行尾字符将转换为类别 10 的字符 32 的标记(<space>
);如果 TeX 处于状态S
(跳过空格),行尾字符将被删除。... 如果 TeX 看到类别 10 的字符 (
<space>
),则操作取决于当前状态。如果 TeX 处于状态N
或S
,则该字符只是被忽略,TeX 保持相同的状态。否则 TeX 处于状态M
;该字符被转换为类别 10 的标记,其字符代码为 32,TeX 进入状态S
。空格标记中的字符代码始终为 32。
最后两段最能说明 TeX 如何处理代码中的垂直和水平空白(分别),从而允许你根据自己的喜好定制代码。从字面上讲,TeX 只是“跳过空白”。