也许我忽略了一些东西,但似乎在某个tblr
环境中,\linewidth
它的行为会根据是否在跨越多列的单元格中使用而有所不同。
\linewidth
考虑以下 MWE:我在每个单元格中放置了宽度为 的规则。此外,我将列填充设置为5pt
。在第一个示例中,\linewidth
显然考虑了列填充,并且规则完全适合单元格。
在第二个示例中,我添加了一个横跨两列的多列单元格。这里我们收到一条警告,提示框已满,其大小恰好是列填充的两倍。因此,似乎\linewidth
在这种情况下没有考虑列填充。
垂直边框的宽度似乎也是如此:如果\linewidth
在多列单元格中使用,我们会收到列填充和边框宽度总和的过满框警告。
\documentclass{article}
\usepackage{tabularray, xcolor}
\begin{document}
\noindent
\begin{tblr}{
colspec = { X X },
columns = {colsep = 5pt, lightgray},
}
\rule{\linewidth}{2pt} & \rule{\linewidth}{2pt} \\
\end{tblr}
\bigskip
% multi-column cell
\noindent
\begin{tblr}{
colspec = { X X },
columns = {colsep = 5pt, lightgray},
cell{2}{1} = {c = 2}{},
}
\rule{\linewidth}{2pt} & \rule{\linewidth}{2pt} \\
\rule{\linewidth}{2pt} \\ % Overfull \hbox (10.0pt too wide)
\end{tblr}
\bigskip
% multi-column cell plus borders
\noindent
\begin{tblr}{
colspec = { | X X | },
columns = {colsep = 5pt, lightgray},
cell{2}{1} = {c = 2}{},
}
\rule{\linewidth}{2pt} & \rule{\linewidth}{2pt} \\
\rule{\linewidth}{2pt} \\ % Overfull \hbox (10.8pt too wide)
\end{tblr}
\end{document}
我想知道这是错误还是有意为之。无论如何,我想到解决这个问题的唯一方法是明确设置cell{2}{1} = {c = 2}{wd=...}
。该软件包是否提供了更优雅的解决方案?
答案1
浏览包代码后,我发现当前框的内部宽度存储在名为的宏中\l__tblr_cell_wd_dim
。因此,实际上只需要一行代码就可以使存储在此宏中的值在expl3
语法之外可访问:
\documentclass{article}
\usepackage{tabularray, xcolor}
\ExplSyntaxOn
\NewDocumentCommand{\cellwidth}{ }{
\l__tblr_cell_wd_dim
}
\ExplSyntaxOff
\begin{document}
\noindent
\begin{tblr}{
colspec = { X X X },
columns = { colsep = 5pt },
cell{3-4}{1} = { c = 3 }{},
cell{5-6}{1} = { c = 2 }{},
hlines,
vlines
}
\rule{\cellwidth}{2pt} & \rule{\cellwidth}{2pt} & \rule{\cellwidth}{2pt} \\
\the\cellwidth & \the\cellwidth & \the\cellwidth \\
\rule{\cellwidth}{2pt} \\
\the\cellwidth \\
\rule{\cellwidth}{2pt} & & \rule{\cellwidth}{2pt} \\
\the\cellwidth & & \the\cellwidth \\
\end{tblr}
\end{document}