以下最小示例不起作用并产生错误
\documentclass{article}
\usepackage{graphicx}
\usepackage{amssymb}
\begin{document}
\begin{figure}
FIGURE
\caption{$\blacksquare$ result of; \rotatebox[origin=c]{45}{$\blacksquare$}}%
\end{figure}
\rotatebox[origin=c]{45}{$\blacksquare$}
\end{document}
错误信息显示:
rotatebox-in-caption.tex|7| Argument of \@caption has an extra }.
|| <inserted text>
|| \par
|| l.7 ...; \rotatebox[origin=c]{45}{$\blacksquare$}}
我是否必须将其包装\rotatebox
在特定的盒子中才能使其工作?
答案1
\rotatebox
是脆弱的, 也可以看看:脆弱命令和坚固命令之间有什么区别?
在脆弱宏的参数中,“移动参数”内部\caption
可以通过在它们前面加上前缀来保护\protect
:
\documentclass{article}
\usepackage{graphicx}
\usepackage{amssymb}
\begin{document}
\listoffigures
\begin{figure}
FIGURE
\caption{$\blacksquare$ result of;
\protect\rotatebox[origin=c]{45}{$\blacksquare$}}%
\end{figure}
Text: \rotatebox[origin=c]{45}{$\blacksquare$}
\end{document}
让脆弱的宏变得健壮
包裹
makerobust
定义宏\MakeRobustCommand
。它以与 LaTeX 相同的方式为宏添加 LaTeX 的保护层\DeclareRobustCommand
:\usepackage{graphicx} \usepackage{makerobust} \MakeRobustCommand\rotatebox ... \caption{... \rotatebox ...}
\rotatebox
不再脆弱,无需使用\protect
。包裹
etoolbox
定义\robustify
使用 e-TeX 重新定义宏\protected
:\usepackage{graphicx} \usepackage{etoolbox} \robustify\rotatebox ... \caption{... \rotatebox ...}
这也使得
\rotatebox
它不再需要\protect
这个宏。