垂直对齐表格中的单个单元格

垂直对齐表格中的单个单元格

我希望能够垂直对齐表格中的任何单元格。这似乎是可能的,但只能以每列或每行为基础。目前,我可以借助和\raggedleft命令水平对齐各个单元格的内容\centering。但是,\multicolumn垂直对齐适用于整行,并且longtabu环境只能指定每列的对齐类型。

以下是我想要创建的表格的示例,其中需要为每个单元格而不是每行或每列设置水平和垂直对齐:

\documentclass[11pt,a4paper]{article}
\usepackage{longtable}      
\usepackage{tabu}
\usepackage{lipsum}
\usepackage{multirow}

\newcolumntype{M}{m{\dimexpr 1\tabucolX+1\tabcolsep+\arrayrulewidth\relax}}
\newcolumntype{P}{p{\dimexpr 1\tabucolX+1\tabcolsep+\arrayrulewidth\relax}}
\newcolumntype{B}{b{\dimexpr 1\tabucolX+1\tabcolsep+\arrayrulewidth\relax}}

\newcolumntype{H}{>{\begin{minipage}[b]{\hsize}}B<{\end{minipage}}}

\begin{document}

\begin{longtabu} to 150mm [l] {|X[l]|X[l]|X[l]|}
\hline 
\multicolumn{1}{|P|}{ \lipsum[1]} & \multicolumn{1}{H|}{\centering H: Center, V:Center} & \multicolumn{1}{B|}{\raggedleft \multirow{1}{*}[-2\baselineskip]{H:Right, V:Bottom}} \tabularnewline
\hline
\multicolumn{1}{|P|}{\lipsum[1]} & \multicolumn{1}{P|}{H: Left, V:Top} & \multicolumn{1}{M|}{\centering H:Center, V:Center} \tabularnewline
\hline
\multicolumn{1}{|P|}{\lipsum[1]} & \multicolumn{1}{M|}{\raggedleft H: Right, V:Center} & \multicolumn{1}{B|}{H:Left, V:Bottom} \tabularnewline
\hline 
\tabuphantomline 
\end{longtabu}

\end{document}

更新:

尝试“将表格条目移至行底“ 不起作用。

我认为第一个解决方案只是通过创建新的列类型来调整整个列:

\newcolumntype{B}{>{\begin{minipage}[b]{\hsize}}X<{\end{minipage}}}

这对我的问题没有帮助,因为我需要将垂直对齐应用于单个单元格,而不是整个列。将此列类型应用于\multicolumn似乎不起作用。

第二种解决方案是将 a\baselineskip放入可选参数中,\multirow该参数最初可以工作,但一旦单元格达到一定高度,它似乎就会垂直居中。

我已经更新了上面的例子来展示它是如何中断的。

谢谢

答案1

大卫卡莱尔的回答对我来说似乎不起作用。

哼:-)

对我有用:

在此处输入图片描述

\documentclass[11pt,a4paper]{article}
\usepackage{longtable}  
\usepackage{array}    

\usepackage{lipsum}

\makeatletter


\newcolumntype{P}{p{.3\textwidth}}


\newcommand\m[1]{\multicolumn{1}{#1}}

\newcommand\zc[2]{%
\setbox0\hbox{\parbox[c]{.3\textwidth}{#2}}%
\smash{\raisebox{\dimexpr(\csname PDFSAVEe#1\endcsname sp-
                         \csname PDFSAVEb#1\endcsname sp)/2\relax}{\box0}}}
\newcommand\zb[2]{%
\setbox0\hbox{\parbox[t]{.3\textwidth}{#2}}%
\smash{\raisebox{\dimexpr\csname PDFSAVEe#1\endcsname sp-
                         \csname PDFSAVEb#1\endcsname sp\relax}{\box0}}}

\def\foo#1{\leavevmode
\expandafter\ifx\csname PDFSAVE#1\endcsname\relax
\expandafter\gdef\csname PDFSAVE#1\endcsname{0}%
\fi
\pdfsavepos\write\@auxout{\gdef\string\PDFSAVE#1{\the\pdflastypos}}}
\makeatother

\begin{document}

\begin{longtable}{|P|P|P|}
\hline 
\foo{ba}\lipsum*[1]\foo{ea} &
\zc{a}{\centering H: Center, V:Center} &
\zb{a}{\raggedleft H:Right, V:Bottom} \tabularnewline
\hline
\foo{bb}\lipsum*[1]\foo{eb} & 
{H: Left, V:Top} &
\zc{b}{\centering H:Center, V:Center} \tabularnewline
\hline
\foo{bc}\lipsum*[1]\foo{ec} &
\zc{c}{\raggedleft H: Right, V:Center} & 
\zb{c}{H:Left, V:Bottom} \tabularnewline
\hline 
\end{longtable}

\end{document}

相关内容