在表格行间添加实际空间

在表格行间添加实际空间

我想在表格的行之间添加一些空间,特别是为了防止矩阵中的括号接触,参见此 MWE:

\documentclass{article}

\newcommand*{\mymatrix}[1]{
  \ensuremath{%
    \left[\begin{tabular}{@{}l@{}}#1\end{tabular}\right]%
  }%
}

\begin{document}

\begin{tabular}{*3{l}}
foo & bar & baz\\
foo & \mymatrix{top\\bottom} & baz\\
foo & \mymatrix{top\\bottom} & baz\\
foo & bar & baz\\
\end{tabular}

\end{document}

在此处输入图片描述

TeX.SE 上有很多问题询问如何在表格中添加行间距,在我看来,答案总是建议增加\arraystretch,例如这个问题其中有很多。

但据我所知,这实际上并没有增加空间之间行,它只是垂直拉伸行。如果有东西填充了行的垂直空间,就像我的矩阵一样,这些行的内容仍然会接触,参见下文:

\documentclass{article}

\newcommand*{\mymatrix}[1]{
  \ensuremath{%
    \left[\begin{tabular}{@{}l@{}}#1\end{tabular}\right]%
  }%
}

\renewcommand{\arraystretch}{2}

\begin{document}

\begin{tabular}{*3{l}}
foo & bar & baz\\
foo & \mymatrix{top\\bottom} & baz\\
foo & \mymatrix{top\\bottom} & baz\\
foo & bar & baz\\
\end{tabular}

\end{document}

在此处输入图片描述

所以我的问题是,有没有办法真正增加空间之间表中的行(除了插入空行,这会增加太多空间)?

答案1

这是一个采用\addlinespace的解决方案书签包裹。

在此处输入图片描述

\addlinespace带有一个可选参数,表示应插入多少垂直空格。如果没有指定参数,则应用由包\defaultaddspace设置的参数。0.5em

\documentclass{article}
\newcommand*{\mymatrix}[1]{%
  \ensuremath{\left[\begin{tabular}{@{}l@{}} #1 \end{tabular}\right]}}
\usepackage{booktabs} % for "\addlinespace" macro

\begin{document}

\begin{tabular}{*{3}{l}}
foo & bar & baz\\ 
foo & \mymatrix{top\\bottom} & baz\\ \addlinespace
foo & \mymatrix{top\\bottom} & baz\\ \addlinespace
foo & bar & baz
\end{tabular}
\end{document}

答案2

如果您使用{NiceTabular}nicematrix则您有两个选项cell-space-top-limitcell-space-bottom-limit(名称受 的参数\cellspacetoplimitcellspacebottomlimit启发cellspace),您可以一次设置它们,它们将应用于所有环境{NiceTabular}

\documentclass{article}
\usepackage{nicematrix}
\NiceMatrixOptions{cell-space-top-limit=1pt,cell-space-bottom-limit=1pt}

\newcommand*{\mymatrix}[1]{
  \ensuremath{%
    \left[\begin{tabular}{@{}l@{}}#1\end{tabular}\right]%
  }%
}

\begin{document}

\begin{NiceTabular}{*3{l}}
foo & bar & baz\\
foo & \mymatrix{top\\bottom} & baz\\
foo & \mymatrix{top\\bottom} & baz\\
foo & bar & baz\\
\end{NiceTabular}

\end{document}

上述代码的输出

答案3

这能解决问题吗

无额外包裹

在此处输入图片描述

\documentclass{article}

\newcommand*{\mymatrix}[1]{
  \ensuremath{%
    \left[\begin{tabular}{@{}l@{}}#1\end{tabular}\right]%
  }%
}

\begin{document}

\begin{tabular}{*3{l}}
foo & bar & baz\\
foo & \mymatrix{top\\bottom} & baz\\[8pt]
foo & \mymatrix{top\\bottom} & baz\\[8pt]
foo & bar & baz\\
\end{tabular}

\end{document}

**编辑添加预定义支柱也有效**

相同的结果

在此处输入图片描述

\def\mystrut{\rule{0pt}{2\normalbaselineskip}}
\begin{tabular}{*3{l}}
    foo & bar & baz\\
    foo & \mymatrix{top\\bottom}\mystrut & baz\\[8pt]
    foo & \mymatrix{top\\bottom}\mystrut & baz\\[8pt]
    foo & bar & baz\\
\end{tabular}

答案4

使用 可以轻松自动获得您想要的内容cellspace,它定义以字母 为前缀的说明符的列中单元格顶部和底部的最小垂直间距S,或者C如果您siunitx通过加载时间选项加载 ,甚至加载您喜欢的任何字母column=

\documentclass{article}
\usepackage[column=O]{cellspace}
\setlength{\cellspacetoplimit}{3pt}
\setlength{\cellspacebottomlimit}{3pt}

\newcommand*{\mymatrix}[1]{
 \ensuremath{%
    \left[\begin{tabular}{@{}l@{}}#1\end{tabular}\right]%
 }%
}

\begin{document}

\begin{tabular}{*3{Ol}}
foo & bar & baz\\
foo & \mymatrix{top\\bottom} & baz\\
foo & \mymatrix{top\\bottom} & baz\\
foo & bar & baz
\end{tabular}

\end{document} 

在此处输入图片描述

相关内容