我有一个 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}