我想让我的表格填满整个页面的宽度(即\textwidth
)。到目前为止,我唯一能想到的办法是:
\renewcommand{\tabcolsep}{4.4pt}
通过手动尝试不同的值,我最终可以让表格展开并填满空间。但是,由于我有很多表格,所以这很繁琐。
我尝试了这个tabularx
包:
\begin{tabularx}{\columnwidth}{ r r r r r r r }
\toprule
& $z_{6}$ & $z_{8}$ & $z_{9}$ & $z_{11}$ & $z_{13}$ & $z_{14}$ \\
\midrule
fileA & 0.00 & 0.00 & 0.00 & 0.08 & 0.79 & 0.08 \\
fileB & 0.01 & 0.00 & 0.13 & 0.00 & 0.84 & 0.00 \\
fileC & 0.00 & 0.39 & 0.02 & 0.49 & 0.00 & 0.00 \\
fileD & 0.75 & 0.08 & 0.00 & 0.00 & 0.00 & 0.00 \\
\bottomrule
\end{tabularx}
但是,这仍然依赖于\tabcolsep
值。(如果值很小,所有列仍然会很接近;如果值很大,列会更分散。)我正在寻找两个问题的自动解决方案:
- 表格占据整个页面的宽度;并且
- 每列沿水平方向均匀分布。
tabularx
只实现 (1)。我怎样才能获得 (2)?
答案1
其他答案已经说明了如何使用,tabularx
但是您的描述是错误的,tabularx
永远不会改变\tabcolsep
。但是,如果您的样本数据是典型的,我认为您确实希望列间空间可以拉伸,并允许列宽基于自然列宽。为此,您需要标准 LaTeXtabular*
而不是tabularx
。
\documentclass{article}
\usepackage{showframe}% http://ctan.org/pkg/showframe
\usepackage{booktabs}% http://ctan.org/pkg/booktabs
% tabularx already includes the array package
%\usepackage{array}% http://ctan.org/pkg/array
\begin{document}
\noindent\begin{tabular*}{\columnwidth}{@{\extracolsep{\stretch{1}}}*{7}{r}@{}}
\toprule
& $z_{6}$ & $z_{8}$ & $z_{9}$ & $z_{11}$ & $z_{13}$ & $z_{14}$ \\
\midrule
fileA & 0.00 & 0.00 & 0.00 & 0.08 & 0.79 & 0.08 \\
fileB & 0.01 & 0.00 & 0.13 & 0.00 & 0.84 & 0.00 \\
fileC & 0.00 & 0.39 & 0.02 & 0.49 & 0.00 & 0.00 \\
fileD & 0.75 & 0.08 & 0.00 & 0.00 & 0.00 & 0.00 \\
\bottomrule
\end{tabular*}
\end{document}
答案2
您没有tabularx
“正确”地使用环境。tabularx
提供一种X
可根据需要拉伸的列类型。为了获得右对齐的X
列,您可以使用
\newcolumntype{R}{>{\raggedleft\arraybackslash}X}
这是一个显示全宽表格的最小示例:
\documentclass{article}
\usepackage{showframe}% http://ctan.org/pkg/showframe
\usepackage{tabularx}% http://ctan.org/pkg/tabularx
\usepackage{booktabs}% http://ctan.org/pkg/booktabs
% tabularx already includes the array package
%\usepackage{array}% http://ctan.org/pkg/array
\newcolumntype{R}{>{\raggedleft\arraybackslash}X}
\begin{document}
\noindent\begin{tabularx}{\columnwidth}{ *{7}{R} }
\toprule
& $z_{6}$ & $z_{8}$ & $z_{9}$ & $z_{11}$ & $z_{13}$ & $z_{14}$ \\
\midrule
fileA & 0.00 & 0.00 & 0.00 & 0.08 & 0.79 & 0.08 \\
fileB & 0.01 & 0.00 & 0.13 & 0.00 & 0.84 & 0.00 \\
fileC & 0.00 & 0.39 & 0.02 & 0.49 & 0.00 & 0.00 \\
fileD & 0.75 & 0.08 & 0.00 & 0.00 & 0.00 & 0.00 \\
\bottomrule
\end{tabularx}
\end{document}
纳入showframe
只是为了显示表格跨越整个列宽。
还请注意,当您使用类似指定的列时,列规范会减少:总共*{<num>}{<col spec>}
重复<col spec>
多次<num>
。新定义的列类型R
会插入到\raggedleft
每个单元格条目之前,并将内容推到右侧。