如何防止 xspace 在我的宏和尾随的单个“s”字符之间创建空格?

如何防止 xspace 在我的宏和尾随的单个“s”字符之间创建空格?

我已经定义了这样的宏:\newcommand{\code}[1]{\texttt{#1}\xspace}

在某些情况下,我想写出某个对象的复数形式,并且结尾的(复数)“s”字符不应标记为代码。因此它应该看起来像这样:ClassInstances。

然而,当我这样做时,\code{ClassInstance}s我会得到一个额外的空格,即它看起来像:ClassInstances。

我能做些什么?

编辑

考虑到@egreg的回答,我似乎遗漏了宏的一个重要部分。事实上,的定义\code也会修改文本颜色。只有这样,使用才\xspace似乎是必要的。

为了重现该问题,请运行这个最小示例:

\documentclass[10pt,a4paper]{article}
\usepackage{xcolor}
\usepackage{xspace}

\newcommand{\code}[1]{\texttt{#1}}
\newcommand{\colcode}[1]{\color{blue}\texttt{#1}\color{black}}
\newcommand{\colcodex}[1]{\color{blue}\texttt{#1}\color{black}\xspace}

\begin{document}
    Bounds are constructed by closed \code{Curve} objects.
    
    Bounds are constructed by closed \colcode{Curve} objects.
    
    Bounds are constructed by closed \colcodex{Curve} objects.

    Sometimes we have even two \colcodex{Curve}s.
\end{document}

由此我得到: 在此处输入图片描述

答案1

唯一\xspace可能有用的情况是当命令毫无争议正在被定义。

尝试

\newcommand{\code}[1]{\texttt{#1}}

你会看到

The \code{ClassInstance} is ... 

\code{ClassInstance}s

在第一种情况下,空格被保留,而在第二种情况下,空格不被添加。

换句话说,\xspace 绝不可在定义带参数的命令时使用。


更新

\colcode命令定义错误:相反,执行

\newcommand{\colcode}[1]{\textcolor{blue}{\texttt{#1}}}

这样既可以避免空间占用的问题,又可以避免需要回到“以前”的颜色。

相关内容