我用过\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
包括abovesep
、belowsep
和abovesep+
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}
答案2
使用,您可以将其设置为 0,然后使用 键在元素上方和下方留出空间。使用 键{NiceTabular}
,将绘制所有规则,使用 键,所有列将具有相同的宽度。nicematrix
\arraystretch
cell-space-limits
hvlines
columns-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>}
。适应您的需求。