如何为表中的所有行指定固定高度?

如何为表中的所有行指定固定高度?

我有类似的东西:

\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}

\begin{tabular}{| c | C{3cm} | C{4cm} |}
Short Text & Short Text & Short Text \\ \hline
Short Text & Short Text & Loooooooooooooooooooooong Text \\ \hline 
\end{tabular}

这会使第二行的高度更宽。那么如何为表格中的所有行指定固定高度?

答案1

如果希望每行的高度相同,请尝试以下两种方法之一:

  1. \vbox对每个单元格使用:

    \documentclass[a4paper]{article}
    \usepackage{array}  
    
    \begin{document} 
    
    \newcolumntype{C}[1]{%
     >{\vbox to 5ex\bgroup\vfill\centering}%
     p{#1}%
     <{\egroup}}  
    
    \begin{tabular}{|c | C{3cm} | C{5cm} |} 
     \hline 
     Short Text & Short Text & Short Text \tabularnewline \hline
    Short Text  & Short Text & Loooooooooo  oooooooooooong Text \tabularnewline \hline  
    Short Text  & Short Text & Loooooooooooooooooooooong Text \tabularnewline \hline 
    \end{tabular}    
    \end{document}
    

    在此处输入图片描述

    关于表格的有趣链接:表格技巧.pdf, 和维基教科书上的表格

  2. 一种可能更容易修改的新方法是:

    \documentclass[a4paper]{article}
    \usepackage{array}  
    
    \begin{document} 
    \def\mystrut(#1,#2){\vrule height #1 depth #2 width 0pt}
    
    \newcolumntype{C}[1]{%
       >{\mystrut(3ex,2ex)\centering}%
       p{#1}%
       <{}}  
    
    \begin{tabular}{|c | C{3cm} | C{4cm} |} 
    \hline 
    Short Text & Short Text & Short Text \tabularnewline \hline
    Short Text  & Short Text & Loooooooooooooooooong Text \tabularnewline \hline  
    \end{tabular}    
    \end{document}
    

    在这个解决方案中,放置文本更加容易。您只需要修改支柱的height和。depth

答案2

这是我发现 ConTeXt 的键值界面更加直观的地方之一

\setupTABLE[c][2][width=3cm]
\setupTABLE[c][3][width=5cm]

\setupTABLE[each][each][height=3\lineheight,align={middle,middle},frame=on]

\starttext

\startTABLE
  \NC Short text \NC Short text \NC Short Text \NC \NR
  \NC Short text \NC Short text \NC Loooooooooo oooooooong teeeeeeeeeeeeeext \NC \NR
  \NC Short text \NC Short text \NC Loooooooooo oooooooong teeeeeeeeeeeeeext \NC \NR
\stopTABLE

\stoptext

在此处输入图片描述

我希望有一个 LaTeX 包可以为表格实现这样的界面。

答案3

我宁愿使用稍微不同的方式来做这件事\vphantom,它需要更多的手动工作,但更容易理解。

您获得不同大小的列的原因是列说明m符及其作用。这个特定的说明符实际上是一个parbox。显然,由于您的文本比的宽度长,parbox它将溢出或换行到下一行。由于 TeX 的连字模式没有模式,ooooooooooooo它只会溢出表格,但这是另一个故事。

为了让所有单元格的高度相同,我会使用 astrut或 TeX 的等效 a(\vphantom在本例中)。幻影命令将创建一个宽度为零但高度与封闭文本相同的隐形框。我们使用以下命令执行此操作:

\def\Z{\vphantom{\parbox[c]{1cm}{\Huge Something Long}}}

这样就和手动排版一样,所有行都相等了,最终代码如下:

\documentclass[11pt]{article} 
\usepackage{array}
\begin{document}
\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\def\Z{\vphantom{\parbox[c]{1cm}{\Huge Something Long}}}
\bigskip
\begin{tabular}{| c | C{3cm} | C{4cm} |}
\hline
\Z Short Text & Short Text & Short Text \\ \hline
\Z Short Text & Short Text & Loooooooooooooooothetheme Text \\ \hline 
\end{tabular}
\end{document}

如果您有相同类型的长重复表,则可能有必要定义一个addRow可以自动添加支柱的命令。

通过将中的参数更改为 中的vphantom parbox任意一个t,b,c,您还可以获得底部、中心或顶部的对齐。

另外,我将其改为Looo...以已知连字模式结尾的单词,此时右边距的文本溢出也消失了。

相关内容