标题中的旋转框符号产生错误

标题中的旋转框符号产生错误

以下最小示例不起作用并产生错误

\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这个宏。

相关内容