在 tabularx 环境中垂直对齐多行

在 tabularx 环境中垂直对齐多行

我正在尝试将第一个多行列垂直居中对齐。不幸的是,多行不能确定实际高度。相反,它根据三个单行行的高度来对齐多行。这里有一个小例子来演示这个问题。有什么想法可以解决这个问题吗?

\documentclass{article}
\usepackage{tabularx, multirow, blindtext}

\begin{document}
  \begin{tabularx}{\textwidth}{cX}
    \multirow{3}{*}{C} & \blindtext \\
                       & \blindtext \\
                       & \blindtext \\
   \end{tabularx}
\end{document}

答案1

也许你把设置过度简化了。不过,这里有一个简单的方法来获得垂直对齐:

在此处输入图片描述

\documentclass{article}
\usepackage{tabularx, blindtext}

\begin{document}

\noindent
\makebox[3em]{C}%
\begin{tabularx}{\dimexpr\linewidth-3em}{X}
  \blindtext \\
  \blindtext \\
  \blindtext
\end{tabularx}
\end{document}

上面的代码利用了这样一个事实,即tabular-like 结构相对于周围内容总是垂直居中,但同时也假设了以下几点:

  • 你不想让表格跨越页面边界(这个假设成立,因为你正在使用tabularx(英文):

  • 您为第一个“列”指定一些手动宽度(尽管如果需要,也可以使用一些框计算来克服这个问题);

  • 不要在第一个“列”中使用多行内容(同样,这也可以通过使用 来克服\parbox)。

答案2

http://chat.stackexchange.com/search?q=multirow&user=11727&room=41

对于多行对齐的想法,但如果你真的想居中,C你可以使用\raisebox它来降低第一个和最后一个基线之间距离的一半:

在此处输入图片描述

(这需要两次乳胶)

\documentclass{article}
\usepackage{tabularx,blindtext}

\makeatletter
\def\z#1{%
\pdfsavepos\write\@auxout{\global\noexpand\@namedef{pos@#1}{\the\pdflastypos}}}

\def\pos@start{0}
\def\pos@end{0}
\begin{document}


\noindent
  \begin{tabularx}{\textwidth}{cX}
    C & \blindtext \\
                       & \blindtext \\
                       & \blindtext \\
   \end{tabularx}


\noindent
  \begin{tabularx}{\textwidth}{cX}
    \smash{\raisebox{0.5\dimexpr
\pos@end sp - \pos@start sp
\relax}{C}} & \z{start}\blindtext \\
                       & \blindtext \\
                       & \blindtext\z{end} \\
   \end{tabularx}




\end{document}

答案3

您必须计算相邻单元格的确切行数。默认情况下,multirow似乎假设相邻单元格只有一行。

另一种解决方案(如果在现实生活中使用X说明符)可以是不使用多行,并将X说明符重新定义为m列类型:

\documentclass{article}
\usepackage{tabularx, multirow, blindtext}


\begin{document}

  \begin{tabularx}{\textwidth}{cX}
    \multirow{33}{*}{C} & \blindtext \\
                       & \blindtext \\
                       & \blindtext \\
   \end{tabularx}

{\renewcommand{\tabularxcolumn}[1]{m{#1}}
 \begin{tabularx}{\textwidth}{cX}
    & \blindtext \\
     Q & \blindtext \\
    & \blindtext \\
   \end{tabularx}}
\end{document} 

在此处输入图片描述

相关内容