我可以在复杂性包的所有命令中注入 \xspace 吗?

我可以在复杂性包的所有命令中注入 \xspace 吗?

这个complexity包对于计算机科学家来说非常有用。最近,我发现了这个xspace包,它提供了一个\xspace宏,可以帮助定义不需要\转义的宏,以避免出现后续空格:

\newcommand{\myname}{Nicola\xspace}
...
\myname is walking on the street % No need to write \myname\ or \myname{}

现在,我使用很多来自复杂度包的命令,它定义了数十个在文本中常用的命令,因此转义的需求非常频繁。我希望\xspace默认使用它们,但重新定义\ComplexityFont不起作用,因为显然\xspace必须放在被调用的宏的末尾(而不是从它扩展的宏)。该包用简单的\newcommands 定义其所有宏,所以我认为没有办法将其挂钩。

这种重新定义是否可以以某种方式自动化,或者我应该直接向包作者建议这个功能?

答案1

由于基本上所有命令都是根据 定义的\ComplexityFont,因此这很容易:

\documentclass{article}
\usepackage[small]{complexity}
\usepackage{etoolbox,xspace}

\robustify\ComplexityFont
\apptocmd\ComplexityFont{\xspace}{}{}


\begin{document}

\section{An \NP problem}

An \NP problem

\end{document}

我还增强了主命令,因此在移动参数(例如和)时不需要\protect在宏前面。complexity\section\caption

不过,我的建议是遵循作者在手册中所说的内容:

因此,最好始终使用complexity数学模式内的命令。

xspace 的缺点不使用的原因\xspace

\documentclass{article}
\usepackage[small]{complexity}
\usepackage{etoolbox}

\robustify\ComplexityFont    

\begin{document}

\section{An $\NP$ problem}

An $\NP$ problem

\end{document}

在此处输入图片描述

相关内容