问题描述
我想并排显示两个具有不同行号的表格,使得表格第一行的顶部边缘位于同一条(假想的)水平线上。
从 TeX 角度来看,这两个表被编码为tblr
包的 s tabularray
。
尝试解决方案
我尝试通过将两个表格作为左单元格和右单元格嵌入另一个tblr
由单个两列行组成的表格中,然后将外部表格单元格的垂直对齐方式设置为“t”来解决该问题。如下所示。
我将以下 LaTeX 代码保存在 中~/Test.tex
。
\documentclass{article}
\usepackage{tabularray}
\begin{document}
\begin{tblr}{Q[c,t]Q[c,t]}
\begin{tblr}{c}
A
\end{tblr}
&
\begin{tblr}{c}
A\\
B
\end{tblr}
\end{tblr}
\end{document}
然后我在终端中执行了以下命令。
> cd ~
> lualatex Test
这导致文件~/Test.pdf
被创建。在 PDF 查看器中打开时,文件显示如下。(我仅截取了显示的相关部分。)
可以看出,这并没有达到预期的效果。如果两个内部表格的第一行的顶部边缘对齐,那么两个字母 A 的对齐方式应该是它们的基线位于同一(假想的)水平线上。但事实并非如此。相反,左侧A
在页面上的位置比右侧低A
。
问题
如何将两个tblr
具有不同行号的表格并排放置在页面上,以使它们的第一行的顶部边缘沿着一条假想的水平线对齐?
答案1
您可以将“baseline
到顶部”(T
)设置为对齐表格:
\documentclass{article}
\usepackage{tabularray}
\begin{document}
\begin{tblr}{cc}
\begin{tblr}[T]{c}
A
\end{tblr}
&
\begin{tblr}[T]{c}
A \\
B
\end{tblr}
\end{tblr}
\end{document}
此选项T
对齐表格的第一行,而t
对齐表格的顶部。有关详细信息,请参阅第 3.1.6 节手动的
答案2
这个答案将解决问题为什么原始帖子中显示的使用规范的尝试Q[c,t]Q[c,t]
失败了。下面描述的实现细节仅用于解释目的;我不知道它们是否反映了包的实际实现tabularray
。
当 的某一行有两个或多个单元格时,这些单元格可以使用垂直对齐规范、和tblr
相对于彼此垂直对齐。(还有和,但它们分别只是和的别名。)t
m
b
h
f
b
t
tblr
将行的每个单元格的内容包装在一个框内,每个单元格一个框。我们将这些框称为定位框. 每个对齐框都有一个基线,并且tblr
这些框沿着它们的基线对齐。
当某个单元格的内容由一行文本组成时,将忽略此单元格的垂直对齐规范,并且对齐框的基线与该单行文本的基线重合。
但是,当某个单元格的内容包含两行或多行文本时,该单元格的对齐框的基线由该单元格的垂直对齐规范(默认情况下为t
)决定:如果规范为t
,则对齐框的基线为顶行的基线;如果规范为b
,则对齐框的基线为底行的基线;如果规范为m
,且行数为奇数,则对齐框的基线为中间行的基线;如果规范为m
,且行数为偶数,则对齐框的基线位于两条中间行基线的中间位置。
每个tblr
都有一个带有基线的边界框。默认情况下,此基线是 边界框的中间。可以使用的选项tblr
指定此基线的位置,该选项可以作为内部规范(即的强制参数)或外部规范(即 的可选参数)传递。此选项的可能值为、、、、和 ,其中 为某个正整数。如果此选项的值为,则 的基线为其边界框的上边缘,如果值为 ,则它为的第一行的基线,如果 为,则它为边界框的垂直中间,如果 为 ,则它为边界框的下边缘,如果 为 ,则它为 的底行的基线,如果 为 ,则它为的第行的基线。tblr
baseline
tblr
tblr
t
T
m
b
B
<n>
n
t
tblr
T
tblr
m
b
tblr
B
tblr
<n>
tblr
n
综合所有这些信息,当 一个tblr
包含两个或更多单元格的行,并且其中一个单元格的内容本身是tblr
,那么,无论此单元格的垂直对齐规范如何,此单元格的对齐框的基线都将与为 inner 指定的基线(明确或默认)重合tblr
,因为此单元格的内容由一行文本组成,即包含单个框的行: inner的边界框。因此,这条线的基线就是 inner的边界框tblr
的基线。tblr
将其应用到原始帖子中的示例,每个 externaltblr
的单元格都由一行文本组成,该行文本包含相应的 inner tblr
。因此,tblr
这些单元格的 external 垂直对齐规范将被忽略,并且两个单元格的对齐框的基线分别设置为与这些行的基线重合。反过来,这些基线与相应 innertblr
的边界框的基线重合。由于没有为两个 inner 明确指定基线tblr
,因此它们的基线默认设置为m
,即,它们的基线位于各自边界框的垂直中间。因此,两个表沿各自的垂直中间垂直对齐。
答案3
在某些情况下,我会明确将baseline
每个子表的设置为第 1 行,并在这些标题上应用内部对齐。例如,下面的表格包含具有多行不同大小的标题,而Q[c,b]
将表格与每个标题的底线对齐。
\documentclass{article}
\usepackage{tabularray}
\begin{document}
\begin{tblr}{c}
\begin{tblr}{
baseline=1,
colspec={Q[c,b]},
hline{2},
}
{Header Line 1\\Header Line 2\\Header Line 3} \\
Line 1 \\
Line 2
\end{tblr}
&
\begin{tblr}{
baseline=1,
colspec={Q[c,b]},
hline{2},
}
{Header Line 1\\Header Line 2} \\
Line 1 \\
Line 2 \\
Line 3
\end{tblr}
\end{tblr}
\end{document}