创建跨越多列或多行的单元格

创建跨越多列或多行的单元格

LaTeX3软件包tabularray提供了一种以键值方式排版表格的新方法。这允许将内容和样式分开,这在很多情况下非常有用。但是,几乎所有的排版表格指南都不是为该tabularray软件包编写的,这使得新用户很难使用该软件包。

这篇文章旨在通过提供一些常见问题的小指南来简化这个问题。我知道,很多信息将类似于 tabularray 文档,其中也提供了很好的例子。但是,这篇文章的目标是指南/教程风格,而不仅仅是文档。


链接指向现有的答案。

如何...

如果列表中缺少或不需要的内容,请添加或删除项目。这也有助于回答者了解哪些主题仍不清楚。


答案提示

  • 简要描述一下您的指南的内容。
  • 给出上下文,说明哪些包“传统上”用于创建输出,例如用于为单元格着色的table选项。xcolor
  • 如果合理的话,请同时提供新旧界面的信息,让用户选择他们喜欢的方法。我发现混合使用两种方法是最灵活的方法。
  • 参考官方文档,这样用户就知道如果需要更多高级功能应该去哪里查找。

PS:我对社区 wiki 帖子的想法还不熟悉,所以如果有什么不对的地方,请随意修改。也许这个列表是不必要的,因为人们也可以使用文档。我只是认为一些简单的指南比整个文档更容易理解。如果这是一个愚蠢的想法,请告诉我。另外,由于我不是母语人士,欢迎您改进我的写作。

答案1

创建跨越多列或多行的单元格


本指南介绍如何使用命令\SetCellcell键创建跨多行的单元格。它专门针对熟悉\multicolumn\multirow命令的用户。


让我们看一个简单的例子 这里。左侧是使用tabular带有和的环境的\multicolumn解决方案\multirow,而右侧显示的是使用tblr环境和\SetCell命令的同一张表。

表格与 tblr

正如您在下面的代码中看到的,语法非常相似。被和\multicolumn{<ncols>}替换。请注意,使用 时不需要对内容使用花括号。 的可选参数接受键和,而强制参数通常用于设置对齐方式,例如、和用于水平对齐,、、和用于垂直对齐。有关对齐的进一步解释,请参阅本答案末尾的注释。\SetCell[c=<ncols>]\multirow{<nrows>}\SetCell[r=<nrows>}\SetCell\SetCellr=<nrows>c=<ncols>lcrjtmbhf

的强制参数\SetCell不仅限于对齐键。它允许使用更多有用的键,例如背景和前景的颜色。请查看文档中的“单元格内容键”表。

重要的在此特定情况下,您可以删除第 1 行“Team sheet”后面的 & 符号,结果仍相同。但是,当行中有内容时,此方法无效。此行为与 不同\multicolumn,因此当某些单元格似乎消失时请记住这一点。处理大型表格时,建议命名未使用的单元格,例如下面的第二个代码示例。

此外,该tblr解决方案的行间垂直间距更大,使表格更易于阅读。间距可以通过强制参数中的几个键来控制,这些键可以在文档中的“行键”表中找到。

%%% Code for tabular
%\usepackage{multirow}
\begin{tabular}{|l|l|l|}
    \hline
    \multicolumn{3}{|c|}{Team sheet} \\
    \hline
    Goalkeeper & GK & Paul Robinson \\ \hline
    \multirow{4}{*}{Defenders} & LB & Lucas Radebe \\
    & DC & Michael Duburry \\
    & DC & Dominic Matteo \\
    & RB & Didier Domi \\ \hline
    \multirow{3}{*}{Midfielders} & MC & David Batty \\
    & MC & Eirik Bakke \\
    & MC & Jody Morris \\ \hline
    Forward & FW & Jamie McMaster \\ \hline
    \multirow{2}{*}{Strikers} & ST & Alan Smith \\
    & ST & Mark Viduka \\
    \hline
\end{tabular}

%%% Code for tblr
%\usepackage{tabularray}
\begin{tblr}{|l|l|l|}
    \hline
    \SetCell[c=3]{c} Team sheet && \\
    \hline
    Goalkeeper & GK & Paul Robinson \\ \hline
    \SetCell[r=4]{l} Defenders some really & LB & Lucas Radebe \\
    & DC & Michael Duburry \\
    & DC & Dominic Matteo \\
    & RB & Didier Domi \\ \hline
    \SetCell[r=3]{l} Midfielders & MC & David Batty \\
    & MC & Eirik Bakke \\
    & MC & Jody Morris \\ \hline
    Forward & FW & Jamie McMaster \\ \hline
    \SetCell[r=2]{l} Strikers & ST & Alan Smith \\
    & ST & Mark Viduka \\
    \hline
