表格*环境中的表格和列宽

表格*环境中的表格和列宽

据我所知,在计算列宽与表的总宽度时,需要考虑正确数量的\tabcolsep\arrayrulewidth

假设我想要一个横跨整个页面宽度的表格,其中包含两个相等的列,没有任何垂直线,并且我已使用命令删除了左右两侧的空白区域,左列左@{}对齐,右列右对齐。在这种情况下,代码将如下所示:

\documentclass{article}

\usepackage{array, calc, booktabs}

\begin{document}

\begin{table}
\centering
\begin{tabular*}{\linewidth}{@{}p{0.5\linewidth-\tabcolsep}>{\raggedleft\arraybackslash}p{0.5\linewidth-\tabcolsep}@{}} 
\toprule
text 1 & text 2 \\
\bottomrule
\end{tabular*}
\end{table}
   
\end{document}

输出完全符合要求:

在此处输入图片描述

如果我想将整个表格和每列的宽度减少 30%,那么我可以执行以下代码:

\documentclass{article}

\usepackage{array, calc, booktabs}

\begin{document}

\def\tablewidthvalue{0.7}

\begin{table}
\centering
\begin{tabular*}{\tablewidthvalue\linewidth}{@{}p{\tablewidthvalue\dimexpr0.5\linewidth-\tabcolsep\relax}>{\raggedleft\arraybackslash}p{\tablewidthvalue\dimexpr0.5\linewidth-\tabcolsep\relax}@{}} 
\toprule
text 1 & text 2 \\
\bottomrule
\end{tabular*}
\end{table}
   
\end{document}

本质上,我为表格和每列的宽度引入了缩放因子\def\tablewidthvalue{0.7}。我原本以为这会起作用,但似乎没有:

在此处输入图片描述

正如您所见,text 2它超出了表格的宽度。

值得注意的是,如果我设置\def\tablewidthvalue{1},那么对齐就会再次正常工作。

有人知道如何解决这个问题吗?为什么缩放每个单独列的宽度并将缩放列的宽度相加不等于缩放整个表格的宽度?

附言:我知道在这种情况下我可以使用该tabularx包,但是我想知道为什么上述代码不能正常工作。

编辑:

我找到了一种实现我想要的结果的方法 - 我只需将环境封闭tabular*在 a 中minipage,然后缩放\linewidthminipage 的。为了完整起见,我在下面发布了代码。但是,我仍然想知道上述问题的答案。

\documentclass{article}

\usepackage{array, calc, booktabs}

\begin{document}

\def\tablewidthvalue{0.7}

\begin{table}
\centering
\begin{minipage}{\tablewidthvalue\linewidth}
\begin{tabular*}{\linewidth}{@{}p{0.5\linewidth-\tabcolsep}>{\raggedleft\arraybackslash}p{0.5\linewidth-\tabcolsep}@{}} 
\toprule
text 1 & text 2 \\
\bottomrule
\end{tabular*}
\end{minipage}
\end{table}
   
\end{document}

结果如下:

在此处输入图片描述

编辑2:

按照下面 David 的建议,以下代码有效:

\documentclass{article}

\usepackage{array, calc, booktabs}

\begin{document}

\def\tablewidthvalue{0.7}

\begin{table}
\centering
\begin{tabular}{@{}p{\tablewidthvalue\dimexpr0.5\linewidth-\tabcolsep\relax}>{\raggedleft\arraybackslash}p{\tablewidthvalue\dimexpr0.5\linewidth-\tabcolsep\relax}@{}} 
\toprule
text 1 & text 2 \\
\bottomrule
\end{tabular}
\end{table}
   
\end{document}

答案1

可以通过以下方式轻松实现tabularray

\documentclass{article}

\usepackage{tabularray}
\UseTblrLibrary{booktabs} 

\begin{document}

\begin{table}
\centering
\begin{tblr}{colspec={XX[r]}, colsep=0pt, width=.7\linewidth} 
\toprule
text 1 & text 2 \\
\bottomrule
\end{tblr}
\end{table}

Some text only to show the table is 70\% of line width.
Of course, you can also set any other width using the \texttt{width=} option of \texttt{tabularray} package.
\end{document}

在此处输入图片描述

答案2

在此处输入图片描述

\documentclass{article}
\usepackage{lmodern}
\usepackage{booktabs}
\usepackage{array}
\newlength\zz

\begin{document}
    
    \setlength\zz{\dimexpr \textwidth - 4\tabcolsep-3\arrayrulewidth}
    \setlength\tabcolsep{2pt}
    \fontsize{3.5pt}{4pt}\selectfont
    
    \centering
    \begin{tabular}{@{}p{0.7\zz}>{\raggedleft\arraybackslash}p{0.7\zz}@{}}
        \toprule
        foo  &bar\\
        zz&zzz\\
        \bottomrule
    \end{tabular}
    
\end{document}

相关内容