我想用这个很好的答案来回答类似的问题如何在表格环境中标记和添加标题 Tikzpicture问题是我想要两张图片并排,每张图片都有一个标题。我复制了 MWE 以获得:
\documentclass{article}
\usepackage{tikz}
\usepackage{caption}
\begin{document}
\listoffigures
\bigskip
\section*{Test table}
\begin{tabular}{lp{4cm}}
\begin{tikzpicture}
\draw [red](0,0) -> (4,0);
\end{tikzpicture}
\captionof{figure}{Picture 1}
\label{tikz1}
&
\begin{tikzpicture}
\draw (0,0) -> (4,0);
\end{tikzpicture}
\captionof{figure}{Picture 2}
\label{tikz2}
\end{tabular}
\
See fig. \ref{tikz1} and \ref{tikz2}.
\end{document}
但这不能编译,错误是
(./captnof.lof)!除了领导者之外,您不能在这里使用“\hrule”。 \caption@hrule ->\hrule @height \z@
l.12 \captionof{figure}{Picture 1}
一旦线
\captionof{figure}{Picture 1}
被注释掉,它确实如此。因此
\captionof
对右图有效,但对左图无效!有办法吗?
答案1
该\captionof
命令要求指定文本宽度。因此,一个临时解决方案是将左列的列类型也设置为p
。但是,这需要我们知道列将是什么样子。由于您使用的是tikz
,因此可以说有一个更好的解决方案:让我们tikz
测量图片并相应地调整文本宽度。这两种解决方案都包含在以下 MWE 中。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\tikzset{caption/.style={insert path={
let \p1=($(current bounding box.east)-(current bounding box.west)$) in
(current bounding box.south) node[below,text width=\x1-4pt,align=center]
{\captionof{figure}{#1}}}}}
\usepackage{caption}
\begin{document}
\listoffigures
\bigskip
\section*{Test table}
\begin{tabular}{p{4cm}p{4cm}}
\begin{tikzpicture}
\draw [red](0,0) -> (4,0);
\end{tikzpicture}
\captionof{figure}{Picture 1}
\label{tikz1}
&
\begin{tikzpicture}
\draw (0,0) -> (4,0);
\end{tikzpicture}
\captionof{figure}{Picture 2}
\label{tikz2}
\end{tabular}
See figs.~\ref{tikz1} and \ref{tikz2}.
\bigskip
\begin{tabular}{cc}
\begin{tikzpicture}
\draw [red](0,0) -> (4,0);
\path[caption={Picture 3.\label{tikz3}}];
\end{tikzpicture}
&
\begin{tikzpicture}
\draw (0,0) -> (4,0);
\path[caption={Picture 4.\label{tikz4}}];
\end{tikzpicture}
\end{tabular}
See figs.~\ref{tikz3} and \ref{tikz4}.
\end{document}