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


 Бесконечно сжимаемые интервалы


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

3.4. Бесконечно сжимаемые интервалы
Мы уже два раза упомянули про клей с бесконечной сжимаемостью. Настало время объ

яснить, какими командами его создавать. Из многих способов укажем один, наиболее часто
встречающийся. Команда \hss вставляет в строку клей, естественный размер которого равен
нулю, и который при этом обладает бесконечной растяжимостью (подобно \hfil) и беско

нечной сжимаемостью. Типичное применение такого
«бесконечно сжимаемого» клея — со
здавать блоки, ширина которых меньше реального размера текста, или блоки с наложением
текстов. В самом деле, посмотрите на такой пример:
Кошка
Собака
КошкаСобака
Кошка
Собака
Кошка
Собака
Кошка
Собака
\hbox to 4cm {kO[KA\hss sOBAKA}
\hbox{kO[KA\hss sOBAKA}
\hbox to 17mm {kO[KA\hss sOBAKA}
\hbox to 5mm {kO[KA\hss sOBAKA}
\hbox to 0mm {kO[KA\hss sOBAKA}
Когда мы просим, чтобы ширина блока превышала естественную, команда \hss действует
так же, как и \hfil; когда мы создаем блок с естественной шириной, слова
«Кошка» и «Со


VIII.3. КОМАНДА
\hbox
172
бака
» стоят вплотную друг к другу (естественная ширина клея, созданного \hss, равна ну
лю). Интересные вещи начинаются, когда мы просим, чтобы ширина была 17 мм (что мень

ше естественной). Интервал между словами при этом приходится уменьшить; поскольку его
естественный размер равен нулю, то после уменьшения интервал становится отрицатель

ным, то есть слово
«собака» сдвигается влево (накладываясь на слово «Кошка»), причем
сдвигается так, чтобы ширина блока (то есть расстояние от начала слова
«Кошка» до конца
слова
«Собака») равнялась требуемым 17 мм. Когда же мы наконец просим, чтобы ширина
блока равнялась нулю, слову
«Собака» приходится сдвинуться влево настолько, чтобы рас
стояние от его конца до начала слова
«Кошка» равнялось нулю — иными словами, кошка и
собака меняются местами! Заметим, кстати, что точка отсчета всех наших блоков совпадает
с точкой отсчета буквы К из слова
«Кошка».
Еще один пример использования \hss: как создать блок, точка отсчета которого будет
находиться в правом, а не левом конце текста (мы столкнулись с этой проблемой в главе V
— см. стр.
116
)? Ответ: надо сказать
\hbox to 0pt{\hss текст}
и все будет в порядке. В самом деле, текст имеет ширину, отличную от нуля; чтобы блок
имел в итоге нулевую ширину, приходится
«уменьшать» тот интервал, где стоит \hss; так как
интервал уже нулевой, то это уменьшение сводится к тому, что текст сдвигается влево, до тех
пор, пока расстояние между его концом и точкой отсчета не станет равным нулю
— а это и
означает, что правый конец текста стал его точкой отсчета. В главе V мы сказали, что эта
проблема решается с помощью TEXовской команды \llap, а теперь мы видим, как ее можно
определить:
\newcommand{\llap}[1]{\hbox to 0pt{\hss #1}}
Кстати говоря, именно так она и определяется.
А если сказать
\hbox to 0pt{текст\hss}
то что, спрашивается, будет? Ответ: на сей раз будет уменьшаться интервал после текста;
стало быть, сам текст никуда не сдвинется, но после него будет сделан такой
«отрицатель
ный пробел
», чтобы суммарная ширина равнялась нулю. Иными словами, TEX будет просто
считать, что ширина блока равняется нулю
— мы обманули TEX, убедив его, что наш текст не
занимает места по горизонтали! Для такого обмана (к нему приходится прибегать нередко)
предусмотрена специальная TEXовская команда \rlap, определяемая так:
\newcommand{\rlap}[1]{\hbox to 0pt{#1\hss}}
Все это также напоминает ситуацию с командой \lefteqn, и напоминает не случайно, по

скольку эта команда определяется фактически так:
\newcommand{\lefteqn}[1]{\rlap{$\displaystyle
#1$\hss}}


VIII.3. КОМАНДА
\hbox
173

Download 1.51 Mb.

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




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