![更改 tabularray 中的默认列类型](https://linux22.com/image/464985/%E6%9B%B4%E6%94%B9%20tabularray%20%E4%B8%AD%E7%9A%84%E9%BB%98%E8%AE%A4%E5%88%97%E7%B1%BB%E5%9E%8B.png)
是否可以将tblr
文档中的所有内容设置为\linewidth
宽X
,并默认指定列类型?这需要不提及列数(就像在 中一样)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
(分别为l
和c
)并且不会重置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]|}
。(目前没有公共接口来重新定义现有的行/列类型,并且设置水平对齐的列类型(如l
和c
)没有可选参数。)
报告给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}