上下文
我正在尝试创建一个满足以下条件的表
- 第一行所有单元格的填充必须大于默认填充。
- 所有单元格的内容必须垂直居中对齐。
关于条件 1:我知道如何更改所有单元格的填充,但不知道如何对特定行的所有单元格执行此操作而不对所有其他行造成影响(请参阅下面的文档)
\documentclass{article}
\begin{document}
\def\arraystretch{2}
\noindent
\begin{tabular}{|c|c|c|}
\hline a & b & c
\\ \hline a & b & c
\\ \hline a & b & c
\\ \hline
\end{tabular}
\end{document}
关于条件2:我知道怎么做。
\documentclass{article}
\usepackage{array, lipsum}
\begin{document}
\noindent
\begin{tabular}{|m{5cm}|m{5cm}|}
\hline a & \lipsum[1][1-2]
\\ \hline \lipsum[2][1-2] & b
\\ \hline
\end{tabular}
\end{document}
问题
如何创建满足条件 1 和条件 2 的表格?
答案1
我使用零宽度规则插入零宽度 m 列来设置行高。此外,我定义了一种新的列类型,M
使其内容垂直和水平居中。
在示例2中,我定义了一个新命令\rl
,它允许您单独设置行高。
示例 1 - 等高行
\documentclass{article}
\usepackage{array}
\newcolumntype{M}{>{\centering\arraybackslash}m{15pt}}
\begin{document}
\noindent
\begin{tabular}{|*{3}{M|}>{\rule{0pt}{30pt}}m{0pt}}
\cline{1-3} a & b & j &
\\ \cline{1-3} a & b & j &
\\ \cline{1-3} a & b & j &
\\ \cline{1-3}
\end{tabular}
\end{document}
示例 2 - 不同高度的行
\documentclass{article}
\usepackage{array}
\newcolumntype{M}{>{\centering\arraybackslash}m{15pt}}
\newcommand{\rl}[1]{\rule{0pt}{#1pt}}
\begin{document}
\noindent
\begin{tabular}{|*{3}{M|}m{0pt}}
\cline{1-3} a & b & j & \rl{16}
\\ \cline{1-3} a & b & j &
\\ \cline{1-3} a & b & j &\rl{30}
\\ \cline{1-3}
\end{tabular}
\end{document}
答案2
{NiceTabular}
在 的环境中nicematrix
,您有两个键cell-space-top-limit
和cell-space-bottom-limit
以及一个用于它们连接的键cell-space-limits
。
使用最新版本nicematrix
(2021-07-15 的 v. 5.18),可以使用命令修复单行的这些参数的值\RowStyle
。
\documentclass{article}
\usepackage{nicematrix}
\begin{document}
\newcolumntype{M}{>{\raggedright\arraybackslash}m{2.2cm}}
\begin{NiceTabular}{MMM}[hvlines,cell-space-limits=1mm]
some text & here also some text & text, text, text and text \\
some text & here also some text & text, text, text and text \\
\RowStyle[cell-space-limits=0pt]{}
some text & here also some text & text, text, text and text \\
some text & here also some text & text, text, text and text \\
\end{NiceTabular}
\end{document}
该包还提供了绘制所有规则的nicematrix
密钥。hvlines
答案3
我不会使用 arraystretch
垂直居中的单元格内容,因为它会不对称地扩展单元格的高度和深度。更好的方法是使用包cellspace
,它定义了一个最小在以字母为前缀的说明符的列中单元格顶部和底部的垂直填充S
(或者C
如果您加载siunitx
)。
这里是演示,\cellspacetop-bottomlimit
选择,以便解决方案arraystretch
和解决方案cellspace
导致表格高度相同:
\documentclass{article}
\usepackage{cellspace}
\setlength{\cellspacetoplimit}{8.5pt}
\setlength{\cellspacebottomlimit}{8.5pt}
\begin{document}
{\def\arraystretch{2}
\noindent
\begin{tabular}{|c|c|c|}
\hline a & b & c
\\ \hline a & b & c
\\ \hline a & b & c
\\ \hline
\end{tabular}}
\qquad
\begin{tabular}{|Sc|Sc|Sc|}
\hline a & b & c
\\ \hline a & b & c
\\ \hline a & b & c
\\ \hline
\end{tabular}
\end{document}