表格列宽“填充至边距”

表格列宽“填充至边距”

我希望表格能够“填充到边缘”,而不是选择一个数字并反复重建文档直到它达到合适的大小。

例如,我希望这个两列表格的第一列具有所需的宽度,而第二列“填充到边距”:

\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;当与Xcolumntype(在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}

左右列与文本对齐

相关内容