如何使 LaTeX(tabu、hhline)表保持行高?

如何使 LaTeX(tabu、hhline)表保持行高?

我想排版一个跨多列/多页的长表格,并希望表格行保持注册。我的代码基本上是这样的:

\documentclass{book}
\usepackage{pagegrid}
\usepackage{fontspec}
\usepackage{tabu}
\usepackage{hhline}
\usepackage{multicol}
\setlength{\parskip}{0mm}
\setlength{\parindent}{0mm}
\setlength{\arrayrulewidth}{0.15mm}
\setlength{\doublerulesep}{0.5mm}
\begin{document}

\begin{multicols}{3}

{\setlength{\tabcolsep}{2mm}
\begin{tabu} to \linewidth { | X[1,l,m] | }
\hhline{|=|}
1 first line \\
\hhline{|=|}
2 secondline \\
\hhline{|=|}
\end{tabu}}

\vfill
\columnbreak

{\setlength{\tabcolsep}{2mm}
\begin{tabu} to \linewidth { | X[1,l,m] | }
\hhline{|-|}
1 first line \\
\hhline{|-|}
2 secondline \\
\hhline{|-|}
\end{tabu}}

\vfill
\columnbreak

{\setlength{\tabcolsep}{2mm}
\begin{tabu} to \linewidth { | X[1,l,m] | }
\hhline{|~|}
1 first line \\
\hhline{|~|}
2 secondline \\
\hhline{|~|}
\end{tabu}}

\end{multicols}
\end{document}

实际上,这些双行表格确实有 50 行,并且延伸到整个页面高度。我需要在表格的各个位置插入双水平线,当然这些水平线需要空间并增加表格高度 - 这会导致页面上的行不同步。我应该补充一点,每个部分表格在不同点会有不同数量的行,因此在行之间使用“垂直粘合”(如果可能的话)使每行都延伸到页面高度并不是理想的选择。

有什么方法可以强制所有行保持高度?过去,当在 HTML/CSS 中遇到这个问题时,我总是尝试排版所有印刷元素,但在不需要时隐藏它们。这大大简化了事情,因为你不需要进行大量计算,只需在某个点打开需要的内容即可。我不知道在 (Xe)LaTeX 中有什么方法可以做到这一点。

我怎样才能使所有表格行保持同步并“在需要的地方在表格单元格之间添加行”?

答案1

您可以让 hhline 始终使用双行空格:

\documentclass{book}
\usepackage{pagegrid}
\usepackage{fontspec}
\usepackage{tabu}
\usepackage{hhline}
\usepackage{multicol}
\setlength{\parskip}{0mm}
\setlength{\parindent}{0mm}
\setlength{\arrayrulewidth}{0.15mm}
\setlength{\doublerulesep}{0.5mm}
\makeatletter
\def\HH@add#1{\toks@\expandafter{\the\toks@#1\HH@box\z@\z@}}
\makeatletter
\begin{document}

\begin{multicols}{3}

{\setlength{\tabcolsep}{2mm}
\begin{tabu} to \linewidth { | X[1,l,m] | }
\hhline{|=|}
1 first line \\
\hhline{|=|}
2 secondline \\
\hhline{|=|}
\end{tabu}}

\vfill
\columnbreak

{\setlength{\tabcolsep}{2mm}
\begin{tabu} to \linewidth { | X[1,l,m] | }
\hhline{|-|}
1 first line \\
\hhline{|-|}
2 secondline \\
\hhline{|-|}
\end{tabu}}

\vfill
\columnbreak

{\setlength{\tabcolsep}{2mm}
\begin{tabu} to \linewidth { | X[1,l,m] | }
\hhline{|~|}
1 first line \\
\hhline{|~|}
2 secondline \\
\hhline{|~|}
\end{tabu}}

\end{multicols}
\end{document}

相关内容