\end{tblr}

使用 tabularray 的新 keyval 接口

表格格式化的各个方面也可以通过强制参数中的新 keyval 接口进行控制\begin{tblr}。例如,如果您想要排版与上一个解决方案完全相同的表格tabular,您可以这样做。

\begin{tblr}{
        colspec=lll, rowsep=0pt,
        vlines, hline{1,2,3,7,10,11,13},
        cell{1}{1}={c=3}{c}, cell{3}{1}={r=4}{l},
        cell{7}{1}={r=3}{l}, cell{11}{1}={r=2}{l},
    }
    Team sheet & 1-2 & 1-3 \\
    Goalkeeper & GK & Paul Robinson \\
    Defenders & LB & Lucas Radebe \\
    4-1 & DC & Michael Duburry \\
    5-1 & DC & Dominic Matteo \\
    6-1 & RB & Didier Domi \\
    Midfielders & MC & David Batty \\
    8-1 & MC & Eirik Bakke \\
    9-1 & MC & Jody Morris \\
    Forward & FW & Jamie McMaster \\
    Strikers & ST & Alan Smith \\
    12-1 & ST & Mark Viduka \\
\end{tblr}

当使用多个键时,您必须将列规范放在键中colspecrowsep=0pt删除多余的垂直间距(这只是一个例子,请考虑保留间距,因为它使表格更具可读性)。vlineshline键分别用于垂直线和水平线。 行和\SetCell[<span>{<styles>}单元格处的 被选项 取代。请注意 的花括号。 未使用的单元格也用它们各自的行号和列号编号。这使得在处理大型表格时更容易跟踪 & 符号。这些单元格的内容将被忽略以进行排版。ijcell{i}{j}={<span>}{<styles>}<span>

如您所见,格式现在已完全与内容分离。这非常有用,例如当您从外部资源获取表格数据时。要全面比较这两个接口,请阅读文档中的“旧接口和新接口”表。

您可以根据自己的喜好在自己的环境中混合使用这两种界面tblr。例如,您可以在新界面中选择间距和水平线和垂直线,然后\SetCell在旧界面中使用命令。


以上就是使用该包对多列和多行单元格进行排版的简短介绍 tabularray。如果您认为其中存在错误或缺失,请随时改进此答案。


备注1:对于多行单元格,垂直对齐tmb相同:其中任何一个都会将单元格文本置于中间。如果要将多行单元格的顶部/底部基线与另一列中单行单元格的顶部/底部基线对齐,可以使用hf对齐。

备注2:单行单元格默认垂直对齐方式为t(顶部),多行单元格默认垂直对齐方式为m(中间)。

答案2

为列、行、单元格和线条着色


本指南介绍如何在tblr表格中使用颜色。您将学习如何为列、行、单个单元格以及水平线和垂直线着色。对于熟悉\columncolor\rowcolorcellcolor命令的用户,tabularray将提供类似的命令。


我们来看一个丑陋但丰富多彩的例子。左侧是使用tabular由 定义的命令的环境的 解决方案\usepackage[table]{xcolor},而右侧显示了使用tblr 环境的同一张表。

tabular 与 tblr 彩色表格

摘录一些额外的垂直间距,表格看起来完全相同。在下面的代码中,您还可以看到代码非常相似。\rowcolor和分别被和\cellcolor替换 。请注意,第 1 行不需要,因为颜色是在命令中设置的。\SetRow\SetCell\SetRow\SetCell

\columncolor语法中用 为列着色xcolor。用户可以>在列定义中使用 或定义新的列类型,例如a示例中的列。使用tabularray,您可以使用原始列类型指定颜色 Q。当然,您也可以使用 定义新的列类型\NewColumnType,请参阅列A以获取示例。笔记Q类型支持有用的键,例如垂直对齐、字体颜色等等。请参阅文档中的“列键”表。

环境中水平线和垂直线的外观tabular可以通过诸如\arrayrulewidth和 之类的命令进行自定义\arrayrulecolortabularray提供参见键hlinesvlines分别用于设置水平线和垂直线。 请注意,您不需要 \hline表格内容中的命令。

%%% Code for tabular
%\usepackage[table]{xcolor}
\newcolumntype{a}{ >{\columncolor{yellow!50}} l }
\setlength{\arrayrulewidth}{2pt}
\arrayrulecolor{gray}
\begin{tabular}{|a|>{\columncolor{red!50}}r|r|}
    \hline
    \rowcolor{green} \multicolumn{3}{|c|}{{\LARGE \textcolor{red}{StackExchange Sites}}} \\ \hline
    \rowcolor{blue!50} Site & questions & answers \\ \hline
    Stack Overflow & 22m & 33m \\ \hline
    Mathematics & 1.5m & \cellcolor{magenta} 2m \\ \hline
    Super User & 472k & 684k \\ \hline
    \rowcolor{orange!50} TeX - LaTeX & 228k & 293k \\ \hline
\end{tabular

%%% Code for tblr
%\usepackage{tabularray}
\NewColumnType{A}{Q[l, yellow!50]}
\begin{tblr}{colspec={AQ[r,red!50]r}, hlines={2pt, gray}, vlines={2pt, gray}}
    \SetCell[c=3]{c, green, fg=red, font=\LARGE} StackExchange Sites && \\
    \SetRow{blue!50} Site & questions & answers \\
    Stack Overflow & 22m & 33m \\
    Mathematics & 1.5m & \SetCell{magenta} 2m \\
    Super User &  472k & 684k \\
    \SetRow{orange!50} TeX - LaTeX & 228k & 293k \\
\end{tblr}

评论使用命令时,小线条有时无法正确呈现xcolor。此外,\cline命令不起作用。使用 tabularray语法时不会出现这两个问题。


使用 tabularray 的新 keyval 接口

tabularray还有一个新的 keyval 接口,允许您在 的强制参数中自定义表的格式\begin{tblr}。使用此新语法,可以使用以下方式创建表

\begin{tblr}{
        colspec={lrr}, hlines={2pt, gray}, vlines={2pt, gray},
        column{1} = {yellow!50}, column{2} = {red!50},
        row{2} = {blue!50}, row{Z} = {orange!50},
        cell{1}{1} = {c=3}{c, green, fg=red, font=\LARGE},
        cell{4}{3} = {magenta},
    }
    StackExchange Sites && \\
    Site & questions & answers \\
    Stack Overflow & 22m & 33m \\
    Mathematics & 1.5m & 2m \\
    Super User &  472k & 684k \\
    TeX - LaTeX & 228k & 293k \\
\end{tblr}

您可以分别 使用column和键指定列和行。行和单元格处的被选项 取代 。例如, 将第一行和第一列的单元格设置为跨越 3 列,居中,并带有 背景颜色、字体颜色和字体。有关选项的完整列表,请查看文档中的表格“单元格内容的键”、“行的键”和“列的键”。row\SetCell[<span>{<styles>}ijcell{i}{j}={<span>}{<styles>}cell{1}{1} = {c=3}{c, green, fg=red, font=\LARGE}{c=3}cgreenredLARGE

tblr您可以根据需要 在您的环境中混合使用这两种界面。例如,您可以指定columnsrows键并使用\SetCell自定义单个单元格。


颜色交替行

另一种经常需要的样式是用不同的颜色为交替行着色。 \usepackage[table]{xcolor}您可以使用命令\rowcolors{<start-row>}{<odd-row-color>}{<even-row-color>} 来实现此目的。tabularray提供选择器oddeven,可在rowcolumn键中使用。截至目前,不支持从指定的起始索引指定oddeven。此功能将很快添加(请参阅这里)。同时,您必须覆盖那些不应着色的单元格,如下例所示。

\begin{tblr}{
        colspec={lrr}, hlines,
        row{even} = {blue!20},
        row{odd} = {red!20},
        row{1} = {white, font=\large\bfseries},
    }
    Site & questions & answers \\
    Stack Overflow & 22m & 33m \\
    Mathematics & 1.5m & 2m \\
    Super User &  472k & 684k \\
    TeX - LaTeX & 228k & 293k \\
\end{tblr}

颜色交替行


高级示例

odd和选择器even还可以产生更复杂的模式,例如 棋盘

非常高级的用户还可以使用以下方法定义自定义选择器\NewChildSelector(参见 例子),但这超出了本指南的范围。


以上就是关于如何使用该包进行颜色的简短介绍tabularray。如果您认为其中存在错误或缺失,请随时改进此答案。

相关内容