在图片标题中使用 TikZ

在图片标题中使用 TikZ

我有一个 PNG 图,里面有几个黑色斑块,我想在 中引用它\captionfigure根据 TikZ 手册,我必须

\tikz \fill[black] (1ex,1ex) circle (1ex);

在 a 之外运行良好\caption。但在 a 内部使用它\caption,却导致编译错误

! Use of \use@pgflibrary doesn't match its definition.
\pgfutil@ifnextchar ...1\def \pgfutil@reserved@a {
                                              #2}\def \pgfutil@reserved@...
l.375 ...blah blah.}

?

以下产生编译错误

\documentclass{article}
\usepackage{tikz}

\begin{document}
\tikz \fill[orange] (1ex,1ex) circle (1ex);
\begin{figure}
\caption{\tikz \fill[orange] (1ex,1ex) circle (1ex);}
\end{figure}
\end{document}

这里有什么提示吗?

答案1

的参数\caption是移动参数,即它也可以显示在图形列表中。因此,它被写入外部文件。这不适用于脆弱的宏。参见例如 脆弱命令和坚固命令之间有什么区别? 更多细节。

您可以通过以下方式之一解决此问题:

  1. 使用可选参数\caption

    \caption["Short" caption without tikz code]{Long caption with tikz code}
    

    在这种情况下,只有简短版本被放置在外部文件和图表列表中。

  2. \protect为每个宏添加:

    \caption{Some caption with tikz code: \protect\tikz \protect\fill[black] (1ex,1ex) circle (1ex);}
    
  3. 为 TikZ 代码定义一个强健的宏:

    % At best in the preamble:
    \DeclareRobustCommand\mytikzdot{\tikz \fill[black] (1ex,1ex) circle (1ex);}
    
    % later
    \caption{Some caption with tikz code: \mytikzdot}
    

相关内容