如何使表格跨越文本宽度

如何使表格跨越文本宽度

考虑以下代码:

\documentclass{article}
\usepackage{booktabs,pgf}
\begin{document}
\pgfmathsetlengthmacro{\ratio}{\the\textwidth/4}

\hrulefill \\

\begin{tabular}{@{}llll@{}}
  \toprule
  \makebox[\ratio][l]{xx}&\makebox[\ratio][l]{1} &\makebox[\ratio][l]{2}&\makebox[\ratio][l]{3}\\
  \makebox[\ratio][l]{xx}&\makebox[\ratio][l]{1} &\makebox[\ratio][l]{2}&\makebox[\ratio][l]{3}\\
  \bottomrule
\end{tabular}
\end{document}

带输出

在此处输入图片描述

我如何确定\ratio表格是否 (准确) 填充页面的文本宽度?如图所示,当前\ratio太大,表格宽度大于文本宽度。

答案1

这里有两个选项,第二个选项用途tabularx,我在“The LaTeX Companion, 2e”(第 251 页)中找到了它。

第一个p{.25\textwidth}对每一列使用一种格式,并抑制列间空间宽度@{}。不需要pgfmath。不要忘记,如果您在它之前留一个空行,\begin{tabular}它将开始一个新的缩进段落。您可以使用\noindent命令抑制缩进。

\documentclass{article}
\usepackage{booktabs}
\usepackage{lipsum}
\usepackage{tabularx}
\newcolumntype{Y}{>{\raggedright\arraybackslash}X}

\begin{document}

\lipsum[1]

\noindent\begin{tabular}{@{}*{4}{p{.25\textwidth}@{}}}
  \toprule
  xx&1&2&3\\
  xx&1&2&3\\
  \bottomrule
\end{tabular}

\lipsum[1]

\noindent\begin{tabularx}{\textwidth}{YYYY}
  \toprule
  xx&1&2&3\\
  xx&1&2&3\\
  \bottomrule
\end{tabularx}

\end{document}

在此处输入图片描述

答案2

没有必要强迫表格与正常文本宽度一样宽;我知道用文字处理器很容易做到这一点,但这并不能使表格更漂亮。相反,扩展的表格通常更丑陋且更难读,因为项目彼此之间相距太远。

tabularx如果你确实想这么做,你可以使用:

\documentclass{article}
\usepackage{booktabs,tabularx}
\begin{document}

\noindent X\dotfill X

\bigskip

\noindent
\begin{tabularx}{\textwidth}{@{}XXXX@{}}
\toprule
xx & 1 & 2 & 3 \\
xx & 1 & 2 & 3 \\
\bottomrule
\end{tabularx}
\end{document}

在此处输入图片描述

tabu软件包增强了可能性,但其当前版本无人维护,并且作者已宣布下一个版本将与当前版本基本不兼容。请参阅tabu 包是否过时了?

答案3

您可以使用tabu(例如)。它将把表格设置为给定的宽度,而无需手动计算比例。

\documentclass{article}

\usepackage{tabu}
\usepackage{booktabs}% for better rules in the table

\begin{document}
\begin{tabu} to \textwidth {XXXX}
   \toprule
   xx & 1 & 2 & 3 \\
   \bottomrule
\end{tabu}
\end{document}

tabu带有新的列类型X,可自动设置其宽度,它有一个可选参数l,使用r、 、c来调整单元格内的对齐方式,或使用数字来设置不均匀的列宽。例如,两列,第一列在右侧,第二列在左侧对齐,宽度是第一列的两倍,将默认设置为X[r]X[2]l和)。1

相关内容