使用“\arraystretch”时,如何使表格单元格的文本在单元格内垂直居中?

使用“\arraystretch”时,如何使表格单元格的文本在单元格内垂直居中?

我用过\arraystretch(以下这个答案) 来减少环境中的行高tabular。这似乎减少了文本顶部和行顶部之间的空间(对于我的目的来说,这更好),但现在该空间比文本底部和行底部之间的空间小得多。我也想减少后者的空间。

如何使单元格中的文本在单元格内垂直居中?在每个单元格中,文本只有一行。

我已经尝试过m并将其b作为列类型;但没有明显的效果。这个答案看起来相关且有建议\centering\arraybackslash,但这也没有降低文本质量。

定义和使用命令raisebox在运行文本的水平模式下有效,但在表格单元格中无效。这个答案建议将raisebox及其两个参数放在 和 之间\smash{}我猜不出这样做的正确语法,但无论如何这可能是错误的方法,所以我回到主要问题:如何让单元格的文本在 s 之间垂直居中\hline

梅威瑟:

\documentclass[12pt,a4paper]{article}
\usepackage{array}% for \newcolumntype

% See https://tex.stackexchange.com/a/35517
\renewcommand{\arraystretch}{0.84}

% See https://tex.stackexchange.com/a/406499
\newcolumntype{C}{>{\centering\arraybackslash}m{4.5mm}}

% A way to lower the next token without using the brace characters
\def\bury{\raisebox{-1mm}}

%\newcolumntype{C}{>{\bury}m{4.5mm}}

% See https://tex.stackexchange.com/a/63199
%\newcolumntype{C}{>{\smash\begingroup\bury}m{4.5mm}<{\endgroup}}

\newenvironment{ta}
{\Huge\bf\begin{tabular}{|C|C|}\hline}{\\ \hline\end{tabular}}

\begin{document}

\begin{ta}
6&7\\ \hline
8&9
\end{ta}

\end{document}

答案1

另一个选择可能是使用较新的tabularray包,它内置了控制边框放置的选项,选项hborder包括abovesepbelowsepabovesep+belowsep+选项。请参阅其文档

\documentclass[12pt,a4paper]{article}

\usepackage{tabularray}
\NewColumnType{C}{Q[c,m,wd=4.5mm,font={\Huge\bfseries}]}
\newenvironment{ta}%
{\begin{tblr}{%
    colspec={CC},
    hborder{1-Z}={belowspace=4pt,abovespace=0pt},
    hlines,vlines
}}%
{\end{tblr}}

\begin{document}

\begin{ta}
6&7\\
8&9
\end{ta}

\end{document}

带边框设置的 tblr

答案2

使用,您可以将其设置为 0,然后使用 键在元素上方和下方留出空间。使用 键{NiceTabular},将绘制所有规则,使用 键,所有列将具有相同的宽度。nicematrix\arraystretchcell-space-limitshvlinescolumns-width=auto

\documentclass[12pt,a4paper]{article}
\usepackage{nicematrix}

\begin{document}

\Huge\bfseries
\renewcommand{\arraystretch}{0}
\begin{NiceTabular}[hvlines,cell-space-limits=4pt,columns-width=auto]{ccc}
6&7&\\
8&9&
\end{NiceTabular}

\end{document}

上述代码的输出

答案3

单元格中“垂直居中”没有实际意义,因为字符有高度深度。

如果您的目的是排版表格,其中的条目没有深度,例如数字,则可以将其设置\arraystretch为零并添加合适的支撑,高度与数字加上填充一样高,深度与填充一样深。这里我使用 4pt。

\documentclass[12pt,a4paper]{article}
\usepackage{array}% for \newcolumntype

\newcommand{\mystrut}[1]{%
  \vrule
  width 0pt
  height \dimexpr\fontcharht\font`0+#1\relax
  depth #1\relax
}
\newcolumntype{C}{>{\mystrut{4pt}}c}
\newenvironment{ta}
 {\renewcommand{\arraystretch}{0}
  \Huge\bfseries
  \begin{tabular}{|C|C|}\hline}{\\ \hline\end{tabular}}

\begin{document}

\begin{ta}
6&7\\ \hline
8&9
\end{ta}

\end{document}

在此处输入图片描述

请注意,\bf其他双字母字体命令已被弃用超过 25 年。

如果您还想要延伸到基线以下的字符:

\documentclass[12pt,a4paper]{article}
\usepackage{array}% for \newcolumntype

\newcommand{\mystrut}[1]{%
  \vrule
  width 0pt
  height \dimexpr\fontcharht\font`0+#1\relax
  depth \dimexpr\fontchardp\font`y+#1\relax
}
\newcolumntype{C}{>{\mystrut{4pt}}c}
\newenvironment{ta}
 {\renewcommand{\arraystretch}{0}
  \Huge\bfseries
  \begin{tabular}{|C|C|}\hline}{\\ \hline\end{tabular}}

\begin{document}

\begin{ta}
a&b\\ \hline
d&y
\end{ta}

\end{document}

在此处输入图片描述

修改顶部的代码以确保宽度相等。

\documentclass[12pt,a4paper]{article}
\usepackage{array}% for \newcolumntype

\newcommand{\mystrut}[1]{%
  \vrule
  width 0pt
  height \dimexpr\fontcharht\font`0+\tabcolsep\relax
  depth #1\relax
}
\newcolumntype{C}{>{\mystrut{\tabcolsep}}w{c}{\fontcharwd\font`0}}
\newenvironment{ta}
 {\renewcommand{\arraystretch}{0}
  \Huge\bfseries
  \begin{tabular}{|C|C|}\hline}{\\ \hline\end{tabular}}

\begin{document}

\begin{ta}
6&7\\ \hline
8&9
\end{ta}

\bigskip

\begin{ta}
6& \\ \hline
8& 
\end{ta}

\end{document}

在此处输入图片描述

关键是列类型w{c}{<dimen>}。适应您的需求。

相关内容