在图中添加标签和标题

在图中添加标签和标题

看起来像这样问题比较封闭。但是,我感觉那里缺少了一些东西。

figure环境中,\caption单独使用 就很好了,但其真正强大之处在于与 的组合\label。这使用户能够自动枚举文档中的图形并建立交叉引用。

有可能把所有东西结合在一起吗?

也就是说,有一个类似于这样的数字:

|---------------------------|
|                           |
|       <The figure>        |
|                           |
| Figure 1. And its caption |
|---------------------------|

并使用 进行标记\label{fig:1},这样其标题就嵌入到图形本身中(就像链接问题的答案中提供的奇妙可能性一样)。然后使用类似于 的内容\ref{fig:1}来引用此图。

是否可以自动化?以某种方式,让手工编码的标题与\caption++机制进行通信。我不得不说,我甚至不知道从哪里开始解决这个问题\label\ref

答案1

您可以使用该caption包来设置样式,我们称之为overlay保存标题以供以后使用。以下是一个例子:

编辑示例技术略有改变,示例已扩展,现在可使用hyperref

示例输出

\documentclass{article}

\usepackage{tikz,caption}
\usepackage{hyperref}
\usetikzlibrary{calc}
\DeclareCaptionFormat{overlay}{\gdef\capoverlay{#1#2#3\par}}
\DeclareCaptionStyle{overlay}{format=overlay}

\begin{document}

\begin{figure}[htp]
  \centering
  \captionsetup{format=overlay}
  \caption{Example.}
  \begin{tikzpicture}
    \node[anchor=south west,inner sep=0] (image) at (0,0)
    {\includegraphics[width=\linewidth]{example-image-a}};
    \begin{scope}[x={(image.south east)},y={(image.north west)}]
      \draw[white, fill=gray,opacity=0.5] (0,0) rectangle (1,0.15);
      \draw let \p1 = (1,0)
      in node[opacity=0.5,text width=\x1,align=center,color=white] at
      (0.5, 0.075) 
      {\capoverlay};
    \end{scope}
  \end{tikzpicture}
  \label{fig:example}
\end{figure}

\begin{figure}[htp]
  \centering
  \includegraphics[width=3cm]{example-image-a}
  \caption{Non-overlay example}
  \label{fig:non}
\end{figure}

\begin{figure}[htp]
  \centering
  \captionsetup{format=overlay}
  \caption{Example with caption overlay and long placed on a smaller figure.}
  \begin{tikzpicture}
    \node[anchor=south west,inner sep=0] (image) at (0,0)
    {\includegraphics[width=0.7\linewidth]{example-image-a}};
    \begin{scope}[x={(image.south east)},y={(image.north west)}]
      \draw[white, fill=gray,opacity=0.5] (0,0) rectangle (1,0.15);
      \draw let \p1 = (1,0)
      in node[opacity=0.5,text width=\x1,align=center,color=blue] at
      (0.5, 0.075) 
      {\capoverlay};
    \end{scope}
  \end{tikzpicture}
  \label{fig:example2}
\end{figure}

A reference to Figure~\ref{fig:example} and to Figure~\ref{fig:example2}.

\listoffigures

\end{document}

请注意,这需要将标题放在tikz代码之前。它会格式化标题,将其保存在命令中,并在链接问题的代码中重复使用该命令,将文本放置在图形顶部。按照设置,这现在适用于hyperref其他图形,并且不会影响其他图形。您可以通过tikz节点上的标准命令更改标题的格式。

相关内容