使用 xparse 的新命令后有额外的空格

使用 xparse 的新命令后有额外的空格

我试图编写一个宏,它可以接受两个参数中的任意一个,并在两种情况下产生不同的输出。为此,我曾经打包解析。下面是我写的宏:

\documentclass[a4paper,english, makeindex, final]{memoir}

\usepackage[demo]{graphicx}

\usepackage{xspace}
\usepackage{xparse}             
\DeclareDocumentCommand\fig{om}{
  \IfNoValueTF{#1}
    {(fig. \ref{#2})\xspace}
    {(fig. \ref{#2}.#1)\xspace}
}
%------------------------------------------------------------
\begin{document}

This it text I want to type \fig[A]{fig1}. And it is the same with the only one argument as well \fig{fig1}.

\begin{figure}[!htbp]
\begin{center}
\includegraphics[width=0.8\linewidth]{}
\caption[test figure]{Test figure. A big black box}
\label{fig1}
\end{center}
\end{figure}    

\end{document}

问题是新命令会自动在文本后生成一个空格,我不知道如何删除它。我试过了空间包但它似乎不起作用......

在此处输入图片描述

答案1

你有两个虚假的空间:

\DeclareDocumentCommand\fig{om}{%
  \IfNoValueTF{#1}
    {(fig. \ref{#2})\xspace}
    {(fig. \ref{#2}.#1)\xspace}%
}

当然,定义更清晰

\DeclareDocumentCommand\fig{om}{%
  \IfNoValueTF{#1}
    {(fig. \ref{#2})}
    {(fig. \ref{#2}.#1)}%
  \xspace
}

没有必要终止我没有放置的两行,%因为 TeX 在寻找参数时不考虑空格;无论如何,它们不会造成伤害,所以你可能更喜欢

\DeclareDocumentCommand\fig{om}{%
  \IfNoValueTF{#1}%
    {(fig. \ref{#2})}%
    {(fig. \ref{#2}.#1)}%
  \xspace
}

在此处输入图片描述

相关内容