Tex: подробное описание С. М. Львовский


Download 1.51 Mb.
Pdf ko'rish
bet117/143
Sana08.05.2023
Hajmi1.51 Mb.
#1444247
1   ...   113   114   115   116   117   118   119   120   ...   143
Bog'liq
LaTeX-Lvovsky

3.3. Клей
Выше мы рассмотрели команды \hfil и \hfill, которые действуют подобно вставленным
в строку пружинам. TEX позволяет вставлять в строку пружины с самыми разнообразны
ми свойствами. Для этого применяется команда \hspace, аргумент которой содержит plus-
или minus-компоненту. Мы упоминали об этой возможности в разделе III.7.3, но в тот мо

мент у нас еще не было серьезных примеров. Теперь давайте займемся такими командами
вплотную. Если Вы скажете
\hspace{x plus y minus z}
где x, y и z
— длины, то вставите в текст пружину, которая в свободном состоянии имеет
длину x, может увеличивать свою длину максимум на y
3
и уменьшать свою длину максимум
на z (в отличие от пружин, встречающихся в жизни, может выполняться неравенство x < z,
и, того пуще, длины y и z могут быть отрицательными, но мы не будем объяснять, как TEX по
ведет себя в столь странной ситуации). Здесь plus и minus
— это, как мы помним, очередные
ключевые слова TEXа, наподобие to, width и height. Если мы создаем блок естественной
ширины, то команда \hspace с таким аргументом создаст пробел размером x; если же мы в
команде \hbox попросим TEX создать блок, ширина которого отличается от естественной, то
для достижения требуемой ширины размеры пробелов будут изменяться. В TEXнической тер
минологии эти
«пружины» называются клеем (Дональд Кнут отмечает, что название «клей»
неудачно, но менять его поздно, поскольку, по его словам,
«оно уже приклеилось»). Длины y
и z, указанные после ключевых слов plus и minus, называются plus- и minus-компонентами
клея. Длина x называется естественным размером клея. С этой точки зрения команда \hfil
также помещает в строку клей
— с бесконечной растяжимостью и нулевым естественным
размером.
Опишем более точно, как именно растягивается или сжимается клей при выполнении ко

манды \hbox to .... Для простоты предположим дополнительно, что plus- и minus- ком

поненты клея всюду неотрицательны и что в строке отсутствует клей с бесконечной растя

жимостью или сжимаемостью (в частности, в строке нет \hfil’ов или \hfill’ов; про клей
с бесконечной сжимаемостью речь пойдет ниже). В этом случае TEX вычисляет «естествен
ную ширину
» блока, складывающуюся из ширин составляющих его элементов и естествен
ных размеров клея, и сравнивает ее с требуемой шириной блока, указанной в команде \hbox
после ключевого слова to. Если эти две ширины совпали, то все пробелы будут иметь есте

ственный размер. Если требуемая ширина больше естественной, то TEX вычисляет, насколь
ко больше, после чего
«разверстывает» эту добавку между всеми пробелами пропорциональ
но величинам plus-компонент клея в этих пробелах. Вот пример. Предположим, мы создаем
блок с помощью команды
3
Если мы заставим ее растянуться больше, чем на y, то получим сообщение
«Underfull \hbox»; см. ниже.


VIII.3. КОМАНДА
\hbox
171
\hbox to a {a\hspace{0pt plus 2em}%
b\hspace{1cm plus 1em minus 2mm}w}
где величина a на три миллиметра больше естественной ширины блока АБВ, то пробел меж

ду А и Б будет равен двум миллиметрам, а пробел между Б и В
— одиннадцати миллиметрам,
поскольку plus-компонента клея между А и Б в два раза больше, чем plus-компонента клея
между Б и В (и никакого другого клея в строке нет, так что ничего более растянуть нельзя).
Если требуемая ширина меньше естественной, то уменьшение длины также разверстывается
между всеми элементами клея пропорционально величинам их minus-компонент. Если про

должить аналогию между TEXовским клеем и пружинами, то можно сказать, что жесткость
пружины при растяжении обратно пропорциональна величине plus-компоненты.
В вышеприведенном примере оба пробела в блоке были созданы вручную командой \hspace;
если же в аргументе команды \hbox присутствуют пробелы, то следует учесть, что эти пробе

лы также, как мы объясняли на стр.
76
, обладают растяжимостью и сжимаемостью, которая
также берется в расчет.
В случае, когда пробелы надо растягивать и требуемое растяжение блока больше, чем
сумма plus-компонент всех элементов клея, на экран и в log-файл выдается хорошо знако

мое Вам сообщение Underfull \hbox; если пробелы надо уменьшать и величина, на которую
надо уменьшить ширину блока, меньше, чем сумма minus-компонент всех элементов клея,
выдается не менее знакомое сообщение Overfull \hbox.
Все сказанное относилось к случаю, когда бесконечно растяжимого клея в аргументе ко

манды \hbox нет. Если же таковой присутствует (например, есть команда \hfil) и пробелы
надо растягивать, то растяжимость клея с конечными значениями plus-компонент утрачива

ется: соответствующие интервалы будут иметь естественный размер (что бы ни было написа

но в аргументе команды \hspace после plus), а все растяжения будут происходить только за
счет \hfil’ов. При этом сообщение об Underfull’е выдаваться не будет, как бы ни растяну

лись пробелы. Аналогично, если пробелы надо ужимать и присутствует клей с бесконечной
сжимаемостью, все уменьшения пробелов произойдут только за его счет, и никогда не будет
выдано сообщения об Overfull’е.

Download 1.51 Mb.

Do'stlaringiz bilan baham:
1   ...   113   114   115   116   117   118   119   120   ...   143




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling