我有以下代码:
\documentclass{article}
\usepackage{amsmath}
\def\cma#1{$A_{c}(#1)$}
\def\cmbs#1{B_{c_{\mathcal{L}}}^{#1}}
\def\cmb#1{\ifmmode\cmbs{#1}\else$\cmbs{#1}$\fi}
\begin{document}
\listoffigures
\begin{figure}[h]
\caption{\cma{\cmb{+}}}
\end{figure}
\end{document}
当尝试编译它(第二次获取图形列表)时,我得到:
! 缺少插入 $。
<插入文本>
l.1 ...es $A_{c}($B_{c_{\mathcal {L}}}^{+}$)$}}{1}
如果我注释掉\listoffigures
,一切都会正常。当我查看文件时.lof
,我看到:
\contentsline {figure}{\numberline {1}{\ignorespaces $A_{c}($B_{c_{\mathcal {L}}}^{+}$)$}}{1}
这似乎意味着该\ifmmode
命令没有正常工作......
有什么方法可以解决这个问题而不必明确使用\cma{\cmbs{+}}
?
答案1
当 LaTeX 编写目录行时,它不是在数学模式中。
你可以定义
\newcommand{\cma}[1]{\ensuremath{A_{c}(#1)}}
\newcommand{\cmb}[1]{\ensuremath{B_{c_{\mathcal{L}}}^{#1}}}
进而
\caption{\cma{\cmb{+}}}
会起作用。另一方面,我看不出有什么改进
\newcommand{\cma}[1]{A_{c}(#1)}
\newcommand{\cmb}[1]{B_{c_{\mathcal{L}}}^{#1}}
以及更具语义的
\caption{$\cma{\cmb{1}}$}
避免 \def
。