为什么 TeX 在这里更喜欢使用溢出的盒子而不是连字符?

为什么 TeX 在这里更喜欢使用溢出的盒子而不是连字符?

下面是一个产生溢出水平盒子的短文件:

\documentclass[12pt]{report}
\usepackage[left=1.5in,right=1in,paperwidth=8.5in,paperheight=11in]{geometry}
\begin{document}
\trivlist
\item[\hskip\labelsep{\bf2.3.12 Corollary [Isomorphisms are indexed bijections]:}]
Consider the functions $f$ and $g$
\endtrivlist
\end{document}

如果我functions用替换func-\linebreak tions,该单词将分成两行,导致水平盒子既不会过满也不会过满。但是,func\-tionsnor 不会func-tions产生这种行为。为什么不呢?有没有更好的方法让 TeX 相信可以使用连字符连接该单词以防止盒子过满?

答案1

需要记住的是,TeX 不是逐行构建页面,而是逐段构建页面。这与大多数文字处理程序的行为有很大不同。

TeX 会应用各种规则(如果这些规则不满足要求,就会受到惩罚或扣分)来得出段落的“整体最佳”外观。TeX 不仅会为过满的行分配惩罚,还会为不规则的单词间空间分配惩罚。具体来说,TeX 会尽力在段落的所有行中产生大致相同的单词间空间,并且默认情况下会尝试将单词间空间量保持在相当“紧凑”的水平。如果同一段落内各行之间的单词间空间量明显不同,并且单词之间有太多空白,TeX 会通过分配大量惩罚来实现这一点。

在您提供的示例中,未使用连字符的单词“functions”恰好在右侧边​​距中突出了“仅”两个字符(“ns”)。在 TeX 看来,这种结果似乎比使用连字符连接单词“functions”更好,因为使用连字符连接单词还会产生两个非常大的单词间距——“Consider”和“the”之间以及“the”和“functions”之间。(TeX 不允许调整 参数中的单词之间的任何单词间距\item,因为该“框”已经关闭,并且不再可通过 TeX 的段落构建例程进行修改。因此,在构建段落时,TeX 只允许修改第一行中的两个单词间距。)

要覆盖 TeX 的段落构建默认设置,可以发出命令\sloppy。果然,如下面的代码和屏幕截图所示,如果在\sloppy之前插入该指令,TeX 可以毫无问题地将单词“functions”连\item字符化;代价是在段落的第一行产生两个相当大的单词间间隙。(如果您不想输入\sloppy,可以尝试输入\tolerance=1000。 的默认值为。有关此参数的更多信息,请参阅 TeXbook 第 29f 页。)\tolerance200

一个不同的、在我看来更好的解决方案是,首先认识到导致行满问题的真正原因是 TeX 最初只被给予两个单词间隙来调整。限制范围\item并放置\textbf{[Isomorphisms are indexed bijections]:} \item[\hskip\labelsep{\bfseries 2.3.12 Corollary}]为 TeX 的段落构建算法创造了更多的“自由度”。这立即导致了更令人满意的解决方案,如下方屏幕截图所示。(黑色框线是根据软件包showframe的选项插入的geometry。)

最后,还有一种解决方案,可能你喜欢也可能不喜欢,那就是放弃完全对齐:加载包ragged2e并发出允许连字符的命令\RaggedRight。如果没有完全对齐,你几乎可以肯定不会有超满的行。

总之,您描述的问题之所以出现,是因为 (i) TeX 在第一行只有 2 个单词间距可供使用,并且 (ii) TeX 通常会对不规则和较大的单词间距值分配相当高的惩罚。就您的示例而言,这些惩罚似乎超过了让单词略微超出文本块右侧边缘所产生的惩罚。要解决这个问题,您可以使用\sloppy或简单地为 TeX 的段落构建算法提供更多的自由度(通过限制指令的范围\item)。

在此处输入图片描述

\documentclass[12pt]{report}
\usepackage[left=1.5in,right=1in,
  paperwidth=8.5in,paperheight=11in,
  showframe,nomarginpar]{geometry}
\setlength\parindent{0pt} % just for this example
\begin{document}

Initial (``tight'') setting---overfull line.
\trivlist
\item[\hskip\labelsep{\bfseries 2.3.12 Corollary 
  [Isomorphisms are indexed bijections]:}]
Consider the functions $f$ and $g$
\endtrivlist

\medskip
\begingroup
Solution 1: Use \verb+\sloppy+ directive---not great.
\sloppy
\trivlist
\item[\hskip\labelsep{\bfseries 2.3.12 Corollary   
  [Isomorphisms are indexed bijections]:}]
Consider the functions $f$ and $g$
\endtrivlist
\endgroup

\medskip
Solution 2: Limit extent of argument of \verb+\item+---best.
\trivlist
\item[\hskip\labelsep{\bfseries 2.3.12 Corollary}] 
  \textbf{[Isomorphisms are indexed bijections]:}
Consider the functions $f$ and $g$
\endtrivlist

\end{document}

相关内容