顺便说一句,我在很多地方都看到过关于 LaTeX 中间距的良好做法。例如,Dr. Who
应该写成Dr.\ Who
或Dr.~Who
以获得正确的间距(因为句号不是句子的结尾)。
与积分类似:\int x\, dx
应优先考虑\int x dx
以适当隔开“ dx
”。
但这都是针对具体情况的零碎建议:何时关注 LaTeX 如何处理您的空格,指导的一般原则是什么?
答案1
您需要记住文本中的所有不规则之处:表面上统一的文本实际上并不统一的地方。您以缩写中的句号为例;之所以如此,是因为句号通常不会出现在句子中,但在这种情况下,句号出现了(只有惯用英语的使用者才能知道这一点,而 TeX 则不知道)。积分中的微分是另一个例子:它与被积函数是相同的文本,但它不是被积函数的一部分(在这种情况下,我可以想象 TeX 会被编写来注意这一点,但可能有充分的理由不这样做)。
当然,你也应该留意那些表面上不同但实际上并无二致的构造。这些构造可能集中在某些 TeX 习语上:例如,如果你用纯 TeX 编程(你不是,所以你实际上不应该写这个),你可能会执行以下操作:
The following {\it italic text} is not well-spaced.
如果你设置了它,你可能会看到文本有点太接近“是”了。在 TeXbook 中,Knuth 提醒您添加“斜体校正”。但是,现在 LaTeX 有了\textit{...}
,可以解决这个问题,您可能甚至从未学过什么是斜体校正。所以这不是一个示例。然而,问题仍然是,某些 TeX 构造会破坏文本的流畅性(特别是分组),您需要注意排版结果以查看它们是否破坏了间距。
垂直空间也可能是一个问题,而且更难处理。Knuth 还警告不要在文本中使用高符号(例如\frac{1}{2}
而不是),因为它们会强制行分开。因此,您需要仔细检查为高符号编写的所有内联数学,并考虑使用显示的方程式。有时,如果您知道有空间而 TeX 不知道,1/2
您可以使用 来解决这个问题。\smash
内联数学运算给 TeX 的换行算法带来了另一个问题,因为它不会在方程式中的很多地方换行,逗号就是一个臭名昭著的例子。因此,写成$a$, $b$, and $c$
而不是$a, b, \text{ and } c$
或甚至$a, b$, and $c$
。Knuth 还希望您在 中加入一个连字符:and~$c$
;我承认我从不使用连字符。就像方程式中的手动间距校正一样,它们似乎应该留到最后的润色(我的意思是,如果Dr. House
位于一行的中间,它就不会换行)。
简而言之,您需要注意范围变化、模式变化和“语义范围”的变化,其中最后一个完全不可能传达给 TeX,而其他两个仍然很隐蔽。但是,您不应该害怕“试试看”并看看是否真的有问题。让 TeX 做它想做的事(对于 TeX,“它想做的事”有时是您唯一能轻松说出来的)比试图预测它要快得多。
答案2
以下是我的间隔政策的简短摘要。
对于内联文本:只需在您不希望换行的任何位置使用不间断空格即可。每当您在文本中执行一些不寻常的操作时,请考虑这样做,例如
Dr.~Who
、Figure~\ref{fig:a}
和临时内联列表(例如)(a)~this, or (b)~that
。几乎所有宏都会占用其后的空格。因此,如果有疑问,请强制在任何宏后留出空格。
\like\ this
如果您定义如下宏\newcommand\etc{\emph{etc.}}
那么牢记这条规则,其副作用就是正确处理这些斜体缩写后面的空格。
以下补充想法可能不是“最佳实践”,但它们是由于需要反复阅读和撰写自己的作品,并且希望内容尽可能易于阅读,所以我采用了这些实践。
有时,在数学环境中,你会提前知道需要更多空间,因为某些数学公式总是以这种方式编写。在这种情况下,你应该考虑定义一个宏来处理这个问题。例如,为了在积分中使用,为微分符号 定义一个宏是一个好策略
d
,如下所示:\makeatletter \renewcommand\d[1]{\mspace{6mu}\mathrm{d}#1\@ifnextchar\d{\mspace{-3mu}}{}} \makeatother
(这假设您不需要使用冰岛字符“eth”,这是 的原始含义
\d
。)此宏在微分形式左侧添加空格,但如果其前面是另一个微分,则空格较少。然后您可以编写$ \cos(\theta)\cos(\phi) \d\theta \d\phi $
并获得更接近您默认想要的输出。
我总是查看数学的排版版本,以确保它易于视觉扫描,并在我认为有必要的地方添加空间,以帮助将数学分解为易于解析的“标记”块。所以我自由地使用了
\,
、\;
、\!
和\quad
宏。
答案3
关于积分:就我个人而言,我不认为这是\int x\ dx
好的做法;空间太大了。我总是使用\int x\,dx
。
答案4
实际上,在\nonfrenchspacing
使用时,最正确的做法(据我所知)是\@
在每个大写字母和句子标点符号之间放置一个,而不仅仅是句子结尾的标点符号。例如,理想情况下,您应该输入They use three languages at NASA\@: C\@; MATLAB\@, the best; and Pascal.
。在 下\nonfrenchspacing
,冒号、分号和逗号的空间因子代码都大于 1000,因此,如果没有\@
我的示例中的 ,您将无法在“NASA:”、“C;”或“MATLAB,”后获得完美的间距。(分号或逗号后没有额外的空格,但这些标点符号后的空格比正常的单词间空格延伸更多,收缩更少。)
尽管如此,所有这些\@
' 都会使 TeX 文件难以阅读。所以我倾向于不理会\@
大写字母和逗号或分号之间的 '。Lamport 的 LaTeX 2e 手册没有说要在那里添加它们,而且电子书仅意味着在这些情况下出现了某些“错误”(参见第 76 页),所以我认为这是一个合理的折衷方案。