这个问题是跟进上一个问题的:在主长表的单元格中垂直居中子表。
我正在使用以下代码:
\documentclass{article}
\usepackage{longtable}
\usepackage{array}
\usepackage{xparse}
\usepackage{lipsum}
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}}
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}
\newcolumntype{R}[1]{>{\raggedleft\arraybackslash}p{#1}}
\NewDocumentCommand{\TB}{O{c} m O{c}}{%
\begin{tabular}[#1]{@{}#3@{}}#2\end{tabular}
}
\renewcommand*{\arraystretch}{1.15}
\begin{document}
\begin{longtable}{|L{6cm}|C{2cm}|C{2cm}|}
\caption{Your table caption} \label{tab:my_label} \\
\hline
header 1 & header 2 & header 3 \\
\hline
\endhead
\lipsum[1] & \TB{a1\\a2} & \TB{b1\\b2\\b3} \\
\hline
row2 & a3 & \TB[t]{b4\\b5} \\
\hline
row3 & a4 & \TB[b]{b6\\b7} \\
\hline
\end{longtable}
\end{document}
不幸的是,第一行的单元格没有垂直居中:
你能帮帮我吗?谢谢!
答案1
L
我建议您将、C
和R
列类型的底层列类型从 切换p
为m
。 (m
我想是“中间”的助记符。)
\documentclass{article}
\usepackage{longtable,array,xparse,lipsum}
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}m{#1}}
\newcolumntype{C}[1]{>{\centering\arraybackslash}m{#1}}
\newcolumntype{R}[1]{>{\raggedleft\arraybackslash}m{#1}}
\NewDocumentCommand{\TB}{O{c} m O{c}}{%
\begin{tabular}[#1]{@{}#3@{}}#2\end{tabular}
}
\renewcommand*{\arraystretch}{1.15}
\begin{document}
\begin{longtable}{|L{6cm}|C{2cm}|C{2cm}|}
\caption{Your table caption} \label{tab:my_label} \\
\hline
header 1 & header 2 & header 3 \\
\hline
\endhead
\lipsum[1][1-8] & \TB{a1\\a2} & \TB{b1\\b2\\b3} \\
\hline
\end{longtable}
\end{document}
答案2
像这样?
(红线表示页面布局)
通过使用longtblr
包tabularray
,MWE 的代码简单而简洁:
\documentclass{article}
%--------------- show page layout. don't use in a real document!
\usepackage{showframe}
\renewcommand\ShowFrameLinethickness{0.15pt}
\renewcommand*\ShowFrameColor{\color{red}}
%
\usepackage{lipsum} % for dummy text
%---------------------------------------------------------------%
\usepackage{ragged2e}
\usepackage{tabularray}
\SetTblrStyle{contfoot}{font=\small\itshape}
\begin{document}
\begin{longtblr}[
caption = {Your table caption},
label = {tab:my_label}
]{hlines, vlines,
colspec = {X[m, cmd={\RaggedRight\hspace{0pt}}] *{2}{Q[c, m]}},
rowhead = 1
}
header 1 & header 2 & header 3 \\
% table body
\lipsum[1] & {a1\\a2} & {b1\\b2\\b3} \\
row2 & a3 & {b4\\b5} \\
row3 & a4 & {b6\\b7} \\
\end{longtblr}
\end{document}
编辑:
- 正如您所看到的,我擅自对您的表格进行了一点重新设计,根据我的意见,这使得表格更漂亮:
- 最后两列有自然宽度,
- 第一列的宽度占据了其余的宽度
\textwidth
。
- 通过使用和列规范
m
中的选项,单元格中的内容垂直居中。X
Q
- 有关
tabularray
软件包的更多详细信息,请参阅软件包文档,其中包含简明的解释和大量示例。您的问题可能对以下内容感兴趣: - 除了标准
tabular
对齐c
(水平居中)之外l
,还r
引入了f
(在单元格底部)、h
(在单元格顶部)和m
(在中间,垂直居中),它们也可以用作和Q
单元格中的选项X
(稍后从包中了解tabularx
) - 对于手动拆分单元格的内容,引入了简单的语法
{<first line>\\<second line>\\ ... }
- 对于多列和多行单元格的定义
SetCell[c=<number od columns>]{<aligning of contents} cell content
和SetCell[r=<number od columns>]{<aligning of contents} cell content
- 其他有用的功能包括:
- 自动添加继续下一页的长表格标题和“表格脚注继续下页
rowhead = <number>
包含列标题的行的重复由表格序言中的指令决定。