我正在使用 tabularx + booktabs,正在寻找一种方法来增加行之间的垂直间距,但同时保持每行的内容垂直居中。
我尝试过使用arraystretch
,但如下图所示这个答案,额外的空间分布并不均匀;添加到行“顶部”的空间往往比添加到行底部的空间更多。
我想找到一种解决方案,它可以影响文档(包含数十个长表)中所有表的所有行,而无需为每一行手动插入空格、支柱等。
更多详细信息:我没有使用中间规则来分隔各个行。我依靠它\rowcolor
来区分行。
以下是摘自egreg 的回答:
\documentclass{article}
\usepackage{tabularx,booktabs}
\usepackage{lipsum} % just for the example
\usepackage[table]{xcolor}
\rowcolors{2}{gray!10}{white}
\begin{document}
\noindent
\begin{tabularx}{\textwidth}{@{}llX@{}}
\toprule
A & B & \centering C \tabularnewline
\midrule
1 & 2 & \lipsum*[2] \\
1 & 2 & \lipsum*[2] \\
\bottomrule
\end{tabularx}
\bigskip
\noindent
\begin{tabularx}{\textwidth}{@{}llX@{}}
\toprule
A & B & \centering C \tabularnewline
\midrule
1 & 2 & \lipsum*[2] \\
1 & 2 & \lipsum*[2] \\
\bottomrule
\end{tabularx}
\end{document}
这可能吗?
答案1
一个简单的解决方案是使用cellspace
定义最小带有以字母为前缀的说明符的列中单元格顶部和底部的间距S
。不幸的是,当应用于X
列类型并加载`colortbl时,出于某种原因,它不再起作用。
所以我不得不使用一种解决方法:cellspace
用于第一列,并在单元格的末尾X
,我自动在基线下添加一条不可见的规则>{}
。
\documentclass{article}
\usepackage{tabularx,booktabs}
\usepackage{lipsum} % just for the example
\usepackage{bigstrut}
\usepackage[table, svgnames]{xcolor}
\usepackage{cellspace}
\setlength\cellspacetoplimit{1.5ex}
\setlength\cellspacebottomlimit{1.5ex}
\rowcolors{2}{lightgray!30!Lavender}{white}
\begin{document}
\noindent
\begin{tabularx}{\textwidth}{Sl l X <{\rule[-2ex]{0pt}{0ex}}}%
\toprule
\rowcolor{white}
A & B &\multicolumn{1}{c}{C} \tabularnewline
\midrule
1 & 2 & \lipsum*[2] \\ %
1 & 2 & \lipsum*[2] \\ %
1 & 2 & \lipsum*[2] \\
\bottomrule
\end{tabularx}
\end{document}
答案2
我觉得如果有\extrarowdepth
类似 的参数,你就会得到帮助\extrarowheight
。这个包tabu
有这个参数。不幸的是,它似乎不适用于多行单元格。所以我写了一个小包来做这件事:添加一个\extrarowdepth
参数。
它在tabu
加载时也能工作,但对于tabu
环境则不然。在这种情况下,它只是共享其\extrarowdepth
长度参数,只是为了避免冲突。
这里是:
%% extrarowdepth.sty
%% Copyright (C) 2016 by Piet van Oostrum <[email protected]>
%% This package defines a new length variable \extrarowdepth, similar to
%% \extrarowheight in the `array' package.
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{extrarowdepth}%
[2016/11/225 v1.0 Define \string\extrarowdepth\space for arrays and tabulars]%
% Prevent a clash with tabu, or other packages that also define \extrarowdepth.
\AtBeginDocument{%
\ifdefdimen\extrarowdepth{} % \extrarowdepth already defined as a length
{\ifdef\extrarowdepth % if it is defined but not a length, we have an error
{\PackageError{extrarowdepth}{Cannot define length \string\extrarowdepth}
{There is already a \string\extrarowdepth\space and it is not a length parameter.}}
{\newlength\extrarowdepth\setlength\extrarowdepth{0pt}}}%
\newlength\@temprowdepth}
\RequirePackage{array}
\RequirePackage{etoolbox}
\patchcmd{\@array}{\setbox \@arstrutbox \hbox{\vrule \@height \arraystretch \@tempdima \@depth \arraystretch \dp \strutbox \@width \z@}}
{\@temprowdepth \dp \strutbox \advance \@temprowdepth by\extrarowdepth \setbox \@arstrutbox \hbox{\vrule \@height \arraystretch \@tempdima \@depth \arraystretch \@temprowdepth \@width \z@}}
{\PackageInfo{extrarowdepth}{\string\extrarowdepth\space added to the array package}}
{\PackageWarning{extrarowdepth}{Failed to include \string\extrarowdepth\space in the array package}}
\let\@@array\@array
下面是一个如何使用它的示例。
\documentclass{article}
\usepackage{tabularx,booktabs}
\usepackage{lipsum} % just for the example
\usepackage{extrarowdepth}
\usepackage[table, svgnames]{xcolor}
\rowcolors{2}{lightgray!30!Lavender}{white}
\begin{document}
\setlength\extrarowheight{4pt}
\setlength\extrarowdepth{4pt}
\noindent
\begin{tabularx}{\textwidth}{@{}llX@{}}
\toprule
\rowcolor{white}
A & B & \centering C \tabularnewline
\midrule
1 & 2 & \lipsum*[2] \\
1 & 2 & \lipsum*[2] \\
1 & 2 & \lipsum*[2] \\
\bottomrule
\end{tabularx}
\end{document}
答案3
根据参数\aboverulesep
和采取行动\belowrulesep
:
\documentclass{article}
\usepackage{tabularx,booktabs}
\usepackage{lipsum} % just for the example
\begin{document}
\noindent
\begin{tabularx}{\textwidth}{@{}llX@{}}
\toprule
A & B & \centering C \tabularnewline
\midrule
1 & 2 & \lipsum*[2] \\
\midrule
1 & 2 & \lipsum*[2] \\
\bottomrule
\end{tabularx}
\bigskip
\setlength{\aboverulesep}{10pt}
\setlength{\belowrulesep}{10pt}
\noindent
\begin{tabularx}{\textwidth}{@{}llX@{}}
\toprule
A & B & \centering C \tabularnewline
\midrule
1 & 2 & \lipsum*[2] \\
\midrule
1 & 2 & \lipsum*[2] \\
\bottomrule
\end{tabularx}
\end{document}
使用彩色行,您可以插入\addlinespace
:
\documentclass{article}
\usepackage{tabularx,booktabs}
\usepackage{lipsum} % just for the example
\usepackage[table]{xcolor}
\rowcolors{2}{gray!10}{white}
\begin{document}
\noindent
\begin{tabularx}{\textwidth}{llX}
\toprule
\rowcolor{white}
A & B & \centering C \tabularnewline
\midrule
1 & 2 & \lipsum*[2] \\ \addlinespace
1 & 2 & \lipsum*[2] \\ \addlinespace
1 & 2 & \lipsum*[2] \\
\bottomrule
\end{tabularx}
\end{document}