据我所知,在计算列宽与表的总宽度时,需要考虑正确数量的\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
,然后缩放\linewidth
minipage 的。为了完整起见,我在下面发布了代码。但是,我仍然想知道上述问题的答案。
\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}