自动拉伸表格以均匀填充水平空间?

自动拉伸表格以均匀填充水平空间?

我想让我的表格填满整个页面的宽度(即\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值。(如果值很小,所有列仍然会很接近;如果值很大,列会更分散。)我正在寻找两个问题的自动解决方案:

  1. 表格占据整个页面的宽度;并且
  2. 每列沿水平方向均匀分布。

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每个单元格条目之前,并将内容推到右侧。

相关内容