我希望能够垂直对齐表格中的任何单元格。这似乎是可能的,但只能以每列或每行为基础。目前,我可以借助和\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}