我有一个 PNG 图,里面有几个黑色斑块,我想在 中引用它\caption
。figure
根据 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
是移动参数,即它也可以显示在图形列表中。因此,它被写入外部文件。这不适用于脆弱的宏。参见例如
脆弱命令和坚固命令之间有什么区别? 更多细节。
您可以通过以下方式之一解决此问题:
使用可选参数
\caption
:\caption["Short" caption without tikz code]{Long caption with tikz code}
在这种情况下,只有简短版本被放置在外部文件和图表列表中。
\protect
为每个宏添加:\caption{Some caption with tikz code: \protect\tikz \protect\fill[black] (1ex,1ex) circle (1ex);}
为 TikZ 代码定义一个强健的宏:
% At best in the preamble: \DeclareRobustCommand\mytikzdot{\tikz \fill[black] (1ex,1ex) circle (1ex);} % later \caption{Some caption with tikz code: \mytikzdot}