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