请考虑以下 MWE 并minipage
完全忽略(其唯一目的是利用垂直空间向下推顶部以longtblr
进行演示):
% !TeX encoding = UTF-8
% !TEX TS-program = lualatex
\documentclass[paper=a4]{scrartcl}
\usepackage{tabularray}
\SetTblrInner[tblr,longtblr]{
colspec = {|X[1,m]X[1,m]|},
hlines,
vlines,
}
\begin{document}
\centering
\begin{minipage}[c][16cm][c]{\linewidth}
\centering
minipage to take up plenty of vertical space
(this is meant to push the longtblr way down on the A4 page)
\end{minipage}
\begin{longtblr}{cc} % using this to "break" at page breaks
Table & header \\
table & content \\
table & content \\
table & content \\
\SetCell[r=2]{m} multi
& row \\
& row \#2 \\
table & content \\
table & content \\
table & content \\
table & content \\
\end{longtblr}
\end{document}
我试图解决的问题发生在分页符之前,如果这个例子足够确定的话,恰好就是我开始多行的地方\SetCell[r=2]{m}
。
问题仅仅与longtblr
文档中的有关。屏幕截图演示了该问题(标记的位置):
显然,我希望在分页符处longtblr
表现出以下三种行为之一:
- 从多行退回并使用普通行
- 只需修复垂直对齐,但保留多行行为
- 以某种方式检测分页条件(显然
longtblr
已经有了一些东西)并提前或推迟分页(“拉伸”垂直空间
可能还有其他行为也能产生不错的结果,但这些是我能想到的。
问题
我怎样才能取得不错的成绩没有不得不手动干预——比如——计算“真实”行,然后插入一个手动的分页符?
注意:我知道强制或抑制分页符也会对布局产生不良影响。添加手动的 \pagebreak
就在\SetCell
实现 (3) 之前,但这不是自动化解决方案。同样,我可以只是该实例\SetCell
使用不同的垂直对齐方式,让它像以前一样分页,但从而实现(2)。
答案1
您需要通过以下方式终止除由多行单元格跨越的最后一行之外的所有行\\*
:
% !TeX encoding = UTF-8
% !TEX TS-program = lualatex
\documentclass[paper=a4]{scrartcl}
\usepackage{tabularray}
\SetTblrInner[tblr,longtblr]{
colspec = {|X[1,m]X[1,m]|},
hlines,
vlines,
}
\begin{document}
\centering
\begin{minipage}[c][16cm][c]{\linewidth}
\centering
minipage to take up plenty of vertical space
(this is meant to push the longtblr way down on the A4 page)
\end{minipage}
\begin{longtblr}{cc} % using this to "break" at page breaks
Table & Header \\
table & content \\
table & content \\
table & content \\
\SetCell[r=2]{m} multi & row \\* % <-----
& row \#2 \\
table & content \\
table & content \\
table & content \\
table & content \\
\end{longtblr}
\end{document}
笔记:
终止表格行以\\*
防止在此行之后中断表格。这适用于任何类型的长表格(即,对于包也是如此longtblr
)tabularray
,在包文档的文档中进行了描述longtable
。它是 LaTeX 安装的一部分,也可以在加拿大运输安全局