更改 tabularray 中的默认列类型

更改 tabularray 中的默认列类型

是否可以将tblr文档中的所有内容设置为\linewidthX,并默认指定列类型?这需要不提及列数(就像在 中一样)colspec,因为每个 的列数都不同tblr

在这种情况下,colspec可以在某些应该覆盖默认列类型的列中使用。

例如:

\documentclass{article}
\usepackage{tabularray}

\setlength{\parindent}{0mm}

% act here to specify a default column type

\SetTblrInner{
 width=\linewidth,
 %columns={X},
 baseline=T,
 hspan=even,
 vspan=even,
 stretch=1.3,
 row{1}={font=\bfseries},
 hline{1,Z}={0.6mm},
 hline{2}={0.3mm}
}

\begin{document}

 These tables should all have the same width without further modifications in the document body

 \begin{table}[!hb]
  \begin{tblr}{colspec={XX}}
   Head1 & Head2 \\
   Row21 & Row22 \\
   Row31 & Row32 \\
  \end{tblr}

  \begin{tblr}{}
   Head1 & Head2 \\
   Row21 & Row22Row22 \\
   Row31 & Row32 \\
  \end{tblr}

  \begin{tblr}{}
   Head1 & Head2 & Head3\\
   Row21 & Row22 & Row23 \\
   Row31 & Row32 & Row33 \\
   Row41 & Row42 & Row43 \\
  \end{tblr}

  \begin{tblr}{colspec={|l|X[r]|c|}}
   Head1 & Head2 & Head3\\
   Row21 & Row22 & Row23 \\
   Row31 & Row32 & Row33 \\
   Row41Row41 & Row42 & Row43 \\
  \end{tblr}
 \end{table}
\end{document}

答案1

您找到了正确的选项columns。最后一步是向其提供一个列键值列表,例如co=1,bg=blue!20,而不是其他列类型,例如X

通过取消注释columns={X},OP示例中的行并将其替换为columns={co=1},,您将获得

\documentclass{article}
\usepackage{tabularray}

\setlength{\parindent}{0mm}

% act here to specify a default column type

\SetTblrInner{
 width=\linewidth,
 columns={co=1},
 baseline=T,
 hspan=even,
 vspan=even,
 stretch=1.3,
 row{1}={font=\bfseries},
 hline{1,Z}={0.6mm},
 hline{2}={0.3mm}
}

\begin{document}

 These tables should all have the same width without further modifications in the document body

 \begin{table}[!hb]
  \begin{tblr}{colspec={XX}}
   Head1 & Head2 \\
   Row21 & Row22 \\
   Row31 & Row32 \\
  \end{tblr}

  \begin{tblr}{}
   Head1 & Head2 \\
   Row21 & Row22Row22 \\
   Row31 & Row32 \\
  \end{tblr}

  \begin{tblr}{}
   Head1 & Head2 & Head3\\
   Row21 & Row22 & Row23 \\
   Row31 & Row32 & Row33 \\
   Row41 & Row42 & Row43 \\
  \end{tblr}

  \begin{tblr}{colspec={|l|X[r]|c|}}
   Head1 & Head2 & Head3\\
   Row21 & Row22 & Row23 \\
   Row31 & Row32 & Row33 \\
   Row41Row41 & Row42 & Row43 \\
  \end{tblr}
 \end{table}
\end{document}

在此处输入图片描述

更新

l不幸的是,由于像和这样的列类型c仅设置halign(分别为lc)并且不会重置co为其初始值0(由之前的 更改columns={co=1}),因此在设置 之后columns={co=1},具有 的表colspec={|l|X[r]|c|}将像

colspec={|Q[l,co=1]|Q[r,co=1]|Q[c,co=1]|}

用户可能期望的是

colspec={|Q[l,co=0]|Q[r,co=1]|Q[c,co=0]|}

一种解决方法是明确使用colspec={|Q[l,co=0]|X[r]|Q[c,co=0]|}。(目前没有公共接口来重新定义现有的行/列类型,并且设置水平对齐的列类型(如lc)没有可选参数。)

报告给tabularray,见https://github.com/lvjr/tabularray/issues/411

\documentclass{article}
\usepackage{tabularray}

\setlength{\parindent}{0mm}

% act here to specify a default column type

\SetTblrInner{
 width=\linewidth,
 columns={co=1},
 baseline=T,
 hspan=even,
 vspan=even,
 stretch=1.3,
 row{1}={font=\bfseries},
 hline{1,Z}={0.6mm},
 hline{2}={0.3mm}
}

\def\testTblrColspec#1{
  \hspace*{-2em}\texttt{\UseName{tl_if_empty:nTF}{#1}{<empty>}{#1}}
  \par\medskip
  \begin{tblr}{#1}
   Head1 & Head2 & Head3\\
   Row21 & Row22 & Row23 \\
   Row31 & Row32 & Row33 \\
   Row41Row41 & Row42 & Row43 \\
  \end{tblr}
  \par\medskip
}

\begin{document}

\testTblrColspec{}
\testTblrColspec{colspec={|l|X[r]|c|}}
\testTblrColspec{colspec={|Q[l,co=0]|X[r]|Q[c,co=0]|}}

\end{document}

在此处输入图片描述

相关内容