如何在 \multicolumn 之前插入 \pagebreak?

如何在 \multicolumn 之前插入 \pagebreak?

在长表中,通常可以\pagebreak在行前插入 。但是,如果该行以使用\noalign(like\multicolumn\rowcolor)的命令开头\pagebreak,则会导致“放错 \noalign”错误。

我尝试\\在之后插入一个\pagebreak但是会插入一个不需要的空行。

我尝试通过插入负空间来摆脱空行,\pagebreak\\[-\baselineskip]\baselineskip似乎是 0pt。

在我的帮助下,\showthe\baselineskip我发现\pagebreak\\[-\arraystretch\dimexpr12pt\relax]只要没有人改变字体大小,这就可以实现我想要的效果。

如何在不硬编码 12pt 的情况\pagebreak下在 a 前面正确插入 a?\multicolumn

\documentclass{article}
\usepackage{ltablex}
\usepackage[table]{xcolor}
\newcolumntype{L}{>{\raggedright\arraybackslash}X}

\colorlet{sectionbg}{gray!20}
\renewcommand{\arraystretch}{1.5}
\newcommand{\eol}{\\\hline}
\renewcommand{\section}[1]{\rowcolor{sectionbg}\multicolumn2{|l|}{#1}\eol}

\keepXColumns

%TODO: how do I avoid hardcoding the 12pt?
\newcommand{\ltpagebreak}{\pagebreak\\[-\arraystretch\dimexpr12pt\relax]}

\begin{document}
    \begin{tabularx}{.5\linewidth}{|lL|}
    \hline\endhead
    \section{Section~1}
        1 & Line A \eol
        2 & Line B \eol
        3 & Line C \eol
    \ltpagebreak
    \section{Section~2}
        4 & Line D \eol
        5 & Line E \eol
        6 & Line F \eol
    \section{Section~3}
        7 & Line G \eol
        8 & Line H \eol
        9 & Line I \eol
    \end{tabularx}
\end{document}

答案1

tabularx 编译两次表格,第一次进行一些测量,这不像分页符。您可以使用以下测试避免这种情况(这有点 hacky,但 tabularx 缺少更好的测试条件。

关于 baselineskip:在表格中,您可以使用 访问它\normalbaselineskip。并考虑直接使用 xltabular 而不是 ltablex。xltabular 得到维护。

\documentclass{article}
\usepackage{ltablex}
\usepackage[table]{xcolor}
\newcolumntype{L}{>{\raggedright\arraybackslash}X}

\colorlet{sectionbg}{gray!20}
\renewcommand{\arraystretch}{1.5}
\newcommand{\eol}{\\\hline}
\renewcommand{\section}[1]{\rowcolor{sectionbg}\multicolumn2{|l|}{#1}\eol}

\keepXColumns

%TODO: how do I avoid hardcoding the 12pt?
\let\jakunTXtest\write
\newcommand{\ltpagebreak}{\ifx\jakunTXtest\write \pagebreak\fi}


\begin{document}
    \begin{tabularx}{.5\linewidth}{|lL|}
    \hline\endhead
    \section{Section~1}
        1 & Line A \eol
        2 & Line B \eol
        3 & Line C \eol
    \ltpagebreak
    \section{Section~2}
        4 & Line D \eol
        5 & Line E \eol
        6 & Line F \eol
    \section{Section~3}
        7 & Line G \eol
        8 & Line H \eol
        9 & Line I \eol
    \end{tabularx}
\end{document}

相关内容