latex 对句号有什么特殊处理吗?如果是这样,有没有办法区分句末句号和表示缩写的句号?
答案1
答案2
是的,使用\@
。以下内容改编自我的博客。
大致来说,其目的\@
是指示标点符号是否结束一个句子。为什么要这样做?默认情况下,Plain TeX 和 LaTeX 都具有一个功能,即允许在句子后留出一点额外的空格(无论是句号还是其他标点符号),以帮助将段落分成几行。如果您需要在这一行中留出一点额外的空格,最好将其集中在句号后,而不是在所有单词之间添加额外的空格。
这种排版方法在 19 世纪和 20 世纪初期非常常见(通常夸张到极致),但我认为现在不太常见了。如果您不喜欢它,请\frenchspacing
在序言中写上,然后您就可以忘记它是否\@
是必需的。但是,在为其他来源(例如期刊)编写 LaTeX 文档时,遵循他们的风格并包含这些细节是礼貌的做法。
一个使用示例\@
是在诸如“ Prof.\@ Crumb
”之类的缩写之后。如果没有\@
,则“Prof.”后面的空格将被错误地放大——这是 (La)TeX 文档中常见的印刷错误。另一种方法(通常是首选)是写Prof.\ Crumb
,这更容易记住和输入。
相反,\@
也可以用来表示标点符号应该结束一个句子。默认情况下,大写字母后的标点符号不被视为结束一个句子(因此您可以写 ' M. C. Escher
' 而不加\@
)。但是,如果您碰巧在句子末尾用姓名首字母来指代某人,则需要写成,例如,
… `So he did', said M\@. (New sentence) …
确保额外的空间曾是包括在最后一个句号之后。
我还应该提到,我经常不使用\@
标点符号,而倾向于输入明确的空格控制序列;也就是说,我更喜欢写Prof.\ Crumb
。这样输入起来更短,也许更容易记住。
有一些重要的边缘情况需要考虑。其他标点符号对于表示句子结束的标记来说是“不可见的”;考虑:
depending on the context of `a' and `b' (etc.) where …
空格因子(即控制何时何地出现额外空格的参数)不会通过括号“重置”,而是需要书写(etc.\@)
。以下是另一个示例:
… `Et cetera et cetera etc.' said the King …
'
这里,由于句点的存在,右引号(或)后面会有''
错误添加的多余空格;右括号]
对于空间因素来说也是“不可见的”。
在上面的例子中,您不希望在 后有额外的空格(etc.)
,但如果整个句子都括在括号中,您可以:
I like eggs and bacon. (Poached and crispy.) Best with coffee.
因此,编写 TeX 源代码时应小心谨慎。如果您知道句号永远不会结束一个句子,最好的办法是定义一个宏来插入所有内容,而您无需记住它;例如,
\makeatletter
\newcommand\etc{etc\@ifnextchar.{}{.\@}}
\makeatother
您应该在其中写上“ (\etc)
”或“ …, \etc, …
”,但是如果您想用它来结束一个句子,则应该明确地加上句号:
… \etc. (New sentence) …