改行に影響する方法は数多くあり、長い改行できないテキストのオーバーフルを回避する方法もあります。困惑しています。\sloppy
ドキュメント全体を使用する必要があると言われています。よくないの代替解決策\sloppy
は\緊急ストレッチ、 それmicrotypeパッケージは改行の調整に役立ちます等
列挙されたすべてのコマンドの効果を誰か説明できますか?
私自身の実験:
\documentclass[12pt]{article}
\usepackage{showframe}
\begin{document}
\fussy
Long made-up words, fussy:
abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl
\sloppy
Long made-up words, sloppy:
abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl
\fussy
Long made-up words, textit, fussy:
\textit{abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl}
\sloppy
Long made-up words, textit, sloppy:
\textit{abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl}
\fussy
Here is a line with long unbreakable rule, fussy. \rule{3cm}{.2cm} \rule{3cm}{.2cm}
\sloppy
Here is a line with long unbreakable rule, sloppy. \rule{3cm}{.2cm} \rule{3cm}{.2cm}
\fussy
Extreme unbreakable rule, fussy. \rule{8cm}{.2cm} \rule{8cm}{.2cm}
\sloppy
Extreme unbreakable rule, sloppy. \rule{8cm}{.2cm} \rule{8cm}{.2cm}
\end{document}
ご覧のとおり、\sloppy
過剰充填の回避に役立ちますが、極端な場合には役立ちません。
答え1
\sloppy
これはLaTeXマクロであり、
\def\sloppy{%
\tolerance 9999%
\emergencystretch 3em%
\hfuzz .5\p@
\vfuzz\hfuzz}
\fussy
値をLaTeXのデフォルトに戻します
\def\fussy{%
\emergencystretch\z@
\tolerance 200%
\hfuzz .1\p@
\vfuzz\hfuzz}
\tolerance
段落を設定するときに tex が使用できる最大の「悪さ」を設定します。つまり、この悪さがこのしきい値を下回っている限り、空白を拡張してペナルティを適用できるブレークポイントが挿入されます。これができない場合は、ボックスがいっぱいになります。したがって、値が異なると、タイプセットの結果も異なります。
\emergencystretch
(TeX3 で追加) は、TeX が段落を不良度以下に設定できない場合に使用されます\tolerance
が、オーバーフル ボックスを作成する代わりに、各行\emergencystretch
に伸縮可能なグルーが追加されているように「見せかけて」追加のパスを試みます。これにより、全体の不良度が 1000 未満に抑えられ、TeX が「諦めて」すべての伸縮を 1 行に収めるのを防ぎます。したがって、\emergencystretch
「良い」段落の設定は変更されず、オーバーフル ボックスを生成する段落の設定のみが変更されます。本物TeX からの badness 計算は、\emergencystretch
タイプセットを制御するために追加のストレッチを使用して再試行されますが、ログ記録の目的には適しているとは見なされません。
\hfuzz
組版にはまったく影響しませんが、ボックスがほんの少しだけいっぱいになった場合に TeX がエラーを発するのを止めるだけです。
\hbadness
`not used in \sloppy
but used in the final example below` も同様で、タイプセッティングには影響しませんが、不良度が指定された量を下回る場合、ボックスが不足していることに関する TeX の警告を停止します。
の主な問題は、を 9999 に\sloppy
設定することですが、これはほぼ無限に悪いです。これは、空白を均等に分配せず、段落の個々の行で空白を任意の大きさに広げるようになります。これは TeX で認められた欠陥であり、TeX3 で新しいパラメータが追加された理由です。残念ながら、 を追加して LaTeX2e 用に定義したときに、設定を減らさずに 9999 のままにしました。これはおそらく LaTeX2.09 との互換性には良いですが、他のすべてには良くありません。\tolerance
\emergencystretch
\emergencystretch
\sloppy
\tolerance
\emergencystretch
最終的な設定を見ると、設定のみ変更せずに変更するだけで、より良い設定が得られることが分かります。\tolerance
どちらの場合も設定は同じですが、\hbadness=10000
警告は表示されません。誰もがそうするわけではありません。欲しい最終設定については警告されませんが、入力の変更が不可能でボックスがいっぱいになりたくない自動タイプセッティングのコンテキストでは、これが発生する可能性があります。
\documentclass[12pt]{article}
\usepackage{showframe}
\begin{document}
\def\test#1{{#1
\texttt{\detokenize{#1}}
Long made-up words, sloppy:
abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl
\textit{abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl}
Long made-up words, textit, sloppy:
\textit{abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl abcdefghijklabcdefghijkl}
Here is a line with long unbreakable math, sloppy. ${a+b+c+d a+b+c+d}$ ${a+b+c+d a+b+c+d }$
Extreme unbreakable math, sloppy. ${a+b+c+d+e a+b+c+d+e a+b+c+d+e a+b+c+d+e }$ break ${a+b+c+d+e a+b+c+d+e a+b+c+d+e a+b+c+d+e }$
\nobreak\bigskip\hrule\filbreak}}
\test{}
\test{\sloppy}
\test{\setlength\emergencystretch{\hsize}}
\test{\setlength\emergencystretch{\hsize}\hbadness=10000}
\end{document}