软件包的怀疑掩盖了 \def 命令

软件包的怀疑掩盖了 \def 命令

在以下示例中:

\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 等。

相关内容