我想要一个表格,其第一列对齐顶部,第二列对齐中间,第三列对齐底部;如下所示:
我写了以下代码:
\documentclass{article}
\usepackage[english]{babel}
\usepackage{array}
\begin{document}
\begin{tabular}{| p{1cm} | m{1cm} | b{1cm} |}
\hline
x &
A long text comes here &
x \\
\hline
\end{tabular}
\end{document}
然而令我惊讶的是,结果却是“所有列都居中对齐”,如下所示:
我做错了什么?
答案1
您可以使用可选参数来\parbox
设置垂直对齐和垂直大小。这是一个小的演示示例,我只是快速估算了高度。插入\vspace{0pt}
是更改对齐基线的技巧。如果没有它,我们会得到很多额外的空白。
\documentclass{article}
\newcommand*{\tabbox}[2][t]{%
\vspace{0pt}\parbox[#1][3.7\baselineskip]{1cm}{\strut#2\strut}}
\begin{document}
\begin{tabular}{| p{1cm} | p{1cm} | p{1cm} |}
\hline
\tabbox{x} &
\tabbox{A long text comes here} &
\tabbox[b]{x} \\
\hline
\end{tabular}
\end{document}
输出:
答案2
该包的问题array
在于您不能在同一个表中使用 和p{...}
。如果存在,通常会覆盖其他两个。您可能只想手动插入垂直空间或在环境中进行对齐。m{...}
b{...}
m{...}
multirow
答案3
我会给出一个解决方案tabularray
包。示例中,h
column 与头部对齐,f
column 与脚部对齐。
\documentclass{article}
\usepackage{tabularray}
\begin{document}
\begin{tblr}{| h{1cm} | m{1cm} | f{1cm} |}
\hline
x & A long text comes here & x \\
\hline
\end{tblr}
\end{document}
答案4
这本身不是一个答案,而是一个从我所了解的“较低”层次进行的观察:
\parindent=0pt
\baselineskip=0pt
\raggedright
\halign to .2\hsize{
\vbox to 20pt{\hsize=.05\hsize#\vfil}&% cmr10*2=20
\vbox to 20pt{\hsize=.10\hsize#\vfil}&
\vtop to 20pt{\hsize=.05\hsize#\vfil}\cr
\hfill x&long text here&x\cr
\centerline{wtf}&is happening here&huh?\cr
}\hfill
\bye
注意第一个“x”高于下一个垂直框,最后一列内容低于中间列内容,尽管有明确的高度定义。另外,我不知道行之间的空白来自哪里。
我当然也想知道发生了什么。