Tabularray 一个宏包教你搞定所有表格
我们用 LaTeX 制作表格,通常用到的是 tabular, tabularx 和 array 环境,本文将着重分享 tabularray 制作表格的方法,同时与前三者做简单的对比。在使用 tabularray 宏包的时候,应用的环境是 tblr( top-bottom-left-right 的缩写),本文测试文档代码如下:
完整源代码地址:
https://www.latexstudio.net/index/details/index/mid/4338.html
\documentclass [UTF8,no-math,12pt,openany,table,dvipsnames,svgnames] {article} \usepackage [centering,top=0.5in,bottom=0.5in,right=0.8in,left=0.8in,headsep=25pt, headheight=20pt] {geometry} \usepackage {ctex,multirow,xcolor} \usepackage {tabularray} \begin {document} \begin {tabular} {lccr} %% tabular环境 \hline Alpha & Beta & Gamma & Delta \\ \hline Epsilon & Zeta & Eta & Theta \\ \hline Iota & Kappa & Lambda & Mu \\ \hline \end {tabular} \end {document}
一、简单比较
相较于一般常用的 tabular, tabularx 和 array 环境, tblr 在表格间隙等自动调整得更好更美观。
\begin {tabular} {lccr} \hline Alpha & Beta & Gamma & Delta \\ \hline Epsilon & Zeta & Eta & Theta \\ \hline Iota & Kappa & Lambda & Mu \\ \hline \end {tabular}
\begin {tblr} {lccr} \hline Alpha & Beta & Gamma & Delta \\ \hline Epsilon & Zeta & Eta & Theta \\ \hline Iota & Kappa & Lambda & Mu \\ \hline \end {tblr}
\begin {array} {lccr} \hline Alpha & Beta & Gamma & Delta \\ \hline Epsilon & Zeta & Eta & Theta \\ \hline Iota & Kappa & Lambda & Mu \\ \hline \end {array}
二、单元格折行
相较于常用的 tabular, tabularx 和 array 环境, tblr 环境单元格折行更为容易,同一单元格通过{第一行\ 第二行\第三行}就能实现,而以 tabular 为例的则通过控制列宽或者使用 multirow 环境实现折行(当然还有其他方法)。
\begin {tblr} {|l|c|r|} \hline Left & {Center\\ Cent\\ C} & {Right\\ R}\\ \hline {L \\ Left} & {C\\ Cent\\ Center}& R\\ \hline \end {tblr}
\begin {tabular} {|p{20pt} \raggedright }|p{30pt}\centering }|p{25pt}\raggedleft }|}\hline Left & Center Cent C & Right R\\ \hline L Left & C Cent Center & R \\ \hline \end {tabular}
三、单元格折行对齐
tblr 环境的单元折行对齐主要考虑左、右、上、下以及居中对齐,同时用 Q 作为一个默认的初始列(对于每一个列的参数设置都基于 Q 列基础上)。
\begin {tblr} {|Q[l,t]|Q[c,m]|Q[r,b]|} \hline {Top Baseline \\ Left Left} & Middle Center & {Right Right \\ Bottom Baseline} \\ \hline \end {tblr}
在 tblr 环境中,可以通过 h、t、m、b 和 f 来设置单列的每个单元格上下对齐,同时可以选择每个列的宽参数。
\begin {tblr} {|Q[h,2.5em]|Q[t,2.5em]|Q[m,2.5em]|Q[b,2.5em]|Q[f,2.5em]|} \hline {row\\ head} & {top\\ line} & {middle} & {line\\ bottom} & {row\\ foot} \\ \hline {row\\ head} & {top\\ line} & {11\\ 22\\ mid\\ 44\\ 55} & {line\\ bottom} & {row\\ foot} \\ \hline \end {tblr}
四、多行合并
在 tabular 环境中,我们通常是通过命令:\mutilrow[]
}{}{合并问题内容}
来进行合并,而 tblr 环境中合并则是通过\SetCell[r=行数]{对齐方式,列宽
命令来实现。两者对比如下:
\begin {tabular} {|l|l|l|l|} \hline \multirow [t] {4} {1.5cm} {Multirow Cell One} & Alpha &\multirow [b] {4} {1.5cm} {Multirow Cell Two} & Alpha \\ & Beta & & Beta \\ & Gamma & & Gamma \\ & Delta & & Delta \\ \hline \end {tabular}
\begin {tblr} {|l|l|l|l|} \hline \SetCell [r=4] {h,1.5cm} Multirow Cell One & Alpha &\SetCell [r=4] {f,1.5cm} Multirow Cell Two & Alpha \\ & Beta & & Beta \\ & Gamma & & Gamma \\ & Delta & & Delta \\ \hline \end {tblr}
值得一提的是,我们在使用 tabular 环境时,单元格合并我们需要导入 multirow 宏包,但是 tblr 环境中,tabularray 自带了单元格合并功能,且在上下垂直对齐等更加的美观。
\begin {tabular} {|l|m{4em} |}\hline \multirow [c] {4} {1.5cm} {Multirow} & Alpha \\ & Beta \\ & Gamma \\ & Delta Delta Delta \\ \hline \end {tabular}
\begin {tblr} {|l|m{4em} |}\hline \SetCell [r=4] {m,1.5cm} Multirow & Alpha \\ & Beta \\ & Gamma \\ & Delta Delta Delta \\ \hline \end {tblr}
五、多列合并
\multicolumn{}{}{合并内容}
值得注意的是我们在合并的过程中很可能将合并内容的竖线合并掉,同时在合并过程中,涉及到合并多行多列时,还需要用到多行合并命令:
\multicolumn {} {} {\multirow{行数} {*} {合并内容} }
在 tblr 环境中,只需要\SetCell,不加入复杂的参数选项设置。
\begin {tabular} {|c|c|c|c|c|} \hline \multirow {2}
{*} {2 Rows} & \multicolumn {2} {c|} {2 Columns} & \multicolumn {2} {c|} {\multirow{2} {*} {2 Rows 2 Columns} } \\ \cline {2-3} & 2-2 & 2-3 & \multicolumn {2} {c|} {} \\ \hline 3-1 & 3-2 & 3-3 & 3-4 & 3-5 \\ \hline \end {tabular}
\begin {tblr} {|c|c|c|c|c|} \hline \SetCell [r=2] {c} 2 Rows & \SetCell [c=2] {c} 2 Columns & & \SetCell [r=2,c=2] {c} 2 Rows 2 Columns & \\ \hline & 2-2 & 2-3 & & \\ \hline 3-1 & 3-2 & 3-3 & 3-4 & 3-5 \\ \hline \end {tblr}
\begin {tblr} {|ll|c|rr|} \hline \SetCell [r=3,c=2] {h} r=3 c=2 & 1-2 & \SetCell [r=2,c=3] {r} r=2 c=3 & 1-4 & 1-5 \\ 2-1 & 2-2 & 2-3 & 2-4 & 2-5 \\ \hline 3-1 & 3-2 & MIDDLE & \SetCell [r=3,c=2] {f} r=3 c=2 & 3-5 \\ \hline \SetCell [r=2,c=3] {l} r=2 c=3 & 4-2 & 4-3 & 4-4 & 4-5 \\ 5-1 & 5-2 & 5-3 & 5-4 & 5-5 \\ \hline \end {tblr}
六、行列类型
Tabularray 宏包支持所有普通行列类型,并有可扩展的 Q(行) 和 X (列)类型,通过在可扩展行列类型赋予参数值对表格进行调整和改进。
\begin {tblr} {|X[2,l]|X[3,l]|X[1,r]|X[r]|} \hline Alpha & Beta & Gamma & Delta \\ \hline \end {tblr}
\begin {tblr} {colspec={Q[l]Q[c]Q[r]} ,rowspec={|Q[t]|Q[m]|Q[b]|}} {Alpha \\ Alpha} & Beta & Gamma \\ Delta & Epsilon & {Zeta \\ Zeta} \\ Eta & {Theta \\ Theta} & Iota \\ \end {tblr}
七、表格的横、竖线
tblr 中横、竖线的粗细、颜色参数设置如下:
\begin {tblr} {|l|[dotted]|[2pt]c|r|[solid]|[dashed]|} \hline One & Two & Three \\ \hline \hline [dotted] \hline Four & Five & Six \\ \hline [dashed] \hline [1pt] Seven & Eight & Nine \\ \hline \end {tblr}
还可以通过 hlines 和 vlines 去设置,下面给出相关案例。
\begin {tblr} {hlines,vlines} Alpha & Beta & Gamma & Delta \\ Epsilon & Zeta & Eta & Theta \\ Iota & Kappa & Lambda & Mu \\ \end {tblr}
\begin
{tblr} { hlines = {1pt,solid} , vlines = {red3,dashed},} Alpha & Beta & Gamma & Delta \\ Epsilon & Zeta & Eta & Theta \\ Iota & Kappa & Lambda & Mu \\ \end {tblr}
\begin {tblr} { vlines = {1,3,5} {dashed} , vlines = {2,4}{solid}, } Alpha & Beta & Gamma & Delta \\ Epsilon & Zeta & Eta & Theta \\ Iota & Kappa & Lambda & Mu \\ Nu & Xi & Omicron & Pi \\ Rho & Sigma & Tau & Upsilon \\ \end {tblr}
八、表格的颜色
我们可以设置表格横、竖线的颜色、粗细。
\begin {tblr} {colspec={lcr} , rowspec={|[2pt,green7]Q|[teal7]Q|[green7]Q|[3pt,teal7]}} Alpha & Beta & Gamma \\ Epsilon & Zeta & Eta \\ Iota & Kappa & Lambda \\ \end {tblr}
\begin {tblr} {colspec={|[2pt,violet5]l|[2pt,magenta5]c|[2pt,purple5]r|[2pt,red5]} } Alpha & Beta & Gamma \\ Epsilon & Zeta & Eta \\ Iota & Kappa & Lambda \\ \end {tblr}
\begin {tblr} {llll} \hline Alpha & Beta & Gamma & Delta \\ \hline [dashed] Epsilon & Zeta & Eta & Theta \\ \hline [dotted] Iota & Kappa & Lambda & Mu \\ \hline [2pt,blue5] \end {tblr}
\begin {tblr} {llll} \cline {1-4} Alpha & Beta & Gamma & Delta \\ \cline [dashed] {1,3} Epsilon & Zeta & Eta & Theta \\ \cline [dashed] {2,4} Iota & Kappa & Lambda & Mu \\ \cline [2pt,blue5] {-} \end {tblr}
\begin {tblr} {llll} \cline {1-4} Alpha & Beta & Gamma & Delta \\ \cline [dashed] {odd} Epsilon & Zeta & Eta & Theta \\ \cline [dashed] {even} Iota & Kappa & Lambda & Mu \\ \cline [2pt,blue5] {-} \end {tblr}
\begin {tblr} {llll} \SetHline {1-3} {blue5,1pt} Alpha & Beta & Gamma & Delta \\ Epsilon & Zeta & Eta & Theta \\ Iota & Kappa & Lambda & Mu \\ \SetHline {2-4} {teal5,1pt} \end {tblr}
\begin {tblr} {llll} \SetHline [1] {1-3} {blue5,1pt}
\SetHline [2] {1-3} {azure5,1pt} Alpha & Beta & Gamma & Delta \\ Epsilon & Zeta & Eta & Theta \\ Iota & Kappa & Lambda & Mu \\ \SetHline [1] {2-4} {teal5,1pt} \SetHline [2] {2-4} {green5,1pt} \end {tblr}
\begin {tblr} { hline{1,7} = {1pt,solid}, hline{3-5} = {blue3,dashed}, vline{1,5} = {3-4}{dotted}, } Epsilon & Zeta & Eta & Theta \\ Iota & Kappa & Lambda & Mu \\ Nu & Xi & Omicron & Pi \\ Rho & Sigma & Tau & Upsilon \\ Phi & Chi & Psi & Omega \\ \end {tblr}
tblr 环境中,我们还可以通过 rowspec 和 colspec 两个参数的设置来实现报表各(行/列)的文字对齐、背景色填充等。
\begin {tblr} {colspec={lcr} ,rowspec={|Q[cyan7]|Q[azure7]|Q[blue7]|}} Alpha & Beta & Gamma \\ Epsilon & Zeta & Eta \\ Iota & Kappa & Lambda \\ \end {tblr}
\begin {tblr} {colspec={Q[l,brown7]Q[c,yellow7]Q[r,olive7]} ,rowspec={|Q|Q|Q|}} Alpha & Beta & Gamma \\ Epsilon & Zeta & Eta \\ Iota & Kappa & Lambda \\ \end {tblr}
除了通过 rowspec 和 colspec 参数设置来实现之外,也可以通过\SetRow 和 \SetColumn 来实现。
\begin {tblr} {colspec={lcr} ,rowspec={|Q|Q|Q|}}\SetRow {cyan7} Alpha & Beta & Gamma \\ \SetRow {azure7} Epsilon & Zeta & Eta \\ \SetRow {blue7} Iota & Kappa & Lambda \\ \end {tblr}
\begin {tblr} {colspec={lcr} ,rowspec={|Q|Q|Q|}}\SetColumn {brown7} Alpha & \SetColumn {yellow7} Beta & \SetColumn {olive7} Gamma \\ Epsilon & Zeta & Eta \\ Iota & Kappa & Lambda \\ \end {tblr}
另外, 通过 row{i} 和 column{j}可以进行设置全部行列的底色。
\begin {tblr} { hlines = {1pt,white} , row{odd} = {blue7}, row{even} = {azure7}, column{1} = {purple7,c}, } Alpha & Beta & Gamma & Delta \\ Epsilon & Zeta & Eta & Theta \\ Iota & Kappa & Lambda & Mu \\ Nu & Xi & Omicron & Pi \\ Rho & Sigma & Tau & Upsilon \\ Phi & Chi & Psi & Omega \\ \end {tblr}
可以通过 bg, fg 和 font 对底色、文字等设置。同时,可以通过 c 参数选项来设置行的底色。
\begin {tblr} { row{odd} = {bg=azure8}, row{1} = {bg=azure3, fg=white, font=\sffamily }, } Alpha & Beta & Gamma \\ Delta & Epsilon & Zeta \\ Eta & Theta & Iota \\ Kappa & Lambda & Mu \\ Nu Xi Omicron & Pi Rho Sigma & Tau Upsilon Phi \\ \end {tblr}
\begin {tblr} { hlines = {white} , vlines = {white}, cell{1,6}{odd} = {teal7}, cell{1,6}{even} = {green7}, cell{2,4}{1,4} = {red7}, cell{3,5}{1,4} = {purple7}, cell{2}{2} = {r=4,c=2}{c,azure7}, } Alpha & Beta & Gamma & Delta \\ Epsilon & Zeta & Eta & Theta \\ Iota & Kappa & Lambda & Mu \\ Nu & Xi & Omicron & Pi \\ Rho & Sigma & Tau & Upsilon \\ Phi & Chi & Psi & Omega \\ \end {tblr}
\begin {tblr} {llll} \hline [1pt] \SetRow {azure8} Alpha & Beta & Gamma & Delta \\ \hline \SetRow {blue8,c} Epsilon & Zeta & Eta & Theta \\ \hline \SetRow {violet8} Iota & Kappa & Lambda & Mu \\ \hline [1pt] \end {tblr}
tblr 环境中,可以通过 odd 和 even 选择性行列设置。
\begin {tblr} { cell{odd} {1} = {red9}, cell{odd[4]}{2} = {green9}, cell{odd[3-X]}{3} = {blue9}, } Head & Head & Head \\ Talk A & Place A & Date A \\ Talk B & Place B & Date B \\ Talk C & Place C & Date C \\ Talk D & Place D & Date D \\ Talk E & Place E & Date E \\ Talk F & Place F & Date F \\ Talk G & Place G & Date G \\ Talk H & Place H & Date H \\ \end {tblr}
\begin {tblr} { cell{even} {1} = {yellow9}, cell{even[4]}{2} = {cyan9}, cell{even[3-X]}{3} = {purple9}, } Head & Head & Head \\ Talk A & Place A & Date A \\ Talk B & Place B & Date B \\ Talk C & Place C & Date C \\ Talk D & Place D & Date D \\ Talk E & Place E & Date E \\ Talk F & Place F & Date F \\ Talk G & Place G & Date G \\ Talk H & Place H & Date H \\ \end {tblr}