パラメーター \emergencytolerance がないのはなぜですか?

パラメーター \emergencytolerance がないのはなぜですか?

言い換えやレイアウトの変更などで過剰なボックスを削除できない場合、基本的に次の 2 つの方法で削除できます。

  1. 価値を高める\tolerance
  2. 価値を高める\emergencystretch

2 番目の戦略のよく引用される利点は、増加が\emergencystretch「悪い」段落 (つまり、 を満たすようにタイプセットできない段落\tolerance) にのみ影響し、「良い」段落 (つまり、 を満たすようにタイプセットできる段落) は変更されないことです\tolerance

一方、\emergencystretch行区切り処理を変更する方法は、私にはあまり適切ではないように思われます。 は、\emergencystretch不良度を計算するときに各行の伸縮性に追加されます。 したがって、 を増やすと、\emergencystretch3 回目のパスでの不良度は減りますが、合計デメリットの計算に含まれるその他のパラメーター ( \hyphenpenalty\adjdemerits\doublehyphendemerits、 ...) は変更されません。 これにより、不良度の影響が減り、ハイフンなどで終わる行の影響が増加します。 さらに、追加の伸縮性は、スペースが 4 つしかない行とスペースが 10 個ある行では効果が異なります。

\emergencystretch( は、たとえば自動タイプセットなどでは便利だとわかっています。\emergencystretchに応じて を十分に高く設定することで\hsize、オーバーフル ボックスが発生しないようにすることができます (入力に、行よりも幅が広いハイフンで区切れない単語などの奇妙なものが含まれていない限り)。\tolerance=10000もオーバーフル ボックスを生成することはありませんが、ひどい改行の決定につながる可能性があります。)

TeX の改行アルゴリズムが 3 回目のパスで許容値として使用する値をオプションで指定できるパラメーター (または適切な名前) がないのはなぜでしょうか\emergencytolerance。3 回目のパスは次のように動作します。

  • \emergencytoleranceデフォルト値 を持つ と呼ばれるパラメータがあります-1
  • 2 番目のパスが失敗し、\emergencystretch正または\emergencytolerance負でない場合は、3 番目のパスが実行されます。
  • 3 回目のパスの手順は次のとおりです。 が\emergencystretch正の場合、この値は不良度を計算するときに各ラインの伸縮性に追加されます。 が\emergencytolerance非負の場合、 の代わりにこの値が不良度の制限として使用され\tolerance、それ以外の場合は\toleranceが 2 回目のパスと同様に使用されます。

これにより、ボックスがいっぱいになることなく、「良い」段落を変更せずに、また、上記で説明したように増加することによるデメリットなしに、「悪い」段落をタイプセットできるようになります\emergencystretch。なぜ、この機能 (おそらく実装は簡単) は、少なくとも eTeX や pdfTeX (Knuth の TeX は基本的に凍結されています) などの新しいエンジンでは利用できないのでしょうか。

答え1

私のコメントに続きます (質問に対する答えではないかもしれませんが、人々が認識しておくことで恩恵を受けることができると思います)。

David がコメントで書いているように、何かが追加されなかった理由に答えるのはそれほど簡単ではありません。LuaTeX は凍結されていると聞いているので、おそらくそこに追加されることはないと思いますが、LuaMetaTeX では現在それが可能であるという情報によって、皆さんが理解していただければ幸いです。

コメントで示されているように、許容値を増やす以外にも多くのことが可能です。ただし、以下の最小限の例では、許容値を増やして、さらに 2 つのパーパスを追加するだけです。

\setuppapersize[A6]

\showmakeup[page]

\startsetups align:pass:test
    \pretolerance 100
    \tolerance    200
    \parpasses    2
        threshold            0.025pt
        tolerance            400
      next
        threshold            0.025pt
        tolerance            800
    \relax
\stopsetups

\starttext

\samplefile{hawking}

\page[yes]

\setupalignpass[test]
% \tracingonline2
% \tracingpasses2

\samplefile{hawking}

\stoptext

2 つのページを並べて表示します。

出力、追加許容範囲

トレース マクロのコメントを解除すると、ターミナルにさらに情報が表示されます。

ちなみに、これによって実行時間はほとんど増えません。300 ページの本では、4 回の追加パス (拡張を含む) で 1 秒も増えないと思います。(つまり、これは TeX が実際に時間を費やす場所ではありません...)

関連情報