我正在尝试在 LaTeX 中创建一个表格,其中包含与表格其余部分高度相同的多行。此表格在我的文档中出现了很多次。问题是第二行可以包含不同数量的换行符。但多行包会预先获取行数而不是总行数。通常每次使用此表格时,我都必须计算实际行数并将数字编辑到多行选项中。
现在我正在寻找一种方法来计算行数并自动调整多行。也许计数器会有所帮助?我已经尝试使用表行计数器来实现这种可能性,并且效果很好(第二次编译后)。类似的选项可以提前获取表内的所有行,这很棒。在 Google 上,我找到了带有选项 edtable 的 lineno 包。这可能有帮助,但我不知道如何使用它来解决我的问题。有人有办法解决这个问题吗?
\documentclass[a4paper,pagesize]{scrartcl}
\usepackage{tabularx}
\usepackage{graphicx}
\usepackage{multirow}
\usepackage{hhline}
\usepackage{array}
\usepackage[edtable]{lineno} %% Could be helpful?
\newcounter{tabline}
\newcolumntype{n}{>{\refstepcounter{tabline}\thetabline\enspace}l}
\begin{document}
\begin{table}[ht] \centering
\begin{tabular}{| n | >{\centering\arraybackslash}p{.4\textwidth} | > {\centering\arraybackslash}p{.4\textwidth} |}
\hline
TEST & TEST & \multirow{\ref{FOO}}{*} {\includegraphics[width=.4\textwidth]{example-image-golden}} \\ \hhline{--~|}
TEST & TEST & \\ \hhline{--~|}
TEST & TEST \linebreak HERE IS A LINEBREAK & \\ \hhline{--~|}
TEST & TEST & \\ \hhline{--~|}
TEST & TEST & \\ \hhline{--~|}
TEST & TEST \linebreak HERE IS ONE TOO & \\ \hhline{--~|}
TEST & TEST \linebreak AND ANOTHER ONE & \\ \hhline{--~|}
TEST & TEST & \\ \hhline{--~|}
TEST\label{FOO} & TEST & \\ \hline
\end{tabular}
\end{table}
The table contains~\ref{FOO} rows. \\
\end{document}
答案1
\getrefnumber
首先,从refcount
或包中使用通常更安全hyperref
。
要将某个东西放在multirow
字段的中心,需要使用参数fixup
(其行为方式很神秘)。使用 a\raisebox
填充整个空间并将图像放在中心要容易得多。无论哪种情况,您都需要知道字段的高度multirow
。这可以使用 s 来完成\tikzmark
。
\documentclass[a4paper,pagesize]{scrartcl}
\usepackage{tabularx}
\usepackage{graphicx}
\usepackage{multirow}
\usepackage{hhline}
\usepackage{array}
\usepackage[edtable]{lineno} %% Could be helpful?
\usepackage{refcount}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\newcounter{tabline}
\newcolumntype{n}{>{\refstepcounter{tabline}\thetabline\enspace}l}
\newlength{\tabsize}
\begin{document}
\begin{table}[ht]
\begin{tikzpicture}[remember picture,overlay]
\coordinate (top) at (pic cs:top);% possibly redundant
\coordinate (bottom) at (pic cs:bottom);
\pgfextracty{\global\tabsize}{\pgfpointdiff{\pgfpointanchor{bottom}{center}}{\pgfpointanchor{top}{center}}}%
\end{tikzpicture}
\addtolength{\tabsize}{0.6\baselineskip}% tweak centering
\centering
\begin{tabular}{| n | >{\centering\arraybackslash}p{.4\textwidth} | > {\centering\arraybackslash}p{.4\textwidth} |}
\hline
TEST & TEST & \tikzmark{top}\multirow{\getrefnumber{FOO}}{*}{\raisebox{-0.5\height}[0.5\tabsize][0.5\tabsize]% center image in field
{\includegraphics[width=.4\textwidth]{example-image-golden}}} \\ \hhline{--~|}
TEST & TEST & \\ \hhline{--~|}
TEST & TEST \linebreak HERE IS A LINEBREAK & \\ \hhline{--~|}
TEST & TEST & \\ \hhline{--~|}
TEST & TEST & \\ \hhline{--~|}
TEST & TEST \linebreak HERE IS ONE TOO & \\ \hhline{--~|}
TEST & TEST \linebreak AND ANOTHER ONE & \\ \hhline{--~|}
TEST & TEST & \\ \hhline{--~|}
TEST\label{FOO} & TEST & \tikzmark{bottom} \\ \hline
\end{tabular}
\end{table}
The table contains~\ref{FOO} rows. \\
\end{document}