xspace 的缺点

xspace 的缺点

我确信我读到过,这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也无法解决任何此类问题。

相关内容