\tolerance 和 \badness 之间有什么区别?

\tolerance 和 \badness 之间有什么区别?

我对理解 Knuth 的 TeXbook 第 29 页第 6 章中的这句话有些困难:

再次运行 TeX,这次先说

\hsize=2in \tolerance=1600 \input story

这样,错误率高达 1600 的行就可以被容忍。好极了!这次没有出现过满的框。(但你确实收到了一条关于未满 框,因为 TeX 会报告所有不良程度超过某个阈值的框,该阈值称为\hbadness;普通 TeX 集 \hbadness=1000。)

答案1

\tolerance设置会影响段落中断例程本身:对\tolerance(和\pretolerance)的更改实际上会影响选择哪些换行符。较高的值允许接受较差的行(通常意味着:单词间空间拉长),该值10000表示“恐慌模式”,其中任何内容都可以接受。通常,值越低,段落看起来就越好,但您可能会冒着减少可能换行符列表的风险,最终导致行数过满。

\hbadness设置仅影响有关实际选择的线路的用户报告(您在屏幕和日志中看到的消息),对中断程序本身没有影响。

答案2

您可以想到 TeX 在排版段落时使用的三组参数,一组由排版员和字体设计师设置,一组由 TeX 内部计算。 是\badness由 TeX 内部计算的,而 是\tolerance由排版员设置的,用于告诉 TeX 在行和段落整体质量方面可以容忍什么。

调整这些参数有点像暗黑艺术。

使用 pdfTeX 运行以下最小程序。

\overfullrule=0.1pt
\hsize150pt

\def\astory{Fast pace and mechanically intensive 
  facilities such as data-centers, hospitals, and 
  laboratories typically require the most intense 
  coordination efforts. Architectural and structural 
  systems are often designed first with allowances 
  for MEP systems. Tensions between the size of 
  these MEP spaces, usable floor space, 
  and ceiling height exist. }

\astory

\the\tolerance, 
\the\pretolerance, 
\the\hbadness, 
\the\hfuzz, 
\the\emergencystretch, 
% Second test    
\pretolerance=150
\tolerance=753
\hbadness=752
\hfuzz0pt
\emergencystretch=0em

\astory
\bye

在最小版本中,段落排版,首先使用默认值,其次不使用默认值。第一个版本产生了很多过满和未满的框。我们通过适当调整来消除它们\tolerance。在这个特定的例子中,我将容差设置为比 TeX 报告的 hbadness 值高 1。这消除了所有未满警告。

当您将其从 150pt 设置为 160pt 时,会出现一个令人惊喜的结果\hsize,这就是“黑色艺术”部分出现的地方!

相关内容