在以下示例中:
\documentclass{article}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{subfig}
\def\tag{hello}
\newcommand{\createfig}{%
\def\tag{hey}%
\begin{figure}
\subfloat[caption]{%
\includegraphics[width=0.45\textwidth]{example-image-a}%
}%
\caption{some caption}
\label{fig:\tag}
\end{figure}
}%
\begin{document}
\tag
\createfig
\end{document}
我收到一个错误:
! Argument of \@caption has an extra }.
<inserted text>
\par
l.20 \createfig
这个问题可以通过以下方式解决
- 重命名
\tag
为\tagl
- 或删除
\usepackage{amsmath}
我怀疑包\tag{label}
中的命令干扰了中定义amsmath
的工作。\tag
\createfig
但是,错误消息中根本没有显示这一点。这怎么可能呢?如何解决这种情况?
这个情况就更加奇怪了,因为环境\tag
之外定义的其他东西都\createfig
正常运行。
答案1
如果你将示例修改为
\show\tag
\label{fig:\tag}
\tag
您将看到此时的定义是:
> \tag=macro:
->\invalid@tag {\string \tag \space not allowed here}.
l.17 \show\tag
这是不安全的\label
。
amsmath
安装该定义,这样方程编号命令就不会在数学模式之外使用。特别是,它添加了\default@tag
(重置的含义\tag
)到,\@parboxrestore
因此它会重置每个浮点数或 parbox、minipage 等。