![xspace 的缺点](https://linux22.com/image/259837/xspace%20%E7%9A%84%E7%BC%BA%E7%82%B9.png)
我确信我读到过,这xspace
会导致的问题比解决的问题还多。但我在本网站或网络上都找不到任何相关内容。这有什么缺点或风险吗?
答案1
我最初实现空间很久以前(对于 LaTeX 2.09),因为像大多数 LaTeX 初学者一样,我有一个文档,其中我省略了{}
或\
,因此最终文档中缺少一个空格。
原始版本使用了一个非常简单的嵌套测试来测试以下标点符号,但在某些情况下(实际上很多情况下)测试可能会出错。Morten 改进了测试,因此当前版本在更多情况下做出了正确的选择,并且更容易定制,然而,使测试变得更加复杂凸显了这种包的问题。
TeX 中的规则其实很简单,在使用字母的命令名称之后(与使用非字母的单字符命令名称相反,例如\$
),空格将被忽略。很容易忘记使用\
或{}
,但忘记的结果非常可预测,您会在结果中丢失空格。相反,使用xspace
宏大多数时候会得到正确的空格,但很难预测何时会出错,因此,学会以始终正确的方式输入标记要困难得多,而不是必须始终目视检查缺失的空格,这反而否定了命令的目的。
所以,如果你觉得它有用,那没问题,它就在那里。但我个人不推荐它。
答案2
之前在网站上提到过,但我认为它在这里也有用武之地。您可以以一种完全不会忘记空格的方式定义命令。这是通过定义以下内容来实现的:
\def\ES/{Einstein}
(你不能使用\newcommand
它)。这样,文档中的正确语法是
The physisist \ES/ proved the so-called \ES/'s theorem.
您可以自己测试一下,确保空格\ES/ proved
不会被吃掉,因为实际上,尾随/
不是宏名称的一部分,而是一种“强制固定值参数”,称为宏分隔符用 TeX 的术语来说。如果你省略这个/
并尝试写入\ES proved
,你会得到一个不那么神秘的错误消息
Use of \ES doesn't match its definition
其意思正如其名:您定义\ES
它后面跟着/
但缺少了这个。
然而,最好的办法是不要像\ES
爱因斯坦那样定义简写。这样你就不需要xspace
也无法解决任何此类问题。