Более тонкая настройка
Режимы, задаваемые командами \sloppy и \fussy, представляют собой две крайности. Здесь мы расскажем вам о более аккуратных способах управления разбиением на строки.
Параметр \hfuzz. Если вы получаете слишком много сообщений о переполнениях, можно попросить TeX вообще не считать слишком длинными те строки, которые выдаются за край не очень сильно. Для этих целей предусмотрен параметр \hfuzz. Например, команда
\hfuzz=2.5ptуказывает, что как overfull будут восприниматься лишь те строки, которые выступают за край более, чем на два с половиной пункта. В обычном режиме значение параметра \hfuzz равно одной десятой пункта.
Если \hfuzz равен примерно



Мера разреженности строки. Как вы помните, в сообщении TeX'а о разреженной строке фигурирует такая мера разреженности строки, как "badness". Посмотрите, как выглядят на печати разреженные строки с различными значениями этой меры:

У последней из наших строк значение badness равно 10000. Если растянуть пробелы в строке еще сильнее, то badness уже не увеличится, а останется равной 10000: с точки зрения TeX'а, такие разреженные строки настолько плохи, что нет смысла делать различие между ними.
Для интересующихся объясним подробнее, как вычисляется badness. Как мы уже говорили в разд. "Промежутки между предложениями", промежутки между словами в тексте не фиксированы, а могут растягиваться или сжиматься. Каковы эти пробелы и насколько они могут растягиваться, зависит от шрифта (для примера: у основного шрифта кегля 10 обычный промежуток между словами равен примерно




Отношение "требуемого растяжения" к " пределу растяжимости" строки определяет, насколько разреженной получится строка. Традиционно это отношение обозначается буквой








В том счастливом случае, когда требуемая длина строки совпадает с естественной, мера разреженности равна нулю; если мера разреженности не превосходит


Теперь мы можем объяснить точный смысл параметра \emergencystretch. Если при верстке абзаца не удалось избежать переполнения, то — при условии, что значение \emergencystretch отлично от нуля, — TeX делает еще одну попытку, при которой в процессе перебора вариантов разбиения абзаца на строки (и вычислений соответствующих значений badness) к "пределу растяжимости" каждой из строк прибавляется значение \emergencystretch.
Параметр\tolerance. Теперь в нашем распоряжении есть все необходимые понятия, чтобы объяснить, как TeX выбирает между разреженной строкой и переполнением.
При разбиении абзаца на строки TeX никогда не создает строки, мера разреженности (badness) которых больше, чем значение TeX'овского параметра, называемого \tolerance. При невозможности удовлетворить этому условию создаются строки, выходящие за край: возникает overfull. С другой стороны, если мера разреженности строки не превосходит значения \tolerance, то будет создана именно столь разреженная строка, но не overfull.
В отличие от некоторых других систем компьютерной верстки, TeX никогда не растягивает и не сжимает отдельное слово.
В стандартном режиме значение параметра \tolerance равно


В частности, именно так работает команда \sloppy: она устанавливает \tolerance=9999, а не 10000 (так что сколь угодно разреженные строки все-таки не допускаются) и при этом задает значение \emergencystretch , равное 3em (так что при необходимости растянуть строки TeX может равномерно распределить дополнительную растяжимость по всему абзацу).
Увеличить значение \tolerance можно "глобально", во всем документе, дав в преамбуле команду наподобие
\tolerance=400 или же "локально", дав аналогичную команду внутри группы, содержащей данный абзац. В последнем случае не забывайте, что закрывающая группу фигурная скобка должна идти после пустой строки, завершающей абзац (см. выше обсуждение команд \sloppy и \raggedright ).
Как менять длину абзаца. Иногда абзац не помещается на полосу из-за того, что он на строку-другую длиннее, чем нужно, и хочется его укоротить. Команда
looseness=-1 побуждает TeX стараться, чтобы абзац занял на одну строку меньше, чем при оптимальной верстке. Если абзац короткий (скажем, занимает всего две строки), то из этого, конечно, ничего не получится.
Если же абзац достаточно длинный, то у TeX'овского алгоритма обычно хватает гибкости, чтобы достигнуть этой цели.
Можно присвоить параметру \looseness и значение

По умолчанию значение параметра \looseness равно, естественно, нулю, и по окончании верстки каждого абзаца этот параметр также устанавливается в нуль. Тем самым нет нужды заботиться о том, чтобы значение \looseness менялось внутри группы, и бессмысленно присваивать этому параметру какое-то значение в преамбуле (оно забудется после первого же абзаца текста). Для каждого абзаца, для которого это вообще нужно, значение \looseness надо устанавливать заново.
Борьба с последней строкой.
Нехорошо, когда последняя строка абзаца слишком коротка (например, короче, чем абзацный отступ следующего абзаца). Чтобы бороться с этим, можно использовать те средства, с которыми мы уже знакомы. Если, например, последняя короткая строка представляет собой обрубок слова, завершающего абзац, то можно либо запретить переносы в этом слове, взяв его в \mbox , либо сказать перед этим словом \linebreak, либо, если это слово длинное, указать в нем место для переносов в явном виде (с помощью команды \-\,) только в начале (в надежде, что поджаться на меньшее расстояние TeX'у будет легче). Другой вариант — сказать \looseness=-1 перед пустой строкой, завершающей абзац: если TeX'у удастся сделать абзац на строку короче, то вряд ли завершающая строка разбитого по-новому абзаца будет короткой.
Разумеется, чудес не бывает: эти рецепты могут подействовать, если абзац достаточно длинен, а не состоит из пары строк.
Другой нежелательный эффект возникает, когда длина последней строки абзаца лишь чуть-чуть меньше, чем ширина полосы. В этом случае разумно довести последнюю строку до края.
В этом может помочь еще не рассматривавшийся нами параметр \parfillskip. Именно, скажите (перед завершающей абзац пустой строкой) \parfillskip=0pt, и TeX постарается растянуть последнюю строку (увеличивая промежутки между словами не только в последней строке, но, при необходимости, и в остальных). Если в результате этих действий не случится overfull'а или underfull'а, то все в порядке.
После окончания абзаца прежнее значение параметра \parfillskip не восстанавливается, так что менять его надо внутри группы.
Дополнительные тонкости с переносами. Вы можете влиять на частоту переносов в абзацах с помощью параметра \hyphenpenalty. По умолчанию его значение равно


Наряду с параметром \hyphenpenalty (отвечающим как за автоматически вставленные переносы, так и за переносы, возможные места для которых вы отметили с помощью команды \-), есть и параметр \exhyphenpenalty, отвечающий за переносы в словах с дефисом или командой \slash. Напомним, что в таких словах автоматический перенос возможен только в том месте, где дефис (или \slash) делит слово на части. Так вот, чем больше значение \exhyphenpenalty, тем с меньшей охотой TeX будет делать переносы в этих местах. Если же значение \exhyphenpenalty равно

Значение двух описанных выше параметров используется TeX'ом в тот момент, когда он видит пустую строку, завершающую абзац.
Соответственно, если вы присваиваете этим параметрам новые значения внутри группы, то группа не должна завершаться до этой пустой строки. Учтите также, что если вы увеличиваете значение \hyphenpenalty и тем самым затрудняете TeX'у переносы слов, то вам может понадобиться увеличить и \tolerance или \emergencystretch, чтобы он смог побольше растягивать строки.
Полиграфические правила не допускают, чтобы в абзаце шло подряд много (скажем, более трех) строк с переносами. Бороться с таким недостатком помогает параметр \doublehyphendemerits: чем его значение больше, тем менее выгодны для TeX'а будут такие последовательности строк, и тем более настойчиво он будет их избегать при переборе вариантов разбиения абзаца на строки. По умолчанию значение этого параметра равно 10000; если переносы идут подряд, можно увеличить значение этого параметра, скажем, до миллиона (такое большое число выбрано не случайно: чтобы этот параметр оказал действие, его значение должно быть того же порядка, что и квадрат встречающихся при переборе возможных разбиений значений badness); если вы делаете это увеличение не в преамбуле документа, а в группе, то, как водится, нужно, чтобы эта группа содержала и пустую строку, завершающую абзац.
Есть также аналогичный параметр \finalhyphendemerits: чем больше его значение, тем с меньшей охотой TeX будет делать перенос в предпоследней строке абзаца. Значение этого параметра по умолчанию равно 5000.
Наконец, вот заключительная хитрость. Если вы присвоите значение

\uchyph=0 то TeX никогда не будет делать переносов в словах, начинающихся с прописной буквы. Такой режим полезен, например, в том случае, если вы не хотите делать переносы в именах собственных. Чтобы снова разрешить TeX'у переносить слова, начинающиеся с прописной буквы, присвойте параметру \uchyph значение
