关于在 \nonfrenchspacing 中美式英语中 ie 和 eg 后面加逗号的排版

关于在 \nonfrenchspacing 中美式英语中 ie 和 eg 后面加逗号的排版

假设您写美式英语,并在“ie”和“eg”后面加上逗号。
早已为人所知当在这样的缩写后面加右括号时,例如“拿一只任意的猫(例如暹罗猫)并尝试了解它需要哪种燃料。为此,...”,你最好在\@“例如”后面加右括号,因为你的句子可能会在\nonfrenchspacing上下文中使用,并且你不希望在句子中间有句子间空格:

Take an arbitrary cat (a Siamese cat, e.g.\@) and try to understand which kind of fuel it needs.  To this end, \ldots.

当你有一个右括号时也是如此:

Take an arbitrary cat [a Siamese cat, e.g.\@] and try to understand which kind of fuel it needs.  To this end, \ldots.

但是当“eg”后面跟着逗号、右括号或旧式斜线括号时,就\@不需要了;下面所有三个选择都会产生相同的结果:

To this end, take a can of fuel /gasoline, e.g./ and a funnel.  Then, \ldots.\\

To this end, take a can of fuel /gasoline, e.g.\@/ and a funnel.  Then, \ldots.\\

To this end, take a can of fuel /gasoline, e.g./\ and a funnel.  Then, \ldots.\\

我没有测试过 V 形符号、引号或任何其他符号 —— 我不知道结果会是什么。

  1. 为什么在句号后使用不同的符号会有这样的区别?

  2. 你能安全地… , e.g., …在句子中间的所有情况下书写吗?或者你需要说… , e.g.\@, …(在某些情况下我目前不知道)?例如:

    Then, call up the cat, e.g., by saying ``here kitty-kitty.''
    

(PS:关于猫的文字绝对是虚构的;不要真的这样做。)

答案1

在排版行时,TeX 会维护一个名为 的内部参数\spacefactor。规则很简单:

  1. 每个字符都有一个关联的\sfcode(一个整数);
  2. 将字符添加到水平列表后, 将\spacefactor成为\sfcode该字符的 ,但有两种情况除外;
  3. 如果字符的\sfcode为 0,则不进行任何更改\spacefactor
  4. 如果当前\spacefactor小于 1000 且新角色\sfcode> 1000,则\spacefactor设置为 1000。

空间因子也可以通过指令手动设置,\spacefactor<integer>事实上,LaTeX 的\@是 的缩写\spacefactor 1000

正常设置(下\nonfrenchspacing)是

  • 大写字母有\sfcode999;
  • 右括号、引号和方括号有\sfcode0;
  • 标点符号(逗号、冒号、分号、句号、问号、感叹号)的数量\sfcode超过 1000 个(取决于标点符号的“强度”);
  • 其余每个字符都有\sfcode1000。
the sfcode of ! is 3000
the sfcode of ' is 0
the sfcode of ( is 1000
the sfcode of ) is 0
the sfcode of * is 1000
the sfcode of + is 1000
the sfcode of , is 1250
the sfcode of - is 1000
the sfcode of . is 3000
the sfcode of / is 1000
the sfcode of 0 is 1000
the sfcode of 1 is 1000
the sfcode of 2 is 1000
the sfcode of 3 is 1000
the sfcode of 4 is 1000
the sfcode of 5 is 1000
the sfcode of 6 is 1000
the sfcode of 7 is 1000
the sfcode of 8 is 1000
the sfcode of 9 is 1000
the sfcode of : is 2000
the sfcode of ; is 1500
the sfcode of < is 1000
the sfcode of = is 1000
the sfcode of > is 1000
the sfcode of ? is 3000
the sfcode of @ is 1000
the sfcode of A is 999
[...]
the sfcode of Z is 999
the sfcode of [ is 1000
the sfcode of ] is 0
the sfcode of ` is 1000
the sfcode of a is 1000
[...]
the sfcode of z is 1000
the sfcode of { is 1000
the sfcode of | is 1000
the sfcode of } is 1000

在 下\frenchspacing,标点符号有\sfcode1000 个,因此\spacefactor根本没有影响。

确实,如果在大于 1000 时发现空格,TeX 会增加一些可伸缩性,如果\spacefactor大于或等于 2000,甚至会增加额外的空格。但要小心,这里有个陷阱!(你知道,总会有陷阱的。)原始命令“backslash-space”插入的空格不受当前空间因子的影响。

其目的\nonfrenchspacing是在标点符号后获得更大的空间,但这不应受到引号或括号的影响。

因此,(Gotcha!)右括号后的空间因子将为 3000,就像缺少括号一样。 也是一样``Gotcha.''

输入e.g.\@,是多余的,但e.g.,效果是一样的:在任何一种情况下,逗号后的空间因子都是 1250。

如果\@e.g.在句号后面加逗号e.g.\@不会被视为句子结尾(没有额外的空格或额外的延伸)。因此,在

Take an arbitrary cat (a Siamese cat, e.g.\@) and

需要\@,因为)对于空间因素来说是“透明的”。

答案2

你的主要问题似乎是关于为什么,而不是关于什么或者如何

前提是,这\nonfrenchspacing是有效的,因此 TeX 设置为在句末句号(又称句号)、问号和感叹号后插入比普通单词间空格更多的空格。

稍加思考就会发现,在英语和许多其他语言中,一整句话可以出现在一对(通常是圆的)括号内。例如,请原谅尤利乌斯·凯撒,请考虑以下两个片段:

  I came. I hesitated.
  (I came.) I hesitated.

因此,如果 TeX 应该在“came.”后插入额外的空格,那么它也应该在“came.)”后这样做,对吗?

据我所知,句号、问号或感叹号后面跟着一个非字母字符除了 )、] 和一些引号不能结束一个句子。因此,TeX 应该不是e.g.,在和之后插入额外的空格i.e.,,对吗?

这是否回答了你的为什么问题?@moewe 的评论很好地解释了“如何”和“什么”问题。

相关内容