表格垂直对齐问题

表格垂直对齐问题

我想要一个表格,其第一列对齐顶部,第二列对齐中间,第三列对齐底部;如下所示:

我写了以下代码:

\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包。示例中,hcolumn 与头部对齐,fcolumn 与脚部对齐。

\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”高于下一个垂直框,最后一列内容低于中间列内容,尽管有明确的高度定义。另外,我不知道行之间的空白来自哪里。

我当然也想知道发生了什么。

相关内容