看起来像这样问题比较封闭。但是,我感觉那里缺少了一些东西。
在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
节点上的标准命令更改标题的格式。