Работа в системе LaTeX
de301fb4

Растяжимые интервалы


До сих пор шла речь о важных, но непринципиальных различиях между TeX'овским \hbox и LaTeX'овским \mbox. Теперь поговорим о дополнительных возможностях, предоставляемых TeX'овской командой.

Команда \hbox "в чистом виде" создает блок, ширина которого равна естественной длине текста, являющегося ее аргументом. Кроме этого, она может создавать блоки любой заданной ширины. Для этого нужно сказать

\hbox to {ширина}{текст}

Здесь {ширина}должна быть выражена в воспринимаемых TeX'ом единицах длины: это может быть, например, 20pt, или 2.3cm, или, например, 0.12\textwidth - параметр со значением длины (возможно, с коэффициентом) тоже годится. Между to и обозначением ширины, а также между обозначением ширины и открывающей фигурной скобкой могут быть пробелы - TeX их проигнорирует2). Наконец, отсутствие backslash в слове to не является опечаткой: это не команда, а одно из "ключевых слов" TeX'а (подобно ключевым словам plus и minus, с которыми мы вскоре снова встретимся, или width и height, с которыми мы уже встречались в разделе, посвященном линейкам). Давайте опробуем эту новую возможность команды \hbox:

\hbox to 3cm {Два слова}

Если вы опробовали этот пример на вашем компьютере, то заметили, что на экране появилось сообщение

Underfull \hbox

Дело в том, что пробел между словами "Два" и " слова" не может растянуться настолько, чтобы наш блок имел ширину три сантиметра; в ситуациях, когда пробел насильно заставляют растянуться больше, чем положено, возникает сообщение об Underfull'е, как это было объяснено в разд. 3.6.6.

Можно, однако, заставить TeX создать блок требуемой ширины " без скандала". Для этого в том промежутке, который мы хотим растянуть, надо поставить команду \hfil:

\hbox {Два слова}\\ \hbox {Два \hfil слова}\\ \hbox to 2cm {Два \hfil слова}\\ \hbox to 3cm {Два \hfil слова}\\ \hbox to 4cm {Два \hfil слова}

Если мы не указываем явно ширину блока, а предоставляем TeX'у создать блок "естественной" ширины, то команда \hfil никакого действия не оказывает; если промежуток для достижения требуемой ширины надо растянуть, то растяжение на требуемое расстояние будет проведено в том месте, где стоит команда \hfil.


Если в аргументе команды \ hbox присутствует не одна команда \hfil, а несколько, то растяжение произойдет на месте каждой из этих команд, причем размер этого растяжения будет распределен между командами \hfil равномерно: если необходимо превысить естественную ширину блока на
\,см, а в аргументе команды \hbox стоят два \hfil, то на месте каждого из них будет добавлен пробел в
см. Вот пример с несколькими \hfil:



\hbox to 4cm{Раз \hfil два \hfil три}
В частности, если \hfil стоит справа или слева от текста, то весь текст будет прижат влево или вправо, поскольку \hfil отмечает то единственное место, в котором интервалы могут растягиваться; если же две команды \hfil стоят по обе стороны от текста, то текст внутри блока будет центрирован, поскольку дополнительное растяжение поделится между двумя \hfil поровну:



\hbox to 0.7\textwidth {Слева\hfil} \hbox to 0.7\textwidth {\hfil Справа} \hbox to 0.7\textwidth {\hfil В центре\hfil} Можно считать, что на месте каждого \hfil в строку вставляется пружина; все эти пружины имеют одинаковую жесткость, в свободном состоянии все они имеют нулевую ширину, и все эти пружины могут сколь угодно широко растягиваться.

Наряду с \hfil существует команда \hfill, также задающая бесконечно растяжимые пробелы, причем эта растяжимость "в бесконечное число раз больше", чем у пробелов, задаваемых \hfil. Если в аргументе команды \hbox присутствуют \hfil и \hfill совместно, то все растяжения происходят только за счет "более растяжимых" \hfill:



\hbox to 4cm{\hfil Слово\hfil}\\ \hbox to 4cm{\hfill Слово\hfil}\\ \hbox to 4cm{\hfil Слово\hfill}


Содержание раздела