tabularray:\linewidth 不考虑多列单元格中的 colsep

tabularray:\linewidth 不考虑多列单元格中的 colsep

也许我忽略了一些东西,但似乎在某个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}

在此处输入图片描述

相关内容