如何将两个 tabularray 表并排放置以使它们的顶部边缘对齐?

如何将两个 tabularray 表并排放置以使它们的顶部边缘对齐?

问题描述

我想并排显示两个具有不同行号的表格,使得表格第一行的顶部边缘位于同一条(假想的)水平线上。

从 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相对于彼此垂直对齐。(还有和,但它们分别只是和的别名。)tmbhfbt

tblr将行的每个单元格的内容包装在一个框内,每个单元格一个框。我们将这些框称为定位框. 每个对齐框都有一个基线,并且tblr这些框沿着它们的基线对齐。

当某个单元格的内容由一行文本组成时,将忽略此单元格的垂直对齐规范,并且对齐框的基线与该单行文本的基线重合。

但是,当某个单元格的内容包含两行或多行文本时,该单元格的对齐框的基线由该单元格的垂直对齐规范(默认情况下为t)决定:如果规范为t,则对齐框的基线为顶行的基线;如果规范为b,则对齐框的基线为底行的基线;如果规范为m,且行数为奇数,则对齐框的基线为中间行的基线;如果规范为m,且行数为偶数,则对齐框的基线位于两条中间行基线的中间位置。

每个tblr都有一个带有基线的边界框。默认情况下,此基线是 边界框的中间。可以使用的选项tblr指定此基线的位置,该选项可以作为内部规范(即的强制参数)或外部规范(即 的可选参数)传递。此选项的可能值为、、、、和 ,其中 为某个正整数。如果此选项的值为,则 的基线为其边界框的上边缘,如果值为 ,则它为的第一行的基线,如果 为,则它为边界框的垂直中间,如果 为 ,则它为边界框的下边缘,如果 为 ,则它为 的底行的基线,如果 为 ,则它为的第行的基线。tblrbaselinetblrtblrtTmbB<n>nttblrTtblrmbtblrBtblr<n>tblrn

综合所有这些信息,当 一个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}

在此处输入图片描述

相关内容