如何在 tabularx 中正确垂直居中单元格?

如何在 tabularx 中正确垂直居中单元格?

我想为表格行/单元格添加额外的间距tabularx。但是,在设置\arraystretch为大于 1 的值并设置\tabularxcolumnm(见下文)后,我注意到内容稍微垂直居中,但向下移动了相当多,即低于每个单元格的垂直中心。

我该如何正确居中呢?

示例呈现

\documentclass[a4paper,11pt]{article}

\usepackage{tabularx}
\pagenumbering{gobble}

\renewcommand\tabularxcolumn[1]{m{#1}}
\renewcommand\arraystretch{5}

\begin{document}

\begin{tabularx}{\textwidth}{|X|X|}
\hline
hello & world \\
\hline
hello & x\vspace{20ex}\newline world \\
\hline
\end{tabularx}

\end{document}

我发现一些 答案这会将一些看似随机的间距调整到顶部。但是,这似乎并没有解决这个特定问题。至少我没有看到通过添加固定间距(例如)的通用解决方案,{-1ex}因为间距似乎取决于内容大小。如果我的眼睛欺骗了我,偏移量确实是恒定的,我如何确定精确的抵消?


編輯:cellspace是的不是在我的上下文中似乎可以工作。我想,这些都是最小工作示例的问题。

答案1

这里有一种方法,将X列类型重新定义为m{...}列,以及S预列说明符结合起来cellspace,确保最小列中单元格顶部和底部的垂直间距,前缀如下:

\documentclass[a4paper,11pt]{article}

\usepackage{tabularx, cellspace}
\pagenumbering{gobble}

\setlength{\cellspacetoplimit}{30pt}
\setlength{\cellspacebottomlimit}{30pt}
\addparagraphcolumntypes{X}

\begin{document}

\renewcommand{\tabularxcolumn}[1]{m{#1}}
\begin{tabularx}{\textwidth}{|S{X}|S{X}|}
\hline
hello & world \\
\hline
hello & x \newline world \\
\hline
\end{tabularx}

\end{document} 

在此处输入图片描述

答案2

借助该cellspace包,您可以实现以下目标:

在此处输入图片描述

\documentclass{article}

\usepackage{cellspace}
\usepackage{tabularx}

\renewcommand\tabularxcolumn[1]{m{#1}}
\setlength\cellspacetoplimit{2.5\baselineskip}
\setlength\cellspacebottomlimit{2.5\baselineskip}
\addparagraphcolumntypes{X}

\begin{document}

\begin{tabularx}{\textwidth}{|SX|SX|}
\hline
hello & world \\
\hline
hello & x\vspace{20ex}\newline world  \\
\hline
\end{tabularx}

\end{document}

答案3

\vspace{fill}您可以使用语法在单元格内容之前和之后重定向>{}。如果您只有这种类型的 X 列,则将重定向放入 X 列的重新定义中,IE

\renewcommand\tabularxcolumn[1]{>{\vspace{\fill}}m{#1}<{\vspace{\fill}}}

您也可以使用p-columns 和标准表格。要使内容准确居中,您需要使用 来终止单元格\par

在此处输入图片描述

\documentclass[a4paper,11pt]{article}

\usepackage{tabularx, array}
\pagenumbering{gobble}

\renewcommand\tabularxcolumn[1]{>{\vspace{\fill}}m{#1}<{\vspace{\fill}}}
\renewcommand\arraystretch{5}

\newcolumntype{P}{m{\dimexpr(0.5\linewidth-2\tabcolsep-1.5\arrayrulewidth)}}

\begin{document}

%% tabularx and redefined `X`-columns

\begin{tabularx}{\textwidth}{|X|X|}
\hline
hello\par& world\par\\
\hline
hello\par & x\vspace{20ex}\newline world\par\\
\hline
\end{tabularx}

\vspace{2cm}

%% Tabular and `m`-columns

\begin{tabular}{|P|P|}
\hline
hello\par& world\par\\
\hline
hello\par& x\vspace{20ex}\newline world\par\\
\hline
\end{tabular}

\end{document}

相关内容