我需要设置一个大表格,并希望将其压缩成适合一页的形式。表格包含一个p
文本跨多行的列。现在我想减少整体行距。通常,我使用 来实现\renewcommand{\arraystretch}{0.9}
这一点,但这似乎不适用于p
列。请参见以下示例(我将间距设置为 0.5 以使我的目标更明确):
\documentclass[ngerman]{scrbook}
\begin{document}
{
\renewcommand{\arraystretch}{0.5} % this reduces the vertical spacing between rows
\begin{table}
\centering
\begin{tabular}{l p{5cm}}
\hline
row one &
the quick brown fox jumps over the lazy dog.
the quick brown fox jumps over the lazy dog.
the quick brown fox jumps over the lazy dog. \\
row two \\
row three \\
\hline
\end{tabular}
\end{table}
}
\end{document}
其结果如下:
除了行间距(绿色箭头)之外,我还想减少“the quick brown fox”行之间的行间距(红色箭头)。任何提示都非常感谢。
答案1
在我看来,结果是灾难性的。但这就是它,没有额外的包和额外的命令。
\documentclass[ngerman]{scrbook}
\begin{document}
\begin{table}
\renewcommand{\arraystretch}{0.5} % this reduces the vertical spacing between rows
\linespread{0.5}\selectfont\centering
\begin{tabular}{l p{5cm}}
\hline
row one &
the quick brown fox jumps over the lazy dog.
the quick brown fox jumps over the lazy dog.
the quick brown fox jumps over the lazy dog. \\
row two \\
row three \\
\hline
\end{tabular}
\end{table}
\end{document}
请注意,设置为\baselinestretch
(由 进行\linespread
)和设置\arraystretch
为table
环境本地的;您不需要将它们放在环境之外,另一方面,这会形成一个组,以便先前的值将在 处恢复\end{table}
。
答案2
\usepackage{array}
然后
\newcolumntype{P}[1]{>{\small}{p{#1}}
或者
\newcolumntype{P}[1]{>{\linespread{.9}}{p{#1}}
如果您认为可以通过压缩行距来保持文本大小不变。
然后使用P{..}
而不是p{..}
答案3
使用包\setstretch
中的命令就足够了setspace
。由于行可能无法区分,为了提高可读性,我ex
通过包引入了行之间的最小间距(以单位表示,因此它会随字体大小而变化)cellspace
。我使用这个命令是booktabs
为了使水平线具有更好的垂直间距。最后,您可以使用表格中的字体大小。我举一个例子\footnotesize
:
\documentclass[ngerman]{scrbook}
\usepackage{setspace}
\usepackage{booktabs}
\usepackage{xcolor}
\usepackage{cellspace}
\setlength\cellspacetoplimit{0.8ex}
\begin{document}
Text text text text text text text text text text text text text text text text text text text text text text text text tex text.
\begin{table}[!htbp]
\centering\footnotesize\setstretch{0.5}
\begin{tabular}{Sl p{5cm}}
\toprule
row one &
the quick brown fox jumps over the lazy dog.
the quick brown fox jumps over the lazy dog.
the quick brown fox jumps over the lazy dog. \\
row two &
the quick brown fox jumps over the lazy dog.
the quick brown fox jumps over the lazy dog.
the quick brown fox jumps over the lazy dog.\\
row three &
the quick brown fox jumps over the lazy dog.
the quick brown fox jumps over the lazy dog.
the quick brown fox jumps over the lazy dog.\\
\bottomrule
\end{tabular}
\end{table}
\end{document}
答案4
笔记: 在我第一次尝试给出答案时——不幸的是,我仍然不熟悉 SE——我弄得一团糟,以至于我(此刻)无法(重新)编辑我的答案并纠正最后一秒发现的错误。对此深表歉意。现在我尝试纠正这个问题,并将所有内容放在正确的位置。
好吧,与此同时你从其他人那里得到了很好的答案,所以我添加了主要内容只是为了消除我之前的(锁定的)混乱。
回答: 如果您在表格环境中明确(再次)声明字体系列,例如使用 \rmfamily,则执行以下 MWE:
\documentclass{article}
\usepackage[active,floats,tightpage]{preview} %just for showing only table
\begin{document}
\begin{table}[h!]\centering
\linespread{0.8} % this decrease the vertical spacing between lines
\rmfamily % without this, \linespread doesn't give expected effect
% to be honest, I do not know, why this is necessary
\begin{tabular}{l p{5cm}}
\hline
row one &
the quick brown fox jumps over the lazy dog.
the quick brown fox jumps over the lazy dog.
the quick brown fox jumps over the lazy dog. \\
row two & \\
row three & \\
\hline
\end{tabular}
\end{table}
\end{document}
自从我最近开始使用以来,我使用 article 包在 MWE 上进行了测试scrbook
。我相信/希望它也能与 scrbook 配合使用。
在表格环境中声明\rmfamiliy
(或例如\sffamily
,我通常在表格中使用)使\linespread{<reduction factor>}
所有表格单元格处于活动状态。为什么有必要这样做,我不知道。