为什么 \xspace 对于圆括号和大括号/方括号的行为不同?

为什么 \xspace 对于圆括号和大括号/方括号的行为不同?

考虑:

\documentclass{article}
\usepackage{xspace}
\begin{document}
(something\xspace)

[something\xspace]

\{something\xspace\}
\end{document}

或者更确切地说:

\documentclass{article}
\usepackage{xspace}
\newcommand{\something}{something\xspace}
\begin{document}
(\something)

[\something]

\{\something\}
\end{document}

以下任一方法均可产生:

xspace 输出图像

所以问题是,为什么在 and\xspace之前会产生空格]}而没有)?我觉得这很烦人。我宁愿在这三种情况下都不产生空格。我知道我可以通过使用\xspace{}or来消除空格\something{},但这有点违背了目的,我的目的主要是定义我自己的宏,这样我就不需要考虑是否需要它{},而可以像使用单词一样使用宏。

有人认为这是一个错误吗?如果是,我应该如何报告?

答案1

的作者xspace没有将]\}列入例外名单。为什么?不知道。但是有\xspaceaddexceptions一个允许您添加它们:

\documentclass{article}
\usepackage{xspace}
\xspaceaddexceptions{]\}}
\newcommand{\something}{something\xspace}
\begin{document}
(\something)

[\something]

\{\something\}
\end{document}

结果:

结果

答案2

xspace包使用例外列表来决定何时添加空格;该列表的原始定义是:

\def\@xspace@exceptions@tlp{%
,.’/?;:!~-)\ \/\bgroup\egroup\@sptoken\space\@xobeysp
\footnote\footnotemark
}

如您所见,)包含在列表中,但}]不在,因此xspace会添加一个空格。如果要删除此字符的空格,请使用 将}和添加]到列表中\xspaceaddexceptions{]\}}

相关内容