为什么新命令定义为
\NewExpandableDocumentCommand\mcc{O{1}m}{\multicolumn{#1}{c}{#2}}
tblr
在 ˙table 中定义的方式tabularray
与直接插入单元格的方式不同\multicolumn
(或者与其他“经典”表格环境中的工作方式不同tabular
)。例如:
\documentclass{article}
\usepackage{tabularray}
\NewExpandableDocumentCommand\mcc{O{1}m}{\multicolumn{#1}{c}{#2}}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tblr}
\setlength\PreviewBorder{1em}
\begin{document}
\begin{tblr}{
colspec = {|*{4}{c|} },
hlines
}
\multicolumn{3}{c|}{abcde} & \mcc[3]{fghij} \\
1 & 2 & 3 & 1 & 2 & 3 \\
\end{tblr}
\end{document}
我是否遗漏了什么,或者tabularray
到目前为止还不支持这样的快捷方式?我使用的是tabularray
2021K 版本(2021-06-05)。
编辑: 解决方案按包自动提供,但无法按预期工作。以下 MWE 有效:
\documentclass{article}
\usepackage{tabularray}
\NewTableCommand{\mcc}[1][1]{\multicolumn{#1}{c}}
\begin{document}
\begin{tblr}{
hlines, vlines, colspec = {*{6}{c}},
}
\multicolumn{3}{c|}{abcde} & \mcc[3]{fghij} \\
1 & 2 & 3 & 1 & 2 & 3 \\
\end{tblr}
\end{document}
Bot 在 s 的所有实例中\multicolumn
都不使用新命令:
\documentclass{article}
\usepackage{tabularray}
\NewTableCommand{\mcc}[1][1]{\multicolumn{#1}{c}}
\begin{document}
\begin{tblr}{
hlines, vlines, colspec = {*{6}{c}},
}
\mcc[3]{abcde} & \mcc[3]{fghij} \\
1 & 2 & 3 & 1 & 2 & 3 \\
\end{tblr}
\end{document}
我是否(又)错过了什么?
答案1
2021-07-02 的新答案
(也见https://github.com/lvjr/tabularray/issues/28)
Tabularray
软件包通过一些肮脏的 hack 尽力支持遗留\multicolumn
命令\multirow
。但从这个问题来看,完全支持这两个命令是不可能的,因为这两个命令与tabularray
软件包的设计相冲突。
因此我决定将\multicolumn
和标记\multirow
为过时,并将在 2022 版本中将其删除。要制作多列或多行单元格,最好\SetCell
在旧界面或cell{i}{j}
新界面中使用命令。
此外,为了向后兼容,我将在未来几年内将tabularray
2021年的最新版本包含在内。用户仍可以通过 将其用于旧文档。tabularray-2021.sty
\usepackage{tabularray-2021}
对于您的问题,建议使用如下新接口来编写它:
\documentclass{article}
\usepackage{tabularray}
\begin{document}
\begin{tblr}{
hlines, vlines, colspec = {*{6}{c}},
cell{1}{1,4} = {c=3}{c},
}
abcde & & & fghij & & \\
1 & 2 & 3 & 1 & 2 & 3 \\
\end{tblr}
\end{document}
为了另一个问题在注释中,建议使用新的接口来编写,如下所示:
\documentclass{article}
\usepackage{tabularray}
\begin{document}
\begin{tblr}{
colspec = {|c|*{4}{*{3}{c}|}},
row{1-3} = {font=\bfseries},
cell{1}{1} = {r=3}{c},
cell{1}{2,8} = {c=6}{c},
cell{2}{2,5,8,11} = {c=3}{c},
}
\hline
M1 vs. \$ & 5fold & & & & & & 10fold & & & & & \\
\cline{2-13}
& Err1 & & & Err1 & & & Err1 & & & Err2 & & \\
\cline{2-13}
& C1 & C2 & C3 & C1 & C2 & C3 & C1 & C2 & C3 & C1 & C2 & C3 \\
\hline
M2 & 13 & 7 & 0 & 15 & 5 & 0 & 0 & 20 & 0 & 0 & 20 & 0 \\
M3 & 11 & 3 & 6 & 12 & 3 & 5 & 3 & 13 & 4 & 0 & 16 & 4 \\
M4 & 10 & 10 & 0 & 10 & 10 & 0 & 4 & 16 & 0 & 0 & 20 & 0 \\
\hline
Total & 34 & 20 & 6 & 37 & 18 & 5 & 7 & 49 & 4 & 0 & 56 & 4 \\
\hline
\end{tblr}
\end{document}
2021-07-01 的旧答案
手册中写道:“所有改变表格规范的命令必须用“来定义\NewTableCommand
。
还tabularray
包装内部对待\multicolumn
和\multirow
作为命令只有二强制性参数。
\documentclass{article}
\usepackage{tabularray}
\NewTableCommand{\mcc}[1][1]{\multicolumn{#1}{c}}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tblr}
\setlength\PreviewBorder{1em}
\begin{document}
\begin{tblr}{
hlines, vlines, colspec = {*{6}{c}},
}
\multicolumn{3}{c|}{abcde} & \mcc[3]{fghij} \\
1 & 2 & 3 & 1 & 2 & 3 \\
\end{tblr}
\end{document}