该LaTeX3
软件包tabularray
提供了一种以键值方式排版表格的新方法。这允许将内容和样式分开,这在很多情况下非常有用。但是,几乎所有的排版表格指南都不是为该tabularray
软件包编写的,这使得新用户很难使用该软件包。
这篇文章旨在通过提供一些常见问题的小指南来简化这个问题。我知道,很多信息将类似于 tabularray 文档,其中也提供了很好的例子。但是,这篇文章的目标是指南/教程风格,而不仅仅是文档。
链接指向现有的答案。
如何...
- 使用基本语法创建简单表格?
- 创建跨越多列和多行的单元格?
- 使用新旧接口?
- 为列、行、单元格和线条着色?
- 创建自定义列和行类型?
- 用于
longtblr
创建跨越多页的表格? - 使用模板和样式来定制表格外观?
- 使用
booktabs
命令排版表格? - 用于
siunitx
带有数字输入的列?
如果列表中缺少或不需要的内容,请添加或删除项目。这也有助于回答者了解哪些主题仍不清楚。
答案提示
- 简要描述一下您的指南的内容。
- 给出上下文,说明哪些包“传统上”用于创建输出,例如用于为单元格着色的
table
选项。xcolor
- 如果合理的话,请同时提供新旧界面的信息,让用户选择他们喜欢的方法。我发现混合使用两种方法是最灵活的方法。
- 参考官方文档,这样用户就知道如果需要更多高级功能应该去哪里查找。
PS:我对社区 wiki 帖子的想法还不熟悉,所以如果有什么不对的地方,请随意修改。也许这个列表是不必要的,因为人们也可以使用文档。我只是认为一些简单的指南比整个文档更容易理解。如果这是一个愚蠢的想法,请告诉我。另外,由于我不是母语人士,欢迎您改进我的写作。
答案1
创建跨越多列或多行的单元格
本指南介绍如何使用命令\SetCell
和cell
键创建跨多行的单元格。它专门针对熟悉\multicolumn
和\multirow
命令的用户。
让我们看一个简单的例子
这里。左侧是使用tabular
带有和的环境的\multicolumn
解决方案\multirow
,而右侧显示的是使用tblr
环境和\SetCell
命令的同一张表。
正如您在下面的代码中看到的,语法非常相似。被和\multicolumn{<ncols>}
替换。请注意,使用 时不需要对内容使用花括号。 的可选参数接受键和,而强制参数通常用于设置对齐方式,例如、和用于水平对齐,、、和用于垂直对齐。有关对齐的进一步解释,请参阅本答案末尾的注释。\SetCell[c=<ncols>]
\multirow{<nrows>}
\SetCell[r=<nrows>}
\SetCell
\SetCell
r=<nrows>
c=<ncols>
l
c
r
j
t
m
b
h
f
的强制参数\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}
当使用多个键时,您必须将列规范放在键中colspec
。
rowsep=0pt
删除多余的垂直间距(这只是一个例子,请考虑保留间距,因为它使表格更具可读性)。vlines
和hline
键分别用于垂直线和水平线。 行和\SetCell[<span>{<styles>}
单元格处的 被选项 取代。请注意 的花括号。 未使用的单元格也用它们各自的行号和列号编号。这使得在处理大型表格时更容易跟踪 & 符号。这些单元格的内容将被忽略以进行排版。i
j
cell{i}{j}={<span>}{<styles>}
<span>
如您所见,格式现在已完全与内容分离。这非常有用,例如当您从外部资源获取表格数据时。要全面比较这两个接口,请阅读文档中的“旧接口和新接口”表。
您可以根据自己的喜好在自己的环境中混合使用这两种界面tblr
。例如,您可以在新界面中选择间距和水平线和垂直线,然后\SetCell
在旧界面中使用命令。
以上就是使用该包对多列和多行单元格进行排版的简短介绍
tabularray
。如果您认为其中存在错误或缺失,请随时改进此答案。
备注1:对于多行单元格,垂直对齐t
、m
和b
相同:其中任何一个都会将单元格文本置于中间。如果要将多行单元格的顶部/底部基线与另一列中单行单元格的顶部/底部基线对齐,可以使用h
或f
对齐。
备注2:单行单元格默认垂直对齐方式为t
(顶部),多行单元格默认垂直对齐方式为m
(中间)。
答案2
为列、行、单元格和线条着色
本指南介绍如何在tblr
表格中使用颜色。您将学习如何为列、行、单个单元格以及水平线和垂直线着色。对于熟悉\columncolor
、
\rowcolor
和cellcolor
命令的用户,tabularray
将提供类似的命令。
我们来看一个丑陋但丰富多彩的例子。左侧是使用tabular
由 定义的命令的环境的 解决方案\usepackage[table]{xcolor}
,而右侧显示了使用tblr
环境的同一张表。
摘录一些额外的垂直间距,表格看起来完全相同。在下面的代码中,您还可以看到代码非常相似。\rowcolor
和分别被和\cellcolor
替换 。请注意,第 1 行不需要,因为颜色是在命令中设置的。\SetRow
\SetCell
\SetRow
\SetCell
\columncolor
语法中用 为列着色xcolor
。用户可以>
在列定义中使用 或定义新的列类型,例如a
示例中的列。使用tabularray
,您可以使用原始列类型指定颜色
Q
。当然,您也可以使用 定义新的列类型\NewColumnType
,请参阅列A
以获取示例。笔记列Q
类型支持有用的键,例如垂直对齐、字体颜色等等。请参阅文档中的“列键”表。
环境中水平线和垂直线的外观tabular
可以通过诸如\arrayrulewidth
和 之类的命令进行自定义\arrayrulecolor
。tabularray
提供参见键hlines
和vlines
分别用于设置水平线和垂直线。 请注意,您不需要
\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>}
i
j
cell{i}{j}={<span>}{<styles>}
cell{1}{1} = {c=3}{c, green, fg=red, font=\LARGE}
{c=3}
c
green
red
LARGE
tblr
您可以根据需要 在您的环境中混合使用这两种界面。例如,您可以指定columns
和rows
键并使用\SetCell
自定义单个单元格。
颜色交替行
另一种经常需要的样式是用不同的颜色为交替行着色。
\usepackage[table]{xcolor}
您可以使用命令\rowcolors{<start-row>}{<odd-row-color>}{<even-row-color>}
来实现此目的。tabularray
提供选择器odd
和even
,可在row
和
column
键中使用。截至目前,不支持从指定的起始索引指定odd
和even
。此功能将很快添加(请参阅这里)。同时,您必须覆盖那些不应着色的单元格,如下例所示。
\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
。如果您认为其中存在错误或缺失,请随时改进此答案。