在图片标题中绘制 tikzpicture

在图片标题中绘制 tikzpicture

我想在图片的标题内制作一个小的 tikzpicture,也就是想在标题中创建一个图例。我已阅读4.9.6 Legends with \label and \refpgfplots 手册中的部分内容。但是我将我的图编译为 .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}

相关内容