你们如何控制表格中的列填充?
更新
澄清一下,我正在寻找一种控制垂直和水平填充的方法。因此,如果我有一个简单的表格,如下面的代码片段所示,我可以填充列并使它们看起来不那么...丑陋。:P
\begin{tabular}{|l|l|}
\hline
column 1 & column 2 \\
\hline
I really would like this less & crammed\\
\hline
\end{tabular}
我尝试使用该命令\vspace
,但它在垂直线上留下了空隙。
答案1
tabular
使用没有包的默认环境booktabs
,并在环境之前和之后添加:
\bgroup
\def\arraystretch{1.5}% 1 is the default, change whatever you need
\begin{tabular}{|c|...}
...
\end{tabular}
\egroup
并且还使用列类型c
而不是 l
,如果您希望列之间有更多的水平空间,那么使用\setlength\tabcolsep{<whatever length>}
。
答案2
以下建议适用于tabular
——和 array
类似结构,并且大多数过去适用于文本和数学模式,包括*matrix
环境。
垂直填充
使用@Herbert的答案可以以全局方式进行垂直填充。也就是说,<factor>
使用以下方法重新定义数组拉伸因子
\renewcommand{\arraystretch}{<factor>}
然而,顾名思义,这是一个因素而不是长度。因此,很难提供一个足够的因子来添加(比如说)15pt
每行的上方/下方。还有其他选项可用于此目的。
垂直填充也可以手动进行,也可以按行进行,使用可选参数结束一行tabular
;\\[<len>]
其中<len>
是任何熟悉的 TeX 长度。最后一种替代方法是使用设置\extrarowheight
提供的长度array
包裹。
以下示例展示了上述三种可能性:
\documentclass{article}
\usepackage[landscape]{geometry}
\usepackage{array}
\begin{document}
% =========== FACTOR approach ===========
{\renewcommand{\arraystretch}{2}%
\begin{tabular}{|l|l|}
\hline
column 1 & column 2 \\
\hline
I really would like this less & crammed \\
\hline
\end{tabular}} \quad
% =========== LENGTH approaches ===========
\begin{tabular}{|l|l|}
\hline
column 1 & column 2 \\[4ex]
\hline
I really would like this less & crammed \\[5pt]
\hline
\end{tabular} \quad
{\setlength{\extrarowheight}{20pt}%
\begin{tabular}{|l|l|}
\hline
column 1 & column 2 \\
\hline
I really would like this less & crammed \\
\hline
\end{tabular}}
\end{document}
请注意,“因子”方法比“长度”方法分布得更均匀。这是意料之中的。但是,如果需要,也可以组合使用这些技术。此外,使用\\[<len>]
提供“底部填充”,而设置 则\extrarowheight
添加“顶部填充”。最后,请注意示例中的分组:\renewcommand
和\setlength
通过将 放在 内而成为本地的{...}
。也就是说, / 的值/长度\arraystretch
在\extrarowheight
组末尾重置之前恢复为原始值。
水平填充
存在类似的列水平填充方法。使用tabularx
或者tabulary
可能被认为是基于因子的,以及使用\extracolsep{\fill}
。然而,这些都与固定宽度表有关,第一个在@cmhughes的回答中得到解决。以下是用法描述tabulary
,取自TeX FAQ 条目固定宽度表格:
软件包
tabulary
... 提供了一种“平衡”表格列所占空间的方法。软件包定义了列规范C
、L
和R
,J
分别给出了居中、左对齐、右对齐和完全对齐的空间共享列版本。软件包检查每列“自然”的长度(即在一张宽度无限的纸上),并相应地为每列分配空间。
基于长度的方法可以包括使用“列说明符”为每列添加单独的长度@{...}
。此外,修改长度\tabcolsep
(或者\arraycolsep
如果您使用的是array
)将对所有列执行此操作,因此更通用。最后,该包还提供了一种使用和array
在列条目之前和之后插入内容的方法。以下是一些示例:>{<before>}
<{<after>}
\documentclass{article}
\usepackage[landscape]{geometry}
\usepackage{array}
\begin{document}
% =========== FACTOR approach ===========
\begin{tabular*}{500pt}{@{\extracolsep{\fill}}|l|l|}
\hline
column 1 & column 2 \\
\hline
I really would like this less & crammed \\
\hline
\end{tabular*}
\bigskip
% =========== LENGTH approaches ===========
\begin{tabular}{|@{\hspace{2em}}l@{}|l@{\qquad}|}
\hline
column 1 & column 2 \\
\hline
I really would like this less & crammed \\
\hline
\end{tabular} \quad
{\setlength{\tabcolsep}{2em}
\begin{tabular}{|l|l|}
\hline
column 1 & column 2 \\
\hline
I really would like this less & crammed \\
\hline
\end{tabular}}
\medskip
\begin{tabular}{|>{\hspace{1pc}}l|l<{\hspace{-2pt}}|}
\hline
column 1 & column 2 \\
\hline
I really would like this less & crammed \\
\hline
\end{tabular}
\end{document}
当然,如果所有列都应该具有相同的说明符,则使用“多列说明符”*{<num>}{<col spec>}
是更好的选择。
在上面的例子中,geometry
已加载以适应可能较宽的显示器。
替代填充方法
另一种调节垂直填充的方法是插入所谓的(垂直)支柱,形式为零宽度规则(例如)。例如,使用在 之前\rule{0pt}{2em}stuff
插入一个2em
支柱stuff
,从而增加包含 的单元格的垂直高度。类似地,可以使用 将支柱置于基线以下stuff
来实现\rule[-1em]{0pt}{1em}stuff
单元格下方的填充。1em
通过零高度支柱进行水平填充也是如此。
答案3
这是一个老问题,但我遇到了同样的问题,所有这些解决方案似乎都太复杂了,不符合我的需要,即关于水平填充. 寻找与上述建议类似的快速解决方案垂直填充( \arraystretch)
,我发现\setlength{tabcolsep}
他是一个很好的候选人。
将其应用于示例,它将是:
\setlength{\tabcolsep}{0.5em} % for the horizontal padding
{\renewcommand{\arraystretch}{1.2}% for the vertical padding
\begin{tabular}{|l|l|}
\hline
column 1 & column 2 \\
\hline
I really would like this less & crammed\\
\hline
\end{tabular}
}
不同之处如下:
答案4
这tabularx
可能对你也有用。来自文档
定义了一个新的环境 tabularx,它采用与 tabular* 相同的参数,但修改某些列的宽度而不是列间空间,以设置具有所要求的总宽度的表。
下面是 MWE-请注意不同的宽度规格,250pt
和\textwidth
,以及结果。
\documentclass{report}
\usepackage{tabularx}
\begin{document}
\begin{table}
\centering
\begin{tabularx}{250pt}{|c|X|c|X|}
\hline
\multicolumn{2}{|c|}{Multicolumn entry} & THREE & FOUR \\\hline
one & The width of
this column depends
on the width of the table & three & \\\hline
\end{tabularx}
\end{table}
\begin{table}
\centering
\begin{tabularx}{\textwidth}{|c|X|c|X|}
\hline
\multicolumn{2}{|c|}{Multicolumn entry} & THREE & FOUR \\\hline
one & The width of
this column depends
on the width of the table & three & \\\hline
\end{tabularx}
\end{table}
\end{document}