如何强制最大单元格高度?

如何强制最大单元格高度?

我有一个 Python 脚本,它可以输出文件,随后由 Latex 读取这些文件以编写报告。有时,用户文本标签很长,可能会破坏我的 Latex 表格。

我使用以下方法来限制表格单元格的宽度:

\newcolumntype{M}{>{\begin{varwidth}{0.3\textwidth}}c<{\end{varwidth}}}

但是,现在长文本溢出到第二行(或第三行...),导致我的表格变大。表格仍然看起来不错,但我想防止它变大,以便表格大小保持一致。

我尝试了 \noindent\begin{minipage}[t][2.5cm][t]{\textwidth} ... \end{minipage} 但似乎不起作用。

我希望缩小字体以使其适合。或者,我接受截断。

梅威瑟:

\documentclass{article}
\usepackage{array}
\usepackage{varwidth} %for the varwidth minipage environment

\begin{document}

\newcolumntype{M}{>{\begin{varwidth}{0.3\textwidth}}c<{\end{varwidth}}} %M is for Maximal column

  \begin{tabular}{rrrrrrrr}
  \multicolumn{2}{M} {This is sometimes long} &  & \multicolumn{2}{M}{This is also sometimes long but I don't want the table to grow with it} &  & \multicolumn{2}{M}{and this can be long} \\ 
  key & value &  & key & value &  & key & value \\ 
  0 & 1 &  & 0 & 1 &  & 0 & 1\\   
  \end{tabular} 

\end{document}

答案1

嗯,您可以尝试tcolorbox使用tcboxfit类似这样的方法(有点不规范,从印刷方面来说肯定不是最好的解决方案):

\documentclass{article}

\usepackage{tcolorbox}
\tcbuselibrary{fitting,skins}

\newtcboxfit{\cellbox}[1]{%
 enhanced,frame hidden,interior hidden,%
 boxrule=0pt,boxsep=0pt,arc=0pt,%
 left=0pt,right=0pt,top=0pt,bottom=0pt,%
 height=#1,width=.3\textwidth%
}

\newcommand{\autoshrinkcell}[2]{%
 \multicolumn{#1}{l}{\cellbox{10mm}{#2}}%
}

\begin{document}

\begin{tabular}{rrrrrrrr}
  \autoshrinkcell{2}{This is sometimes long} &  & \autoshrinkcell{2}{This is also sometimes long but I don't want the table to grow with it} &  & \autoshrinkcell{2}{and this can be long} \\   
  key & value &  & key & value &  & key & value \\ 
  0 & 1 &  & 0 & 1 &  & 0 & 1\\   
\end{tabular} 

\end{document}

得出:

在此处输入图片描述

表格行永远不会超出框的定义高度,这将减小字体大小以使其适合。

但是,我不知道为什么在框下方和下一行之前会出现这个奇怪的间隙。我不知道如何删除它……也许其他人知道这是怎么回事?

无论如何,最好想出另一种不需要挤压文本的解决方案(例如参见 Zarko 的建议)。

答案2

  • 从技术角度来看,当单元格中的文本长度超过规定的单元格宽度时,可以设计自动缩小字体的单元格
  • 从美学角度来看,这样的解决方案会导致(在我看来)桌子外观不好

我宁愿重新思考如何设计表格。例如:

  • 使用较小的字体大小(\small
  • 减少多列单元中的线扩展
  • 手动调整多列单元格的宽度,以使单元格高度(即单元格中的文本行数)尽可能平衡。

根据以上假设,表格如下:

\documentclass{article}
\usepackage[showframe,
            margin=25mm]{geometry}
\usepackage{array}
\newlength\colwidth
\newcommand\mcp[2]{\multicolumn{2}{%
    p{\dimexpr#1\linewidth-2\tabcolsep}}{#2}}

\usepackage{lipsum}

\begin{document}
    \begin{table}[htb]
    \small\linespread{0.84}\selectfont
    \renewcommand\arraystretch{1.5}
\begin{tabular}{rr rr rr}   
\mcp{0.25}{This is sometimes long}  & 
\mcp{0.50}{\lipsum*[11]}            &  
\mcp{0.25}{and this can be long}            \\
key & value & key & value   & key  & value  \\
  0 & 1     & 0   & 1       & 0    & 1      \\ 
\end{tabular}
    \end{table}
\lipsum[11]
\end{document}

在此处输入图片描述

相关内容