我一直在使用 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}