在基本tabular
环境中,可选参数“sometime”似乎\\
不起作用。例如,为什么每行都以 结尾,但在突出显示的行后面没有额外的垂直间距\\[2.0ex]
?
笔记:
我知道适用于的解决方案全部表中各行:
\renewcommand{\arraystretch}{1.5}
\extrarowheight=3pt\relax
(附有array
包装)
但我专门寻找一个解决方案,让我能够按照 MWE 逐行控制间距。
参考
代码:
\documentclass{article}
%% --------------------- These two for \rowcolor (to reproduce image)
%\usepackage{colortbl}
%\usepackage{xcolor}
\usepackage{array}% For \extrarowheight
\newcommand{\ShortText}{Short text.}% Fits on one line
\newcommand{\LongText}{Long text that takes up more than one line.}%
\begin{document}
\noindent
%\renewcommand{\arraystretch}{1.5}% This works, but applies to ALL rows
%\extrarowheight=3pt\relax% This works with the array package, but applies to ALL rows
\begin{tabular}{l p{0.35\linewidth} p{0.45\linewidth}}
Num & Column 1 & Column 2 \\[2.0ex]
1 & \ShortText & \ShortText \\[2.0ex]
2 & \ShortText & \LongText \\[2.0ex]
%\rowcolor{red!25}% <-- Needs "colortbl" and "xcolor"
3 & \LongText & \ShortText \\[2.0ex]% <--- Why this optional parameter ignored
4 & \LongText & \LongText \\[2.0ex]
5 & \ShortText & \ShortText \\[2.0ex]
\end{tabular}
\end{document}
答案1
\\
表格内部的宏定义如下\@tabularcr
。如果有一个可选参数,长度为正数,则宏将采用默认线的深度,增加长度,并以更大的深度设置一条隐形的规则。
然而,由于两个线单元顶部对齐,有问题的线的深度已经大得多。因此,可选参数仍然无效,除非其长度增加到大于两个线单元的(未知)深度。
\addlinespace
包的宏booktabs
使用不同的方法,在行后插入空格。
例子:
\documentclass{article}
%% --------------------- These two for \rowcolor (to reproduce image)
\usepackage[table]{xcolor}
\usepackage{array}% For \extrarowheight
\usepackage{booktabs}% For \addlinespace, \defauladdspace
\newcommand{\ShortText}{Short text.}% Fits on one line
\newcommand{\LongText}{Long text that takes up more than one line.}%
\begin{document}
\noindent
\setlength{\defaultaddspace}{2ex}%
\begin{tabular}{l p{0.35\linewidth} p{0.45\linewidth}}
Num & Column 1 & Column 2 \\\addlinespace
1 & \ShortText & \ShortText \\\addlinespace
2 & \ShortText & \LongText \\\addlinespace
\rowcolor{red!25}% <-- Needs xcolor with option table
3 & \LongText & \ShortText \\\addlinespace
4 & \LongText & \LongText \\\addlinespace
5 & \ShortText & \ShortText \\
\end{tabular}
\end{document}
实现方式不同的原因是 LaTeX 的方法\@tabularcr
支持垂直规则。\addlinespace
另一边的宏来自booktabs
表格包没有垂直规则。
答案2
使用可选参数添加间距对于单行行很有效。如果行单元格中有更多行,则必须更改该值。
一个更好的解决方案是使用\cellspacetop-bottomlimit
包中的长度cellspace
,它定义了一个最小带有以字母为前缀的说明符的列中单元格顶部和底部的垂直间距S
(或C
如果您加载siunitx
)。根据定义,仅在必要时添加此间距。
无关:如果您xcolor
使用选项加载[table]
,则无需自行加载colortbl
。
\documentclass{article}
\usepackage{cellspace}
\setlength{\cellspacebottomlimit}{1ex}
\setlength{\cellspacetoplimit}{1ex}
\usepackage{array}% For \extrarowheight
\newcommand{\ShortText}{Short text.}% Fits on one line
\newcommand{\LongText}{Long text that takes up more than one line.}%
\begin{document}
\noindent
\begin{tabular}{l S{p{0.35\linewidth}} S{p{0.45\linewidth}}}
Num & Column 1 & Column 2 \\
1 & \ShortText & \ShortText \\
2 & \ShortText & \LongText \\
3 & \LongText & \ShortText \\ % <--- Why this optional parameter ignored
4 & \LongText & \LongText \\
5 & \ShortText & \ShortText
\end{tabular}
\vskip1cm
\begin{tabular}{l p{0.35\linewidth} p{0.45\linewidth}}
Num & Column 1 & Column 2 \\[2.0ex]
1 & \ShortText & \ShortText \\[2.0ex]
2 & \ShortText & \LongText \\[4.5ex]
3 & \LongText & \ShortText \\[4.5ex]% <--- Why this optional parameter ignored
4 & \LongText & \LongText \\[2.0ex]
5 & \ShortText & \ShortText \\[2.0ex]
\end{tabular}
\end{document}
答案3
如果你使用tblr
新 LaTeX3 包中的环境,生活就会变得轻松很多tabularray
:\\[dimen]
总是为行添加垂直空间。
\documentclass{article}
\usepackage{colortbl}
\usepackage{xcolor}
\usepackage{array}
\usepackage{tabularray}
\SetTblrInner{rowsep=0pt}
\newcommand{\ShortText}{Short text.}% Fits on one line
\newcommand{\LongText}{Long text that takes up more than one line.}%
\begin{document}
\noindent
\section{Tabular}
\begin{tabular}{l p{0.35\linewidth} p{0.45\linewidth}}
\hline
Num & Column 1 & Column 2 \\[2.0ex]
1 & \ShortText & \ShortText \\[2.0ex]
2 & \ShortText & \LongText \\[2.0ex]
\rowcolor{red!25}
3 & \LongText & \ShortText \\[2.0ex]% <--- this optional parameter is ignored
4 & \LongText & \LongText \\[2.0ex]
5 & \ShortText & \ShortText \\[2.0ex]
\hline
\end{tabular}
\section{Tabularray}
\noindent
\begin{tblr}{l p{0.35\linewidth} p{0.45\linewidth}}
\hline
Num & Column 1 & Column 2 \\[2.0ex]
1 & \ShortText & \ShortText \\[2.0ex]
2 & \ShortText & \LongText \\[2.0ex]
\SetRow{red8}
3 & \LongText & \ShortText \\[2.0ex]% <--- this optional parameter is not ignored
4 & \LongText & \LongText \\[2.0ex]
5 & \ShortText & \ShortText \\[2.0ex]
\hline
\end{tblr}
\end{document}