tabularray 和 \multicolumn cells 的新命令

tabularray 和 \multicolumn cells 的新命令

为什么新命令定义为

\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到目前为止还不支持这样的快捷方式?我使用的是tabularray2021K 版本(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}新界面中使用命令。

此外,为了向后兼容,我将在未来几年内将tabularray2021年的最新版本包含在内。用户仍可以通过 将其用于旧文档。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}

在此处输入图片描述

相关内容