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