“等。”缩写宏在标题中使用时出错

“等。”缩写宏在标题中使用时出错

我一直在使用 ie、eg 等缩写宏,它们在这个帖子。但是,我刚刚发现,etc. 宏和我为 et al. 编写的类似宏在标题中使用时都会导致错误。当我编译下面的代码时,我收到错误Argument of \@caption has an extra }。有没有办法修改宏来解决这个问题?谢谢。

\documentclass{article}
\usepackage{caption}

\usepackage{xspace}
\newcommand*{\eg}{e.g.\@\xspace}
\newcommand*{\ie}{i.e.\@\xspace}

\makeatletter
\newcommand*{\etc}{%
    \@ifnextchar{.}%
        {etc}%
        {etc.\@\xspace}%
}
\makeatother

\begin{document}

\begin{figure}
\caption{Me \etc} % This causes problems
\label{}
\end{figure}

\end{document}

答案1

您应该使用\DeclareRobustCommand而不是\newcommand以使宏在标题和标题中发挥作用:

\documentclass{article}
\usepackage{caption}

\usepackage{xspace}
\DeclareRobustCommand{\eg}{e.g.\@\xspace}
\DeclareRobustCommand{\ie}{i.e.\@\xspace}

\makeatletter
\DeclareRobustCommand{\etc}{%
    \@ifnextchar{.}%
        {etc}%
        {etc.\@\xspace}%
}
\makeatother

\begin{document}
\begin{figure}
\caption{Me \etc \ie \eg} % Would cause problems if abbreviations were defined with \newcommand
\label{}
\end{figure}

\end{document}

相关内容