默认情况下,LaTex 会在句号后插入一个较长的句子间空格。例外情况是句号跟在大写字母后面,在这种情况下会假定单词间有空格。此线程很好地描述了这种情况(以及如何解决它):
但是,我绝不在首字母缩写后面加上句号,所以这种行为总是让人很烦恼。这意味着我总是必须仔细校对我的文档,以确保我没有忘记大写\@
首字母缩写和末尾句号之间的关键点。这不仅浪费了我的时间,还违背了将内容和繁琐的格式化工作分开的理念。
有什么方法可以修改此默认行为? 如果我的文档中出现字符串“。”,我总是希望 LaTex 使用句子间空格。
答案1
为什么不定义一个\@
自动输入缩写词的命令呢?
\newcommand{\acro}[1]{#1\@}
当然,这假设您不想\frenchspacing
完全摆脱句末空格。
(拖船宏有一个更复杂的定义,它使用“大写小写”来表示首字母缩略词。这些只是缩小了大小的常规大写字母,并且要求宏的参数必须全部大写;我们发现常规小写字母也对于首字母缩略词来说很小。代码位于ltugcomn.sty
可在 ctan 上找到的文件中。)
我们可能会发现,有些人发现“Dr.”或“No.”后面的较宽空格比首字母缩略词后面的较窄空格更烦人(并且经常发生),而解决这个问题的方法并不是那么统一。
答案2
序言中的以下代码将使所有大写字母在空间因子方面表现得像小写字母一样,以便大写字母后的句号将被视为句子的结束。
\count255=`A
\loop
\ifnum\count255<`Z
\sfcode\count255=1000
\advance\count255 by 1
\repeat
答案3
您可以使用microtype
包来实现您自己的句子间距。
\documentclass{standalone}
\frenchspacing
\usepackage[spacing=true]{microtype}
\SetExtraSpacing
{ font = * }
{
. = {500,500,500}
}
\begin{document}
HellO, World.
HellO. World.
HellO\@. World.
\end{document}
设置\frenchspacing
会消除行间差异。然后,您手动设置“ .
”字符后的额外间距(没有前面的大写规则)。
一个悬而未决的问题是您应该向\SetExtraSpace
命令传递什么尺寸,但{500,500,500}
看起来与默认值非常接近。
答案4
Barbara Beeton 建议的首字母缩略词宏可能是可行的方法。但是,如果您坚持使用纯文本作为输入,则可以调整空间因素;方法如下:
引用 TeXbook 的话:
INITEX
创建全新的 TeX时,所有字符的空间因子代码均为 1000,但大写字母 'A
' 到 'Z
' 的代码为 999。(正是这种细微的差别导致大写字母后的标点符号表现不同;您明白为什么吗?)
因此你可以把
\sfcode`\A=1000
…
\sfcode`\Z=1000
放到你的序言中,使大写字母的行为与小写字母没有什么不同。