假设您写美式英语,并在“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 形符号、引号或任何其他符号 —— 我不知道结果会是什么。
为什么在句号后使用不同的符号会有这样的区别?
你能安全地
… , e.g., …
在句子中间的所有情况下书写吗?或者你需要说… , e.g.\@, …
(在某些情况下我目前不知道)?例如:Then, call up the cat, e.g., by saying ``here kitty-kitty.''
(PS:关于猫的文字绝对是虚构的;不要真的这样做。)
答案1
在排版行时,TeX 会维护一个名为 的内部参数\spacefactor
。规则很简单:
- 每个字符都有一个关联的
\sfcode
(一个整数); - 将字符添加到水平列表后, 将
\spacefactor
成为\sfcode
该字符的 ,但有两种情况除外; - 如果字符的
\sfcode
为 0,则不进行任何更改\spacefactor
; - 如果当前
\spacefactor
小于 1000 且新角色\sfcode
> 1000,则\spacefactor
设置为 1000。
空间因子也可以通过指令手动设置,\spacefactor<integer>
事实上,LaTeX 的\@
是 的缩写\spacefactor 1000
。
正常设置(下\nonfrenchspacing
)是
- 大写字母有
\sfcode
999; - 右括号、引号和方括号有
\sfcode
0; - 标点符号(逗号、冒号、分号、句号、问号、感叹号)的数量
\sfcode
超过 1000 个(取决于标点符号的“强度”); - 其余每个字符都有
\sfcode
1000。
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
,标点符号有\sfcode
1000 个,因此\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 的评论很好地解释了“如何”和“什么”问题。