我想在图片的标题内制作一个小的 tikzpicture,也就是想在标题中创建一个图例。我已阅读4.9.6 Legends with \label and \ref
pgfplots 手册中的部分内容。但是我将我的图编译为 .pdf 文件,然后将其插入到我的文档中,因此我无法使用它。
以下最小示例会触发错误! Argument of \@caption has an extra }
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{figure}
\caption{test
\begin{tikzpicture}
\draw[black] (0pt,0pt) -- (15pt,0pt);
\end{tikzpicture}
}
\end{figure}
\end{document}
我该如何解决这个问题?
答案1
我认为这里不需要盒子,您可以简单地使用:
\documentclass{article}
\usepackage{tikz}
\newcommand\drawline[1][black]{%
\begin{tikzpicture}
\draw[#1] (0pt,0pt) -- (15pt,0pt);
\end{tikzpicture}%
}
\begin{document}
\listoffigures
\begin{figure}
\caption{test \drawline[ultra thick]}
\caption{test \drawline[red,dashed]}
\end{figure}
\end{document}
由于\drawline
有一个可选参数,因此会自动使用 LaTeX 保护机制;定义如下
\newcommand\drawline[1]{%
\begin{tikzpicture}
\draw[#1] (0pt,0pt) -- (15pt,0pt);
\end{tikzpicture}%
}
然后
\caption{test \drawline{ultra thick}}
第二次运行会失败。在这种情况下,必须使用
\caption{test \protect\drawline{ultra thick}}
或者更好的是,保护命令不受定义本身的影响:
\DeclareRobustCommand\drawline[1]{%
\begin{tikzpicture}
\draw[#1] (0pt,0pt) -- (15pt,0pt);
\end{tikzpicture}%
}
(谢谢约瑟夫·赖特)。
答案2
将 放入tikz
一个框中,然后将框部署在标题中。请注意,通过使用临时框(如下面的第一个 MWE 中所示),它将无法与 很好地配合使用\listoffigures
,但可以通过在 之前部署永久框来规避这种情况\listoffigures
。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{figure}
\setbox0=\hbox{
\begin{tikzpicture}
\draw[black] (0pt,0pt) -- (15pt,0pt);
\end{tikzpicture}
}
\caption{test \box0}
\end{figure}
\end{document}
tikz
因此,要在中使用\listoffigures
,您需要:
\documentclass{article}
\usepackage{tikz}
\newsavebox\mybox
\savebox\mybox{
\begin{tikzpicture}
\draw[black] (0pt,0pt) -- (15pt,0pt);
\end{tikzpicture}
}
\begin{document}
\listoffigures
\begin{figure}[ht]
\caption{test \usebox{\mybox}}
\end{figure}
\end{document}
跟进:
为了回应楼主对宏形式的要求,我在这里分别介绍\prepline{length}
和\showline
创建以及部署该线路。
\documentclass{article}
\usepackage{tikz}
\def\prepline#1{%
\setbox0=\hbox{
\begin{tikzpicture}
\draw[black] (0pt,0pt) -- (#1,0pt);
\end{tikzpicture}
}
}
\def\showline{\box0}
\begin{document}
\begin{figure}
\prepline{15pt}
\caption{test \showline}
\end{figure}
\end{document}