LaTeX有时会在一段时间后放置太多或太少的空间

dre*_*ves 49 latex

LaTeX试图猜测句点是否结束一个句子,在这种情况下它会在它之后放置额外的空格.以下是猜测错误的两个例子:

I watched Superman III. Then I went home. 
Run Code Online (Sandbox Code Playgroud)

("超人III"之后的空间太小.)

After brushing teeth etc. I went to bed.
Run Code Online (Sandbox Code Playgroud)

("等"之后的空间太大.)

请注意,由于LaTeX忽略了这一点,因此在LaTeX源中使用了多少空白并不重要.

dre*_*ves 78

我在这里找到答案:http: //john.regehr.org/latex/.摘抄:

当一个非句子结束时期后面跟一个空格时,该空格必须是一个明确的空白.所以第二个例子应该是:

After brushing teeth etc.\ I went to bed.
Run Code Online (Sandbox Code Playgroud)

当大写字母在输入中的句子结束时段之前时,就会出现此问题的相反情况,如第一个示例中所示.在这种情况下,LaTeX假设句点终止一个缩写,并用词间空间而不是句子间空格跟随它.修复是\@在句号之前加上" ".所以第一个例子应该是

I watched Superman III\@. Then I went home.
Run Code Online (Sandbox Code Playgroud)

找到此错误的便捷方法是:

grep '[A-Z]\.' *.tex
Run Code Online (Sandbox Code Playgroud)

  • 如果你喜欢对称的话,你也可以写`等等.\ @我去睡觉了. (4认同)
  • @dreeves:根据回应和我的经验,`\ @'被设计成在句子结束时期之前,与你所说的相反. (3认同)
  • 另请参阅[间距的良好做法](https://tex.stackexchange.com/questions/5511/good-practice-on-spacing)和[更正标点符号空格](http://latex-alive.tumblr.com/ post/827168808/correct-punctuation-spaces)@Will Robertson写道:'你应该考虑`\ @ .`一个"句子结束时期"和`.\ @一个"缩写句号"'. (3认同)
  • 命令"\ @"实际上专门用于此目的 - 在非句子结束时段之前. (2认同)
  • 哎呀,是的,我的回答是正确的,但我在上面的第一条评论中说反了。 (2认同)

Cha*_*art 14

如果你喜欢句子末尾的单个空格,你可以回避间距问题:穿上\frenchspacing(对于旧版本的Latex,这是一个脆弱的命令).Knuth遵循传统的命名称法语间距,虽然在句子之后称法国间距已经成为出版的主导.

Dirk Margulis写了一篇很好的文章,总结了单一间距普遍存在的一些原因:句子之间的空格.


bor*_*ame 5

我喜欢dreeves的回答以及他建议的方便搜索.我没有Stackoverflow"rep"点来评论,但......

由于原始*.tex中的行往往很长,因此grep的输出可能是压倒性的(即整个段落); 我建议一个变体只显示以'[AZ]结尾的单词.(后跟一个或多个空格,后跟一个新的大写单词).它是,

grep -o -E '[A-Z]+\. +[A-Z]+[A-Za-z]+' *.tex
Run Code Online (Sandbox Code Playgroud)