![如何为表中的所有行指定固定高度?](https://linux22.com/image/235221/%E5%A6%82%E4%BD%95%E4%B8%BA%E8%A1%A8%E4%B8%AD%E7%9A%84%E6%89%80%E6%9C%89%E8%A1%8C%E6%8C%87%E5%AE%9A%E5%9B%BA%E5%AE%9A%E9%AB%98%E5%BA%A6%EF%BC%9F.png)
我有类似的东西:
\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
如果希望每行的高度相同,请尝试以下两种方法之一:
\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}
一种可能更容易修改的新方法是:
\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...
以已知连字模式结尾的单词,此时右边距的文本溢出也消失了。