类似这样的问题longtable 中的对齐 很常见。一种可能的解决方案是使用multirow
单元格,其中带有选项t
或b
单元格内容与单元格的顶部或底部对齐。这里的问题是设置相邻单元格中的文本行数。可以通过手动计数行来确定,但最好使用自动计数。
@David Carlisle 在编辑我关于上述问题的回答时展示了一个优雅的解决方案,他展示了endgraf
宏的使用。这个解决方案工作得很好,但是,我注意到一个有点烦人的问题:它还会在单元格中插入空行:
\documentclass{scrbook}
\usepackage{multirow, xltabular}
\newcolumntype{L}{>{\raggedright\arraybackslash}X}
\usepackage{lipsum}
\begin{document}
\begin{xltabular}{\linewidth}{@{} l|L<{\endgraf\xdef\zzz{\the\prevgraf}}@{}c @{}}
Column 1 & Column 2 & Column 3 \\ \hline
top & \lipsum[1] & \multirow[b]{\zzz}{*}{bottom} \\ \hline
top & \lipsum[11] & \multirow[b]{\zzz}{*}{bottom} \\ \hline
\end{xltabular}
\end{document}
有没有办法消除这个垂直空间?
答案1
LaTeX在单元格末尾X
(经过p
伪装)插入一个\strut
。就你的情况而言,这种情况发生在段落形成之后。
您可以通过添加负垂直空间来删除所创建的空白行。
\documentclass{scrbook}
\usepackage{multirow, xltabular}
\usepackage{lipsum}
\newcolumntype{L}{>{\raggedright\arraybackslash}X}
\newcommand{\countlines}[1]{%
\vspace{-\normalbaselineskip}\strut
\endgraf
\xdef#1{\the\prevgraf}%
}
\begin{document}
\begin{xltabular}{\linewidth}{@{} l|L<{\countlines{\zzz}}@{}c @{}}
Column 1 & Column 2 & Column 3 \\ \hline
top & \lipsum[1] & \multirow[b]{\zzz}{*}{bottom} \\ \hline
top & \lipsum[11] & \multirow[b]{\zzz}{*}{bottom} \\ \hline
\end{xltabular}
\end{document}