考虑以下代码:
\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