我希望表格能够“填充到边缘”,而不是选择一个数字并反复重建文档直到它达到合适的大小。
例如,我希望这个两列表格的第一列具有所需的宽度,而第二列“填充到边距”:
\begin{tabular}{ l p{5cm} }
当然,这不会起作用(第二列将是5cm
),有没有“填充到边缘”的方法?
答案1
该tabularx
软件包提供了tabularx
为此目的而设计的环境。
以下是 MWE:
\documentclass{article}
\usepackage{tabularx}
\begin{document}
\begin{table}
\begin{tabularx}{\textwidth}{XX}
foo & bar
\end{tabularx}
\caption{My table}
\end{table}
\end{document}
请注意,tabularx
的第一个参数是表格的宽度。在上面,我选择了\textwidth
;当与X
columntype(在tabularx
包中定义)结合使用时,它会产生您想要的“填充到边距”效果。
答案2
您也可以这样做没有任何附加包,只需使用环境tabular*
,然后添加\extracolsep{\fill}
以填充列。以下是前后的示例(我还删除了第 1 列中的左列间距和第 2 列后的右列间距),其中包geometry
用于包含框架:
自定义列类型:
如果你经常使用这种类型的列,你可以使用包裹array
并定义自定义列类型,就像我在上一个表中所做的那样。因此,只需将其L
用于您的列即可实现您想要的效果。这将产生与上图中第二个示例相同的结果。
代码:
\documentclass{article}
\usepackage[showframe]{geometry}
\usepackage{array}% Only needed if you want to be able to use the `L` column type
\newcolumntype{L}{@{}l@{\extracolsep{\fill}}}% Needs `array` package
\newcommand*{\Text}{Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam porta tincidunt velit, at lacinia ipsum dictum eget.}
\begin{document}\vspace*{0.1cm}
\noindent
\begin{tabular}{l p{5cm} }\hline
abc & \Text\\\hline
\end{tabular}
\bigskip
\noindent
\begin{tabular*}{\linewidth}{@{}l@{\extracolsep{\fill}} p{5cm}@{}}\hline
abc & \Text\\\hline
\end{tabular*}
\bigskip
\noindent
\begin{tabular*}{\linewidth}{L p{5cm}@{}}\hline% Using the L column type
abc & \Text\\\hline
\end{tabular*}
\end{document}
答案3
\documentclass{article}
\usepackage{tabularx,lipsum}
\begin{document}
\noindent
\begin{tabularx}{\textwidth}{@{} l X @{} }
as long as its contents & \lipsum[1]
\end{tabularx}
\lipsum[1]
\end{document}
左右列与文本对齐