我怀疑是否有办法做到这一点,而且我只遇到过一次需要此功能的情况,当时有一个简单的解决方法,但我对这里的人们想出的方法感到惊讶,所以我无论如何都要问。
考虑以下简单文档:
\documentclass[12pt, twocolumn]{article}
\usepackage{microtype}
\begin{document}
\noindent
zero one two three four five six seven eight~nine
\noindent
\begin{tabular}{@{}l@{}}
zero one two three four five six seven eight nine
\end{tabular}
\end{document}
第一段只是从 0 到 9 的计数单词。它适合一行,因为段落中的空格可以拉伸和缩小。第二段是相同的文本,但嵌入在表格中。不幸的是,这会导致整个内容按其自然宽度排版,从而溢出到下一列,如果不是另一列恰好是空的,我们就会得到一个无法阅读的混乱局面。
当然,在这个虚构的例子中,答案是“不要这样做”;只有一列和一行的表格非常愚蠢。但请考虑以下更现实的例子:
short LLLOOONNNG
LLLOOONNNG short
在这里,我能想到的唯一简单解决方法是目视检查每列中最长的行,然后手动将其包装在一个足够窄以进行压缩但又不会窄到导致换行的 parbox 中。这需要相当多的乏味的反复试验。
说到分页,LaTeX 有 \enlargethispage*{0pt},它可以强制页面排版尽可能紧凑。如果这里有类似的东西就好了。如果在需要更多空间的情况下不需要尽可能紧凑,那就更好了。
答案1
l
在排版用、c
或声明的表格单元格时,TeX 从不使用单词间粘连的收缩和拉伸部分r
,因为它会在一端或任一端添加无限粘连。
您可以使用以下方式排版单元格,使单词间粘合缩小到字体参数允许的最大值\spaceskip
:
\documentclass[12pt,draft]{article}
\usepackage{microtype}
\usepackage{array}
\newcommand{\maxshrink}{%
\spaceskip=\dimexpr\fontdimen2\font-\fontdimen4\font\relax
}
\newlength{\testwd} % for testing
\begin{document}
\settowidth{\testwd}{zero one two three four five six seven eight~nine}
\addtolength{\testwd}{-8pt} % make TeX shrink the first paragraph
\parbox{\testwd}{
zero one two three four five six seven eight~nine
\begin{tabular}{@{}>{\maxshrink}l@{}}
zero one two three four five six seven eight nine
\end{tabular}
\begin{tabular}{@{}l@{}}
zero one two three four five six seven eight nine
\end{tabular}
}
\end{document}
您可以添加一个可选参数,比如
\newcommand{\maxshrink}[1][1]{%
\spaceskip=\dimexpr\fontdimen2\font-#1\fontdimen4\font\relax
}
\maxshrink[0.8]
如果您不希望收缩量达到允许的最大值,而只达到 80%,则可以这样调用它。