考虑:
\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}
以下任一方法均可产生:
所以问题是,为什么在 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{]\}}
。