Абзацы
Чтобы TeX сверстал абзац, никаких специальных усилий прилагать не нужно: достаточно оставить в исходном тексте пустую строку, указывающую TeX'у на конец абзаца. В этом разделе речь пойдет о тех " нештатных ситуациях", которые могут при этом возникнуть. Система TeX предоставляет множество способов реакции на эти ситуации; некоторые из них важны для всех пользователей, но большая часть — только для полиграфистов. Рекомендуем читателям, полиграфистами не являющимися, пропускать весь мелкий шрифт в этом разделе.
Абзацы без выравнивания и переносов
Можно перевести TeX в режим, при котором он вообще не будет пытаться выравнивать текст по правому краю и не будет (почти никогда) делать переносов. Для этого служит команда \raggedright. Ее можно дать как в преамбуле, так и внутри документа; в любом случае, чтобы она подействовала на абзац, необходимо, чтобы ее действие не прекратилось до того, как TeX'ом будет прочтена пустая строка, завершающая абзац (ср. выше обсуждение команды \sloppy). Вот пример:
Этот абзац мы сверстали без выравнивания и переносов. Может быть, вид и не очень аккуратный, зато без overfull'ов.{\raggedright } |
Команда \raggedright в том виде, как она представлена в LaTeX'е, делает абзацный отступ равным нулю, поскольку предназначена для оформления текста в виде так называемого "флагового набора". В приведенном выше примере этого не произошло, поскольку команда \raggedright была выполнена после начала абзаца, когда абзацный отступ уже был определен; если, однако, записать ее в преамбулу, то отступ будет равен нулю для всех абзацев. Если вам это не нравится, но выравнивать текст по правому краю все-таки не хочется, можно после \raggedright записать в преамбуле команду, устанавливающую значение абзацного отступа \parindent; в стандартных классах значение этого параметра равно примерно 1.5em.
Абзацы нестандартной формы
Пусть нам потребовалось создать абзац c "отрицательным" абзацным отступом, в котором все строки, кроме первой, начинаются на расстоянии одного сантиметра от полей. Этого можно добиться следующим образом:
\hangindent=1cm \noindent Отрицательный абзацный отступ (по-английски hanging indentation). |
Здесь TeX'овский параметр \hangindent означает величину отступа от полей во всех строках абзаца, кроме первой (по умолчанию значение этого параметра равно нулю). Обратите внимание, что мы начали абзац командой \noindent, чтобы первая строка не началась с абзацным отступом (см. разд.Подавление стандартного отступа).
Пусть теперь нам хочется, чтобы дополнительный отступ, величина которого задана параметром \hangindent, начинался не со второй строки, а, скажем, с третьей. Для этого надо установить еще один TeX'овский параметр, обозначаемый \hangafter:
\hangindent=1cm \hangafter=2 \noindent Можно сделать так, чтобы отступ начался не с первой строки, а там, где нам это потребовалось. |
Значение параметра \hangafter — номер строки, после которой начинается дополнительный отступ. По умолчанию значение \hangafter равно единице (как и было в нашем первом примере).
Можно также добиться того, чтоб дополнительный отступ не начинался после какой-то строки, а напротив, присутствовал только в нескольких первых строках абзаца. Для этого надо присвоить параметру \hangafter отрицательное значение: если величина \hangafter равна
, то дополнительный отступ, равный \hangindent, будет присутствовать в строках номер . Пример:
| \hangindent=1.5cm \hangafter=-3 \noindent С помощью рассмотренных нами средств TeX'а можно выкапывать в абзацах небольшие ямки. На место образующегося белого прямоугольника можно, например, вклеить иллюстрацию. |
Если значение параметра \hangindent отрицательно и равно
, то дополнительный отступ размером будет отсчитываться от правого, а не левого поля (в каких именно строках будет этот дополнительный отступ, по-прежнему определяется значением \hangafter):
| \hangindent=-2cm \hangafter=2 \noindent На сей раз нам захотелось приклеить картинку не слева, а справа. Что ж, TeX\ позволяет сделать и так, было бы желание. Вскоре вы сможете убедиться, что и это — не предел. |
p>После каждой команды "завершить абзац" ( иными словами, после каждой пустой строки или команды \par восстанавливаются принятые по умолчанию значения параметров \hangindent и \hangafter. Отметим еще, что не следует менять эти параметры внутри LaTeX'овских окружений наподобие itemize или quote: в таких окружениях LaTeX устанавливает эти параметры самостоятельно, и их ручная переустановка может привести к непредсказуемым результатам.
Начало этого причудливого абзаца выглядело в исходном тексте так:
\parshape=14 0cm 6cm .1cm 5.8cm .17cm 5.66cm .5cm 5cm .9cm 4.2cm 1.05cm 3.9cm 1.1cm 3.8cm 1.1cm 3.8cm 1.05cm 3.9cm .9cm 4.2cm .5cm 5cm .17cm 5.66cm .1cm 5.8cm 0cm 6cm \noindent \small Если вам не хватает возможностей... Смысл этого текста следующий. Число , следующее непосредственно после \parshape и знака равенства, задает количество строк, имеющих нестандартные длину и/или отступ от левого поля. После этого числа, через пробел (конец строки, как мы помним, — тоже пробел), перечислены отступы от левого поля и длины строк: 0cm - отступ первой строки от левого поля, 6cm - ее длина, 0.1cm - отступ второй строки от левого поля, 5.8cm - ее длина, и т.д. Если написано, что \parshape равно , то после этого должно следовать длин. Если реально в абзаце получится менее строк, то указания на длину и отступ отсутствующих строк будут проигнорированы TeX'ом; если строк получается больше, чем , то все последующие строки будут иметь те же отступ и длину, что заданы для строки номер . Заметим, наконец, что абзац мы начали командой \noindent, чтобы отступ самой первой строки был действительно равен нулю (если абзац начинается без \noindent, то в первой строке будет еще присутствовать пробел длиной в \parindent).
После пустой строки или команды \par действие параметров, заданных командой \parshape, прекращается.
У абзаца, форма которого задана с помощью \hangindent или \parshape, длина и отступ строки зависят, как вы могли заметить, от ее номера. Если такой абзац содержит выключную формулу, то TeX считает, что эта формула занимает три строки, причем сама формула расположена в средней из этих трех (реально формула может, разумеется, занимать больше места).
Более тонкая настройка
Режимы, задаваемые командами \sloppy и \fussy, представляют собой две крайности. Здесь мы расскажем вам о более аккуратных способах управления разбиением на строки.
Параметр \hfuzz. Если вы получаете слишком много сообщений о переполнениях, можно попросить TeX вообще не считать слишком длинными те строки, которые выдаются за край не очень сильно. Для этих целей предусмотрен параметр \hfuzz. Например, команда
\hfuzz=2.5ptуказывает, что как overfull будут восприниматься лишь те строки, которые выступают за край более, чем на два с половиной пункта. В обычном режиме значение параметра \hfuzz равно одной десятой пункта.
Если \hfuzz равен примерно
пункта, то получается приемлемый для ординарных изданий результат. Дело в том, что на фоне идеально выровненных абзацев одна выдающаяся на пункта строка смотрится хуже, чем длинный текст, где все абзацы выровнены не идеально, а "с точностью до пункта".Мера разреженности строки. Как вы помните, в сообщении TeX'а о разреженной строке фигурирует такая мера разреженности строки, как "badness". Посмотрите, как выглядят на печати разреженные строки с различными значениями этой меры:
У последней из наших строк значение badness равно 10000. Если растянуть пробелы в строке еще сильнее, то badness уже не увеличится, а останется равной 10000: с точки зрения TeX'а, такие разреженные строки настолько плохи, что нет смысла делать различие между ними.
Для интересующихся объясним подробнее, как вычисляется badness. Как мы уже говорили в разд. "Промежутки между предложениями", промежутки между словами в тексте не фиксированы, а могут растягиваться или сжиматься. Каковы эти пробелы и насколько они могут растягиваться, зависит от шрифта (для примера: у основного шрифта кегля 10 обычный промежуток между словами равен примерно
пункта, а его растяжимость составляет пункта; промежуток же между предложениями в этом шрифте равен пункта и имеет растяжимость в пунктов)6). Когда TeX растягивает строку с целью выравнивания, он находит сумму "пределов растяжимости" всех промежутков — это "предел растяжимости" строки — и вычисляет, насколько требуемая длина строки больше " естественной" (определяемой размерами слов и нерастянутых промежутков между словами)- это "требуемое растяжение" строки.Отношение "требуемого растяжения" к " пределу растяжимости" строки определяет, насколько разреженной получится строка. Традиционно это отношение обозначается буквой . Практически в качестве меры разреженности используется не само число , а число --- это и есть badness. Если даже окажется, что , badness все равно будет считаться равной : строки, для которых отношение больше или равно (примерно при этом значении получается ), рассматриваются TeX'ом как одинаково плохие.
В том счастливом случае, когда требуемая длина строки совпадает с естественной, мера разреженности равна нулю; если мера разреженности не превосходит , то растяжение строки не превосходило предела; на самом деле даже строки, мера разреженности которых не превосходит , выглядят всё еще хорошо, хотя они уже и рассматриваются TeX'ом как слегка разреженные: TeX старается, чтобы такая "слегка разреженная" строка не попалась в абзаце рядом со строкой, в которой промежутки между словами сжимались. Сообщения об underfull'е появляются, когда badness превосходит 1000.
Теперь мы можем объяснить точный смысл параметра \emergencystretch. Если при верстке абзаца не удалось избежать переполнения, то — при условии, что значение \emergencystretch отлично от нуля, — TeX делает еще одну попытку, при которой в процессе перебора вариантов разбиения абзаца на строки (и вычислений соответствующих значений badness) к "пределу растяжимости" каждой из строк прибавляется значение \emergencystretch.
Параметр\tolerance. Теперь в нашем распоряжении есть все необходимые понятия, чтобы объяснить, как TeX выбирает между разреженной строкой и переполнением.
При разбиении абзаца на строки TeX никогда не создает строки, мера разреженности (badness) которых больше, чем значение TeX'овского параметра, называемого \tolerance. При невозможности удовлетворить этому условию создаются строки, выходящие за край: возникает overfull. С другой стороны, если мера разреженности строки не превосходит значения \tolerance, то будет создана именно столь разреженная строка, но не overfull.
В отличие от некоторых других систем компьютерной верстки, TeX никогда не растягивает и не сжимает отдельное слово.
В стандартном режиме значение параметра \tolerance равно . Если установить значение \tolerance равным , т.е. максимально возможному, то может получиться так, что одна из строк абзаца окажется совершенно ужасной: TeX вложит в нее "всю разреженность", чтобы не увеличивать то число, которое TeX минимизирует при переборе различных вариантов разбиения абзаца на строки (грубо говоря, это число тем больше, чем больше разреженных строк). Поэтому разумным решением во многих случаях будет увеличить значение \tolerance, но не до максимума, а до более разумной величины (скажем, 300 или 400). После этого TeX, с одной стороны, получит большую свободу действий, а с другой — не сможет создавать абзацы, в которых все строки, кроме одной, приемлемы, а одна разрежена до безобразия.
В частности, именно так работает команда \sloppy: она устанавливает \tolerance=9999, а не 10000 (так что сколь угодно разреженные строки все-таки не допускаются) и при этом задает значение \emergencystretch , равное 3em (так что при необходимости растянуть строки TeX может равномерно распределить дополнительную растяжимость по всему абзацу).
Увеличить значение \tolerance можно "глобально", во всем документе, дав в преамбуле команду наподобие
\tolerance=400 или же "локально", дав аналогичную команду внутри группы, содержащей данный абзац. В последнем случае не забывайте, что закрывающая группу фигурная скобка должна идти после пустой строки, завершающей абзац (см. выше обсуждение команд \sloppy и \raggedright ).
Как менять длину абзаца. Иногда абзац не помещается на полосу из-за того, что он на строку-другую длиннее, чем нужно, и хочется его укоротить. Команда
looseness=-1 побуждает TeX стараться, чтобы абзац занял на одну строку меньше, чем при оптимальной верстке. Если абзац короткий (скажем, занимает всего две строки), то из этого, конечно, ничего не получится.
Если же абзац достаточно длинный, то у TeX'овского алгоритма обычно хватает гибкости, чтобы достигнуть этой цели.
Можно присвоить параметру \looseness и значение ; в этом случае TeX будет стараться сделать абзац короче на две строки (если не выйдет, то хоть на одну, а если и это не выходит, то оставит все как есть). Можно также присваивать \looseness положительные значения — в этом случае TeX будет стараться делать абзацы, которые содержат больше строк, нежели оптимальные.
По умолчанию значение параметра \looseness равно, естественно, нулю, и по окончании верстки каждого абзаца этот параметр также устанавливается в нуль. Тем самым нет нужды заботиться о том, чтобы значение \looseness менялось внутри группы, и бессмысленно присваивать этому параметру какое-то значение в преамбуле (оно забудется после первого же абзаца текста). Для каждого абзаца, для которого это вообще нужно, значение \looseness надо устанавливать заново.
Борьба с последней строкой.
Нехорошо, когда последняя строка абзаца слишком коротка (например, короче, чем абзацный отступ следующего абзаца). Чтобы бороться с этим, можно использовать те средства, с которыми мы уже знакомы. Если, например, последняя короткая строка представляет собой обрубок слова, завершающего абзац, то можно либо запретить переносы в этом слове, взяв его в \mbox , либо сказать перед этим словом \linebreak, либо, если это слово длинное, указать в нем место для переносов в явном виде (с помощью команды \-\,) только в начале (в надежде, что поджаться на меньшее расстояние TeX'у будет легче). Другой вариант — сказать \looseness=-1 перед пустой строкой, завершающей абзац: если TeX'у удастся сделать абзац на строку короче, то вряд ли завершающая строка разбитого по-новому абзаца будет короткой.
Разумеется, чудес не бывает: эти рецепты могут подействовать, если абзац достаточно длинен, а не состоит из пары строк.
Другой нежелательный эффект возникает, когда длина последней строки абзаца лишь чуть-чуть меньше, чем ширина полосы. В этом случае разумно довести последнюю строку до края.
В этом может помочь еще не рассматривавшийся нами параметр \parfillskip. Именно, скажите (перед завершающей абзац пустой строкой) \parfillskip=0pt, и TeX постарается растянуть последнюю строку (увеличивая промежутки между словами не только в последней строке, но, при необходимости, и в остальных). Если в результате этих действий не случится overfull'а или underfull'а, то все в порядке.
После окончания абзаца прежнее значение параметра \parfillskip не восстанавливается, так что менять его надо внутри группы.
Дополнительные тонкости с переносами. Вы можете влиять на частоту переносов в абзацах с помощью параметра \hyphenpenalty. По умолчанию его значение равно . Если присвоить этому параметру большее значение, то переносов будет меньше. Точнее говоря, если у TeX'а будет возможность выбирать, сделать лишний перенос или же обойтись без него, растянув строку чуть больше,7) то TeX будет склоняться ко второму варианту тем чаще, чем больше значение \hyphenpenalty. Максимально возможное значение параметра \hyphenpenalty равно . Если в момент верстки абзаца это значение именно таково, то переносы в этом абзаце вообще запрещены. Такой режим разумно, например, установить для абзацев, написанных на языке, для которого в вашей реализации TeX'а нет таблицы переносов, чтобы TeX не сделал переносов во французском тексте по английским правилам.
Наряду с параметром \hyphenpenalty (отвечающим как за автоматически вставленные переносы, так и за переносы, возможные места для которых вы отметили с помощью команды \-), есть и параметр \exhyphenpenalty, отвечающий за переносы в словах с дефисом или командой \slash. Напомним, что в таких словах автоматический перенос возможен только в том месте, где дефис (или \slash) делит слово на части. Так вот, чем больше значение \exhyphenpenalty, тем с меньшей охотой TeX будет делать переносы в этих местах. Если же значение \exhyphenpenalty равно , то такие переносы будут и вовсе запрещены.
Значение двух описанных выше параметров используется TeX'ом в тот момент, когда он видит пустую строку, завершающую абзац.
Соответственно, если вы присваиваете этим параметрам новые значения внутри группы, то группа не должна завершаться до этой пустой строки. Учтите также, что если вы увеличиваете значение \hyphenpenalty и тем самым затрудняете TeX'у переносы слов, то вам может понадобиться увеличить и \tolerance или \emergencystretch, чтобы он смог побольше растягивать строки.
Полиграфические правила не допускают, чтобы в абзаце шло подряд много (скажем, более трех) строк с переносами. Бороться с таким недостатком помогает параметр \doublehyphendemerits: чем его значение больше, тем менее выгодны для TeX'а будут такие последовательности строк, и тем более настойчиво он будет их избегать при переборе вариантов разбиения абзаца на строки. По умолчанию значение этого параметра равно 10000; если переносы идут подряд, можно увеличить значение этого параметра, скажем, до миллиона (такое большое число выбрано не случайно: чтобы этот параметр оказал действие, его значение должно быть того же порядка, что и квадрат встречающихся при переборе возможных разбиений значений badness); если вы делаете это увеличение не в преамбуле документа, а в группе, то, как водится, нужно, чтобы эта группа содержала и пустую строку, завершающую абзац.
Есть также аналогичный параметр \finalhyphendemerits: чем больше его значение, тем с меньшей охотой TeX будет делать перенос в предпоследней строке абзаца. Значение этого параметра по умолчанию равно 5000.
Наконец, вот заключительная хитрость. Если вы присвоите значение параметру \uchyph, написав
\uchyph=0 то TeX никогда не будет делать переносов в словах, начинающихся с прописной буквы. Такой режим полезен, например, в том случае, если вы не хотите делать переносы в именах собственных. Чтобы снова разрешить TeX'у переносить слова, начинающиеся с прописной буквы, присвойте параметру \uchyph значение .
Борьба с переносами
Вероятно, читатель был шокирован тем, что в нашем примере с overfull'ом TeX не смог найти, где сделать перенос в слове " если". Дело, в частности, в том, что обычно TeX не делает переносов, при которых от слова отрываются две последние буквы. Это соответствует нормам английской орфографии, но для русского языка такое ограничение неуместно. Поэтому при работе с русскими текстами можно (и нужно) установить такой режим, в котором перенос двух последних букв допустим. Устанавливается этот режим с помощью изменения параметра \righthyphenmin. Значение этого параметра — целое число, равное наименьшему количеству букв в слове, которые можно переносить на следующую строку. Стало быть, если написать в файле
\righthyphenmin=2то при обработке всех абзацев, кончающихся после этой команды, переносы с отрывом двух последних букв будут разрешены. Если вам встретится абзац английского текста, то перед завершающей его пустой строкой дайте команду
\righthyphenmin=3дабы не сделать неверных переносов в английских словах3)
Общее облегчение режима переносов с помощью \righthyphenmin может, тем не менее, не помочь преодолеть встретившийся вам overfull: не исключено, что TeX действительно не знает, как перенести какое-то слово. Таких слов не очень много, но они встречаются. Кроме того, TeX не делает автоматических переносов в словах, содержащих диакритические знаки (например, если в слове указано ударение или если буква ё задана в тексте как \"е)4), а также в словах, в которых присутствуют наряду с буквами цифры, знаки препинания (не в конце слова) и т.п. Далее, если в слове присутствует дефис, то TeX сможет сделать в нем перенос только на месте этого дефиса, но так, что "{генерал-" останется в конце строки, а "губернатор" начнет следующую строку). Что делать в таких случаях, когда автоматически вставляемых TeX'ом переносов не хватает?
Совет номер один — попробуйте немного отредактировать абзац. Обычно после небольших изменений в абзаце неприятности с переносами исчезают; качество текста при этом тоже зачастую улучшается (с точки зрения языка, а не TeX'а).
Пусть, однако, улучшать изложение дальше некуда, а абзац все равно получается неудачный. Что еще можно сделать, чтобы избавиться от переполнения?
Если TeX не может перенести слово, перенос которого по правилам русского языка возможен, то есть два способа указать TeX'у на это обстоятельство.
Во-первых, существует "одноразовый" способ указать TeX'у места переносов в слове. Это делается с помощью команды \- таким, например, образом:
тво\-р\'ог Команда \- означает, что данное слово можно переносить в тех и только тех местах, где стоят знаки \- (хотя бы и вопреки тому, что диктует TeX'овский алгоритм переноса). Она годится для любых слов (с диакритическими знаками, цифрами и т.д.). Однако при этом TeX не запоминает, какие слова и в каких местах позволила ему перенести команда \-. Если, например, то же слово "творог" встретится в тексте еще раз, места переносов придется указывать заново.
Во-вторых, если слово-исключение встречается в тексте неоднократно, имеет смысл указать это TeX'у "раз и навсегда" (в пределах данного документа). Для этого предназначена команда \hyphenation. В качестве ее аргумента указываются слово или слова, в которых дефисами обозначены разрешенные места переносов. Например:
hyphenation{вклю-чен об-ласть}" Теперь слова "включен" и "область" всегда будут переноситься так, как было указано (хотя бы и вопреки тому, что диктует алгоритм переноса). Если в слове, указанном в качестве аргумента команды \hyphenation, дефисов не поставить, то это будет означать, что переносить его вообще нельзя. Разумное место для команды \hyphenation — преамбула документа.
Слова, указанные в аргументе команды \hyphenation, должны быть разделены пробелами (конец строки — тоже пробел, так что слова можно располагать и в нескольких строках). Пустой строки в аргументе \hyphenation быть не должно. В качестве аргумента команды \hyphenation нельзя указывать слова с диакритическими знаками или небуквенными символами.
Слова в исходном тексте, в которые вставлены \-, будут переноситься именно там, где указано этими командами, невзирая на то, что говорит команда \hyphenation.
Иногда в тексте встречаются пары слов, объединенные знаком /,. По общим TeX'овским правилам такое "слово" перенесено быть не может. Если вместо символа / использовать команду \slash, то станет возможен перенос, при котором на одной строке останется первое слово и символ /, а на второй строке — второе слово:
| Перенаправление ввода\slash вывода — одна из характерных черт систем типа UNIX\slash Linux. |
Буквальное воспроизведение(verbatim, verb)
Окружение verbatim предназначено для буквального воспроизведения имеющихся в файле символов (шрифтом типа пишушей машинки). Одной только команды \ttfamily для этого недостаточно, поскольку воспроизводимый текст может содержать, например, команды TeX'а, и необходимо, чтобы они печатались, а не исполнялись.
Между \begin{verbatim} и \end{verbatim} могут идти любые символы (в том числе символ "\" и непарные фигурные скобки), за исключением последовательности символов \end{verbatim}. После этого надо написать \end{verbatim} в отдельной строке, ничего, кроме этого текста, не содержащей (для всех прочих LaTeX'овских окружений это не обязательно). При этом между "\end" и "{verbatim}" не должно быть пробела (также вопреки общим правилам: обычно такой пробел, как и вообще пробел после имени команды, состоящего из букв, ни на что не влияет).
Короткие последовательности символов удобно набирать для буквального воспроизведения с помощью команды \verb. Непосредственно после \verb должен стоять любой символ, не являющийся буквой или звездочкой, далее — воспроизводимый текст (укладывающийся в одну строку), не содержащий того символа, который стоял непосредственно после \verb, а затем — снова тот символ, что стоял непосредственно после \verb. После \verb не должно быть пробела. Пример:
Команда \verb"\dots" задает многоточие. Знак~\verb|"| в TeX'е используется редко. |
Описанные окружение и команда удобны, когда надо имитировать машинописный текст, текст на мониторе компьютера, или набирать тексты компьютерных программ. В данном руководстве \verb и verbatim широко использовались для набора LaTeX'овских и TeX'овских команд.
У команды \verb и окружения verbatim есть варианты "со звездочкой". От своих вариантов без звездочки они отличаются тем, что пробел изображается знаком
.Команду \verb и окружение verbatim нельзя использовать в сносках; если вам необходимо напечатать в сноске что-нибудь вроде \sqrt, то придется делать это вручную, с помощью команды \symbol: \texttt{\symbol{`\\}sqrt} или \texttt{\symbol{"5C}sqrt}.
Если вы забудете "закрывающий символ" в команде \verb или сделаете опечатку в тексте \end{verbatim}, то в лучшем случае получите уйму сообщений об ошибке, а в худшем — завесите компьютер.
Если вы воспроизводите в режиме verbatim текст, простирающийся на многие страницы (например, компьютерную программу), то TeX'у может не хватить памяти. Чтобы избежать такой неприятности, надо или распределить воспроизводимый текст по нескольким окружениям verbatim, или подключить стилевой пакет verbatim, после чего можно будет спокойно задавать сколь угодно длинные окружения verbatim и verbatim* (только не забудьте про \end{verbatim} в конце). Кроме того, при подключении этого пакета становится доступной команда \verbatiminput, позволяющая дословно воспроизвести содержимое произвольного текстового файла: именно, если вы напишете '\verbatiminput{something.txt}', то это будет равносильно тому, как если бы вы написали
\begin{verbatim} (содержимое файла something.txt) \end {verbatim}
Центрирование, выравнивание текста по краю
Для этих целей используются окружения center (для центрирования), а также flushleft и flushright (для выравнивания по левому и правому краю соответственно).
Внутри каждого из этих окружений можно в принципе набирать и самый обычный текст, стандартным образом разбитый на абзацы с помощью пустых строк, но при этом каждая строка получающегося "абзаца" будет центрирована (для окружения center) или выровнена по левому/правому краю (для окружений flushleft и flushright соответственно).
Окружение flushleft по своему действию практически эквивалентно команде \raggedright; но вообще, конечно, все перечисленные окружения нужны не для создания абзацев столь странного вида, а для организации текста в виде последовательности строк, каждая из которых центрирована или сдвинута влево или вправо; для этого достаточно после каждой строки, которую вы хотите центрировать (или сдвинуть к краю), поставить команду \\ ; следующая строка будет принадлежать тому же абзацу, и, стало быть, опять же будет центрирована (сдвинута). А если вы не будете делать разбиения на строки командой \\, то это будет сделано автоматически, с появлением несколько странных абзацев (на стр.25 приведен пример того, что может в этом случае получиться). Примеры:
\begin{flushleft} левый\\марш \end{flushleft} | |
\begin{flushright} наше дело\\ правое | |
\begin{center} а вот мы позиционируемся\\ в центристской части\\ политического спектра \end{center} |
Как и в случае с quote и quotation, если после команды \end, закрывающей любое из этих окружений, в исходном тексте идет пустая строка, то следующий абзац набирается LaTeX'ом с обычным абзацным отступом, в противном случае — без отступа.
Цитаты
Если вам нужно включить в текст цитату, пример, предупреждение и т.п., то удобно воспользоваться окружением quote. Это окружение набирает текст, отодвинутый от краев (полиграфист сказал бы: "втянутый". Пример:
Каждый сознательный гражданин должен понимать, что \begin{quote} весьма небезопасно содержать экзотических животных в городской квартире. \end{quote} Поэтому подумайте, прежде чем покупать на рынке крокодила. |
Как вы можете заметить из этого примера, текст, оформленный окружением quote, не имеет абзацного отступа и отделяется от окружающего текста вертикальными промежутками. Если после \end{quote} дальнейший текст следует без пропуска строки, то на печати он начнется с новой строки, но без абзацного отступа (после включения цитаты продолжается прерванный абзац); если после \end{quote} пропустить строку, то после цитаты текст будет идти с абзацным отступом (если, разумеется, значение параметра \parindent не равно нулю).
Для длинных цитат, состоящих из нескольких абзацев, можно использовать окружение quotation. Оно полностью аналогично quote, за тем исключением, что в тексте, оформленном этим окружением, делается абзацный отступ.
Дефисы, минусы и тире
При печати на пишущей машинке эти знаки по внешнему виду не различаются. В издательских системах, основанных на TeX'е, различают дефис - (по-английски hyphen), (en-dash), длинное тире — (em-dash) и знак минуса - (обратите внимание, что он отличается от обоих тире).
Чтобы получить на печати дефис, короткое тире или длинное тире, надо в исходном тексте набрать один, два или три знака "-" соответственно. В русских текстах часто используют длинное тире в качестве тире как такового, а короткое тире — в сочетаниях типа "я вернусь через 2-3 часа" (в исходном тексте это выглядит как "через 2-3 часа"; обратите внимание на отсутствие пробелов вокруг тире). Длинное тире в русском тексте обычно окружают (следуя традиции) пробелами; в английском обычно пробелов не делают. См. также разд. "Экзотика" ниже по поводу альтернативы длинному тире.
Знак минуса, в отличие от короткого тире, встречается только в математических формулах, и там он, как вы помните, изображается просто знаком "-" (см. разд. "Многоточие").
Любознательный читатель может спросить, как получается, что запись жж в исходном тексте дает на печати всего-навсего две буквы "ж", а запись -- дает тире, которое шире, чем два дефиса. Ответ: TeX'овские шрифты так устроены, что некоторые последовательности подряд идущих символов заменяются на печати на новый знак
Другой пример лигатур — это то, как выглядит в основных шрифтах сочетание букв
: не так, как поставленные рядом и ().Близкое к этому явление — так называемый кернинг, когда некоторые пары букв, стоящие рядом, на печати автоматически сближаются: сравните
(полученное на печати естественным образом) и (набранное со специальной командой, убирающей кернинг).Диакритические знаки и прочее
Во многих языках используются буквы с дополнительными значками, размещающимися над или под буквой (они называются диакритическими знаками). Кроме того, в ряде языков, использующих латинский алфавит, есть специальные дополнительные буквы. В TeX'е имеются команды для набора таких букв из почти всех европейских языков. Команды для получения диакритических знаков собраны в нижеследующей таблице, где знаки проставлены, для примера, при букве e.
В следующей таблице вы найдете команды для набора букв специального вида, а также перевернутых вопросительного и восклицательного знаков (последние используются в испанском языке).
Обратите внимание на команды \i и \j в этой таблице: они нужны для того, чтобы ставить диакритические знаки над буквами i и j. Если просто сказать, допустим, \=i, то получится \=i, а это не то, что требуется. Правильно писать \=\i. Вот несколько примеров.
Ch\'erie, \c{c}a ne me pla\^\i t pas! G\"otterd\"ammerung !`Besa me mucho! |
Для набора обычных русских текстов из всего этого великолепия нужны только две команды: \' (чтобы ставить ударения) и \" (для буквы ё, если в вашей русификации LaTeX'а для нее не отведено особого символа).
Команды \c, \' и т.д. имеют один обязательный аргумент — букву, над (или под) которой надо ставить диакритический знак. Читатель может заметить противоречие со сказанным на : ведь обязательный аргумент должен быть заключен в фигурные скобки, а в нашей таблице в записях вроде \`e или \"e: фигурных скобок нет. На самом деле противоречия нет, просто ранее было сказано не все: если у LaTeX'овской команды предусмотрен один обязательный аргумент и в исходном тексте после имени команды непосредственно следует буква, то в качестве аргумента будет воспринята именно эта буква . Так что можно, в принципе, не ставить букву в фигурные скобки и при командах наподобие \c или \u (но психологически приятнее, когда слово, которое на печати выйдет без пробелов, не будет содержать пробелов и в исходном тексте):
La fa\c{c}ade est la fa\c cade. |
Команды из второй таблицы аргументов не требуют; что же касается значков !` и ?`, то это вообще не команды, а лигатуры .
Над буквами в математических формулах также приходится ставить надстрочные знаки, но описанные в настоящем разделе команды для этого непригодны; команды, делающие это в формулах, описаны в разд. .
В заключение нашего обсуждения диакритических знаков отметим вот что. Хотя описанные в этом разделе команды дают возможность набирать все знаки алфавита почти любого европейского языка, это еще не значит, что вы так просто сможете набирать длинные тексты на этих языках. Дело в том, что при отсутствии ориентированной на соответствующий язык таблицы переносов TeX будет, скорее всего, переносить слова в этих текстах неправильно (а слова с диакритическими знаками перенести вообще не сможет — см. разд."Параграф"). Таблица переносов для русского языка в любой русификации LaTeX'а имеется, а для английского языка такая таблица присутствует в TeX'е изначально. Если же вам придется набирать хотя бы абзац текста на каком-то другом языке, а соответствующей таблицы переносов у вас нет, то лучше переключиться на режим, в котором переносы вообще запрещены (как это сделать, будет рассказано в разд. "Параграф" этой лекции). Можно также попробовать воспользоваться стилевым пакетом babel, помогающим набирать тексты с правильными переносами на разных языках. См. приложение E.
Интерлиньяж
В полиграфии этим красивым словом называется интервал между строками. Команды наподобие \small, устанавливающие размер шрифта, автоматически устанавливают и размер интервала между строками, так что вручную менять его не следует (потому мы и не рассказываем, как это делать; любопытствующий читатель может узнать некоторые подробности в приложении Е и все подробности в книге [2]). Можно, однако (и иногда это бывает необходимо), пропорционально увеличить или уменьшить все интервалы между строками — например, чтобы подогнать число полос в документе к требуемому. Если, скажем, вы хотите увеличить интервалы между строками на 1%, т. е. в
раза, то в преамбуле следует написать так: \renewcommand{\baselinestretch}{1.01}Если нужно пропорционально увеличить или уменьшить интерлиньяж в каком-то фрагменте текста, то можно написать так:
{% Открывающая фигурная скобка небходима \renewcommand{\baselinestretch}{1.01} \selectfont Текст, в котором надо изменить интерлиньяж... .... Конец этого текста }% Закрывающая скобка, парная к открывающей(если опять надо увеличить на 1%; в других случаях — соответственно). Не забудьте, что закрывающая фигурная скобка должна стоять после пустой строки, завершающей последний абзац, иначе ничего не выйдет .
Почему этот прием работает и каков смысл команды \selectfont, объясняется в приложении В.
Между абзацами можно организовать дополнительные вертикальные интервалы. Именно, в TeX'е есть параметр \parskip со значением длины; если присвоить ему ненулевое значение, например, написав
\parskip=3mmто между абзацами будет делаться отступ в 3mm (в дополнение к обычному межстрочному интервалу). Без особой необходимости не следует присваивать параметру \parskip новое значение, поскольку оно вполне разумно устанавливается в стандартных LaTeX'овских классах.
На самом деле в стандартных классах \parskip является растяжимой длиной . Именно, естественный размер \parskip равен нулю, но у него есть еще plus-компонента, равная одному пункту. Стало быть, если вертикальные интервалы на странице не варьируются, то никакого дополнительного интервала между абзацами не делается, но если страницу при верстке приходится растягивать по вертикали, то каждый из интервалов между абзацами может быть растянут. При желании можно изменить как естественный размер, так и растяжимую компоненту параметра \parskip с помощью команды \setlength, о которой пойдет речь в разд. "Параметры со значением длины" лекции 7.
Экзотика
В поставку LaTeX'а входит стилевой пакет textcomp, открывающий доступ к большому числу типографских значков. Если его подключить (для чего надо сказать в преамбуле \usepackage{textcomp}), то становятся доступными следующие символы:
\textquotestraightbase | \textquotestraightdblbase | ||
\texttwelveudash | \textthreequartersemdash | ||
\textleftarrow | \textrightarrow | ||
\textblank | \textquotesingle | ||
\textasteriskcentered | \textdblhyphen | ||
\textfractionsolidus | \textzerooldstyle | ||
\textoneoldstyle | \texttwooldstyle | ||
\textthreeoldstyle | \textfouroldstyle | ||
\textfiveoldstyle | \textsixoldstyle | ||
\textsevenoldstyle | \texteightoldstyle | ||
\textnineoldstyle | \textlangle | ||
\textminus | \textrangle | ||
\textmho | \textbigcircle | ||
\textohm | \textlbrackdbl | ||
\textrbrackdbl | \textuparrow | ||
\textdownarrow | \textasciigrave | ||
\textborn | \textmarried | ||
\textdivorced | \textdied | ||
\textleaf | \textmusicalnote | ||
\texttildelow | \textdblhyphenchar | ||
\textasciibreve | \textasciicaron | ||
\textgravedbl | \textacutedbl | ||
\textdagger | \textdaggerdbl | ||
\textperthousand | \textpertenthousand | ||
\textbardbl | \textbullet | ||
\textcelsius | \textcolonmonetary | ||
\textdollar | \textdollaroldstyle | ||
\textcent | \textcentoldstyle | ||
\textflorin | \textwon | ||
\textnaira | \textguarani | ||
\textpeso | \textlira | ||
\textdong | \textbaht | ||
\textsterling | \textyen | ||
\textrecipe | \textinterrobang | ||
\textinterrobangdown | \texttrademark | ||
\textpilcrow | \textnumero | ||
\textdiscount | \textestimated | ||
\textopenbullet | \textservicemark | ||
\textlquill | \textrquill | ||
\textbrokenbar | \textsection | ||
\textasciidieresis | \textcopyright | ||
\textordfeminine | \textcopyleft | ||
\textlnot | \textcircledP | ||
\textregistered | \textdegree | ||
\textpm | \texttwosuperior | ||
\textthreesuperior | \textasciiacute | ||
\textmu | \textparagraph | ||
\textperiodcentered | \textreferencemark | ||
\textonesuperior | \textonehalf | ||
\textthreequarters | \texttimes | ||
\textdiv | \textsurd | ||
\textordmasculine | \textonequarter | ||
\texteuro | \textcurrency | ||
\textasciimacron |
Некоторые символы из этой таблицы нам уже знакомы, и их можно напечатать и без помощи пакета textcomp (например, можно сказать
вместо \textasteriskcentered; если набрать просто *, то звездочка напечатается в верхней части строки, а не в ее середине), но многие другие являются для нас новыми (кстати, команды, включающие в свое имя florin, won и т.п., суть обозначения для различных валют). Хотя в этой таблице и есть символ для " евро" (\texteuro), но его изображение довольно далеко от принятого; соответствующие шрифты и способы их подключения к LaTeX'у есть, но они пока не стандартизированы.Полезно обратить внимание на команду \textthreequartersemdash: тире, задаваемое ей, может оказаться более приемлемым в русских текстах, чем "длинное тире", задаваемое как |---|.
Если какая-то из команд, перечисленных в этой таблице, встречается в вашем тексте часто, разумно определить для нее более короткое обозначение; в начале лекции 7 объясняется, как это сделать.
Кавычки
В отличие от пишущей машинки, книжный набор использует различные знаки для открывающей и закрывающей кавычек (вместо нейтрального знака "). В английских текстах открывающая кавычка изображается во входном тексте двумя подряд идущими обратными апострофами, закрывающая — двумя апострофами.
The "definitions" are translations rather than explanations.Образование знака кавычек из двух апострофов — еще один пример лигатуры.
В русских текстах употребляются кавычки типа «елочки» и „лапки“. В исходном комплекте TeX'овских шрифтов эти символы отсутствовали; при установке системы LaTeX вы должны выяснить, как именно они задаются в полученной вами русификации.
Если в тексте встречаются кавычки внутри кавычек, то, согласно типографским правилам, внутренние кавычки должны отличаться от внешних: в английских текстах снаружи ставятся двойные кавычки, задаваемые как "``" и "''", а внутри одинарные, задаваемые как "`" и "'"; в русских текстах можно, например, снаружи поставить «елочки », а внутри „лапки“. Если при этом наружная и внутренняя кавычка соседствуют, их надлежит разделить дополнительным небольшим пробелом. В LaTeX'е этой цели служит команда \. Пример (в русификации LaTeX'а, использованной при наборе этой книги, «елочки » задаются командами (с именами из русских букв!) \лк и пк, а „лапки“ лап командами \glqq и \grqq:
\лк\,\glqq Карова\grqq{} или \glqq корова\grqq, как правильно?\пк~--- спросил он. |
поставили символ ~ после закрывающих кавычек, чтобы тире заведомо напечаталось на той же строчке, что и предшествующее слово (см. ниже).
Команда \sloppy и параметр \emergencystretch
Существует простой и грубый способ раз и навсегда избавиться от переполнений. Для этого достаточно включить в преамбулу файла команду \sloppy — больше сообщений о слишком длинных строках вы, скорее всего, не увидите. Для черновых распечаток команды \sloppy, помещенной в преамбулу, чаще всего бывает достаточно. При изготовлении оригинал-макета, однако же, доверяться ей полностью было бы рискованно, так как иногда в этом режиме могут появиться недопустимо разреженные строки. Разумнее задать эту команду не в преамбуле, а перед концом того абзаца, в котором произошел overfull (см. ниже по поводу того, как это сделать), и посмотреть, что из этого получится.
Чтобы отменить действие команды \sloppy, надо либо вернуться в обычный режим с помощью команды \fussy, либо давать команду \sloppy внутри группы, с тем, чтобы этот режим кончился по выходе из группы. В любом случае необходимо понимать, на какие участки текста распространяется действие команд типа \sloppy, влияющих на вид абзаца. Правило таково:
режим верстки абзаца определяется в тот момент, когда TeX читает пустую строку, завершающую абзац.В частности, если вы решили дать команду \sloppy внутри группы, то для того чтобы она подействовала на абзац, необходимо, чтобы закрывающая фигурная скобка шла после пустой строки, завершающей абзац. Вот пример того, как надо действовать в таких случаях:
Черепаховый суп — изысканное деликатесное и диетическое блюдо {\sloppy }А вот — типичная ошибка начинающего:
{\sloppy Черепаховый суп — изысканное деликатесное и диетическое блюдо}К моменту, когда TeX увидел пустую строку, группа завершилась, поэтому TeX получил команду " разбить абзац на строки", находясь в стандартном режиме, и вместо желаемых разреженных, но не выходящих за край строк произошло переполнение (в первой строке).
Для более тонкого управления выбором между разреженными строками и overfull'ами используется параметр со значеним длины \emergencystretch. Его точный смысл мы объясним ниже, а для начала скажем, что если установить его значение равным примерно 20-30 пунктам, т.е. написать, например,
\emergencystretch=25pt
то в случае, когда без переполнений сверстать абзац не удается, TeX попробует сделать все строки абзаца более разреженными (тем более разреженными, чем больше величина этого параметра). Точную величину \emergencystretch надо подбирать экспериментально.
Линейки в простейшем виде
Один из часто встречающихся элементов полиграфического оформления — так называемые "линейки". Например, в книге, которую вы читаете, колонтитулы отделены линейкой от основной части страницы. В TeX'е линейкой (rule по-английски) называется любой черный прямоугольник. Для создания линеек в LaTeX'е используется команда \rule. У этой команды два обязательных аргумента: первый задает ширину прямоугольника-линейки, второй — высоту (оба этих размера должны быть заданы в используемых TeX'ом единицах измерения). Линейка, созданная командой \rule, рассматривается TeX'ом так же, как буква.
Если необходимо, чтобы созданный командой \rule прямоугольник был сдвинут по вертикали относительно уровня строки, надо воспользоваться командой \rule с необязательным аргументом. Этот аргумент — расстояние, на которое надо сдвинуть линейку по вертикали, — ставится перед обязательными; если расстояние положительное, то сдвиг идет вверх, если отрицательное, то вниз. Пример:
В этом месте, прямо посреди абзаца, будет линейка \rule{.5em}{15pt}, а после нее продолжится обычный текст. Сравните также \rule{5pt}{5pt} и \rule[-3pt]{5pt}{5pt} |
Между абзацами
В предыдущих разделах мы обсуждали, что происходит с документом "на уровне строки". Теперь изменим масштаб наших рассмотрений: будем смотреть не только на строки и абзацы, но и на то, как они расположены на странице.
Многоточие
На пишущей машинке многоточие — это три точки подряд (каждая из которых имеет стандартную ширину буквы). При наборе это не так: для многоточия есть специальная команда \ldots или \dots.
Вместо ``...'' пишем: Нет, что-то здесь не так \ldots |
(Отметим кстати, что команда \dots может встречаться и в формулах, где она — в зависимости от контекста — может давать многоточие в центре строки, как \cdots, или в низу строки, как \ldots.)
При подключении стилевого пакета amsmath (а это приходится делать очень часто) могут появиться нежелательные пробелы около многоточий, задаваемых команды \dots и \ldots. Случится это или нет, зависит от версии пакета amsmath, но самый простой способ справиться с этой проблемой, если это произошло — употреблять в тексте (но не в формулах!) вместо \dots или \ldots команду \textellipsis, никаких лишних пробелов не создающую.
Набор в две колонки
Если вам необходимо набирать в две колонки весь документ, то это надо сделать, указав в команде \documentclass соответствующую " классовую опцию". Если же в две колонки надо набрать не весь текст, а только его часть, к вашим услугам команда \twocolumn. Действует она так: сначала выполняется команда \clearpage, а затем с новой страницы, созданной этой командой, начинается набор в две колонки.
Если вы хотите, чтобы колонки на печати были разделены вертикальной линейкой, присвойте ненулевое значение параметру под названием \columnseprule (его значение равно ширине линейки). По умолчанию значение этого параметра равно 0pt, так что линейка не печатается; хорошая линейка получается при значении 0.4pt.
К сожалению, на последней странице двухколонного набора высоты колонок не выравниваются; см. ниже по поводу того, что можно с этим сделать.
Иногда бывает необходимо в начале новой страницы поместить один или несколько абзацев текста во всю ширину страницы, а оставшийся текст на этой странице набрать в две колонки. Для этих целей можно использовать команду \twocolumn с необязательным аргументом. Необязательный аргумент (в квадратных скобках, как водится) — это тот текст, который будет напечатан во всю ширину страницы; если он состоит из нескольких абзацев, то абзацы, как обычно, разделяются пустыми строками.
Команда \onecolumn осуществляет переход от двухколонного набора к одноколонному (предварительно она опять-таки выполняет команду \clearpage).
Если вам хочется, чтобы колонки на последней странице были одинаковой высоты, чтобы можно было начинать двухколонный набор не только с новой страницы, а также если вам нужны не две колонки, а три или больше, можно подключить стилевой пакет multicol. В этом случае к вашим услугам окажется окружение multicols.
Единственный обязательный аргумент окружения multicols — целое число, равное числу колонок. Если, скажем, вам нужно, начиная с какого-то места, начать набор в три колонки, скажите
\begin{multicols}{3} Текст \end{multicols}Набор в три колоноки начнется с того места на странице, куда попало \begin{multicols}, колонки на последней странице трехколонного набора будут выровнены по высоте. Присвоив ненулевое значение параметру \columnseprule, можно разделить колонки линейками.
Неразрывный пробел
Иногда необходимо обеспечить, чтобы два соседних слова не попали на разные строки. В этом случае между ними надо вставить " символ неразрывного пробела" "~". Такая необходимость возникает, например, в сочетаниях типа "на с.5": нельзя отрывать номер страницы от сокращения "с.". Вот еще примеры:
Число овец в стаде обозначено буквой~$x$. Да здравствует император Франц-Иосиф~I! Муж и жена~--- одна сатана. С~кем вы, мастера культуры? |
В предпоследнем из этих примеров мы поставили неразрывный пробел, поскольку согласно отечественным полиграфическим правилам строка не должна начинаться с тире, а в последнем — потому что однобуквенное слово, начинающее предложение, не должно стоять последним в строке. Полный список русских однобуквенных слов (который может быть полезен, если вы автоматически расставляете символы ~ после них с помощью текстового редактора) содержится в магическом слове "АВИКОСУЯ".
Невидимые линейки
Высота и/или ширина линейки может быть и нулевой. Линейки нулевой высоты или ширины не печатаются, но тем не менее могут оказать влияние на вид текста. Например, линейка нулевой ширины и ненулевой высоты занимает место по вертикали; если ее высота больше высоты букв в строке, то высота строки, содержащей эту невидимую линейку, увеличится:
Для того, чтобы раздвинуть две строки, можно в одну из них поместить невидимую линейку\rule{0pt}{5mm} нулевой ширины и ненулевой высоты.Один частный случай линейки нулевой ширины настолько важен, что в TeX'е и LaTeX'е для такой линейки предусмотрена специальная команда \strut. Невидимая линейка, создаваемая этой командой, имеет нулевую ширину; высота же ее установлена автором LaTeX'а с таким расчетом, чтобы она была чуть выше максимальной высоты букв текущего шрифта и опускалась ниже уровня строки настолько, насколько могут опускаться буквы текущего шрифта. Например, в прямом светлом шрифте кегля 11 команда \strut создает линейку ширины 0, поднимающуюся над уровнем строки на 9.52pt и опускающуюся ниже уровня строки на 4.08 pt.
Линейки нулевой ширины и ненулевой высоты действуют подобно команде \vspace*. Смысл невидимых линеек в том, что они позволяют создать вертикальные или горизонтальные пробелы в таких ситуациях, когда \vspace или \hspace не помогают. Вот пример ситуации, когда возникает нужда в невидимых линейках. Пусть в нашем тексте мы
Выглядит это не очень удачно: в словах с буквами вроде р, опускающимися ниже строки, линейки, подчеркивающие слово, также опускаются ниже строки, а хотелось бы, чтобы все эти линейки были на одном уровне. Выход из положения такой: добавить ко всем словам по невидимой букве, которая не занимает места по горизонтали, а по вертикали опускается на максимально возможное в текущем шрифте расстояние. В качестве такой буквы как раз и возьмем невидимую линейку, генерируемую командой \strut: \underline{три\strut} \underline{\strut слова} \underline{подряд\strut}Как видите, \strut можно ставить хоть после слова, хоть перед ним (и даже посередине, если вы не запутаетесь с пробелами).
Назначение этой команды в данном случае сводится к тому, чтобы не позволить линейке, подчеркивающей слово, подойти к этому слову слишком близко. Кстати, в переводе с английского слово strut- означает " распорка".
В лекции 2 рассказывалось про команду \mathstrut, выполняющую аналогичные функции в математических формулах.
Другие примеры использования невидимых линеек читатель найдет в лекции 4, посвященной набору таблиц; в лекции 8, посвященной " блокам", мы также встретимся с линейками.
2) Если не предпринимать для этого специальных усилий.
3) Сказанное в этом абзаце относится к вариантам русификации, где русские и английские слова включены в общую таблицу переносов (такова, например, русификация, использованная при подготовке этой книги и описанная в приложении babel. В других случаях могут потребоваться явные команды переключения языков (которые могут также заодно менять \righthyphenmin).
4) Если вы пользуетесь пакетомbabel вместе с так называемыми EC-шрифтами и соответствующими "форматными файлами", то слова с диакритическими знаками иногда могут переноситься.
5) При печати книг оригинал-макет часто уменьшают; в этом случае, естественно, пропорционально изменяются и промежутки. Вот для сравнения промежуток, который в оригинал-макете имел размер в один сантиметр:\vrule\hspace*{1cm}\vrule
6) Кроме того, промежутки могут и сжиматься; пока речь идет только о жидких строках, это несущественно.
7) Не превышая значения \tolerance, разумеется!
8) Вроде этой.
9) Вот эта.
10) Свойства которого мало похожи на свойства настоящего клея. См. лекцию 8
Overfull и underfull
Обычно абзацы делаются выровненными по правому краю; при необходимости промежутки между словами растягиваются или сжимаются, а в словах делаются переносы. При этом и для сжатия, и для растяжения промежутков между словами есть пределы, которые TeX старается не превышать.
Если это удается, то получается аккуратный абзац, но нам сейчас интереснее, что происходит в том случае, когда это не удается.
Прежде всего заметим, что "предел сжимаемости" строки не превышается TeX'ом ни при каких условиях2); что бы ни было, строки не станут более тесными, чем им позволяют параметры шрифта. Поэтому строки, которые не удалось ужать, остаются чересчур длинными (при этом, естественно, они выходят на поля документа). С другой стороны, предел растяжимости, за неимением лучшего, может быть превышен. При этом получается то, что полиграфисты называют жидкими, или разреженными строками:
О каждой из этих двух неприятностей TeX сообщает в процессе трансляции (эти сообщения появляются на экране и, кроме того, записываются в log-файл - специальный файл с тем же именем, что у файла, который обрабатывался системой, и расширением log).
Предположим, вы получили строку, выходящую на поля (в нашем примере она отмечена черным прямоугольником):
При этом выдается на экран и записывается в файл с расширением log сообщение наподобие такого:
Overfull \hbox (3.2673pt too wide) in paragraph at lines 8--13 []\OT1/cmr/m/n/10.95 Еще од-но пра-ви-ло от-но-си-тель-но уве-ли-че-ния про-бе-лов: если []Давайте разберем, что в нем написано. Сначала идет надпись "Overfull\hbox", указывающая, что произошло " переполнение" (overfull) строки. В скобках указано, на какое именно расстояние строка выходит за край: на
пункта. (Напомним, что пункт примерно равен одной трети миллиметра). Далее сказано, что переполнение произошло при верстке абзаца (слова "in paragraph"), а затем указаны номера строк исходного файла, в которых был записан этот абзац.Наконец, в этом сообщении приведен фрагмент неудачной строки вблизи ее конца (конца не в исходном тексте, а на печати){Загадочный набор символов, предшествующий фрагменту строки, характеризует текущий шрифт;}. Обратите внимание, что в некоторые слова вставлены дефисы: они показывают те места, в которых TeX в принципе мог бы сделать переносы. Если вглядеться повнимательнее, то станет ясна и причина катастрофы: в слове "если", которым заканчивается строка, дефиса не стоит вообще; значит, программа не смогла найти подходящего места для переноса и оказалась перед неприятным выбором: либо перенести это "если" целиком на другую строку (что, видимо, вызвало бы проблемы в других местах), либо оставить его на этой строке и создать overfull. Выбрано было второе (ниже мы объясним, как можно в какой-то мере управлять этим выбором).
Сообщения о разреженных строках выглядят так:
Underfull \hbox (badness 1142) in paragraph at lines 885--892 []\OT1/cmr/m/n/10.95 Некоторым со-че-та-ни-ям атри-бу-тов ни-ка-ко-го ре-аль-но-го шриф-та [] Главных элементов в этих сообщениях три:
само слово Underfull, указывающее, что речь идет о разреженной строке;указание на строки исходного текста, в которых находится абзац с разреженной строкой (в нашем случае 885-892);численная характеристика того, насколько разрежена строка (по-английски это число называется badness). В нашем случае это число равно 1142; вскоре мы обсудим, что оно значит.Итак, мы выяснили, какие могут быть неприятности при верстке абзацев и как TeX о них сообщает. Вся оставшаяся часть этого раздела посвящена тому, как с этими неприятностями бороться.
Параграф, копирайт и прочее
Знак параграфа набирается с помощью команды \S, знак
— с помощью команды \copyright; о том, что знаки $ и & набираются с помощью команд \$ и \&, мы уже говорили (см. лекцию 1); знак фунта стерлингов набирается с помощью команды \pounds или ее синонима \textsterling. Чтобы получить на печати знак , можно подключить стилевой пакет textcomp (см. разд."Экзотика" ниже), после чего этот знак можно будет набирать с помощью команды \textnumero. (Заодно подключение этого пакета может несколько улучшить вид знака параграфа.) Кроме того, в тексте можно использовать и любой из великого множества математических символов, если оформить его как математическую формулу:Я $\heartsuit$ TeX. |
Перечни
Для печати перечней используются окружения itemize (для простейших перечней), enumerate (для нумерованных перечней) и description (для перечней, в которых каждый пункт имеет заголовок — например, словарных статей или иных описаний). В любом случае элементы перечня вводятся командой \item (иногда — с необязательным аргументом). Разберем последовательно, как работают указанные окружения.
Простейшие перечни (itemize). Каждый элемент перечня вводится командой \item без аргумента.
На печати каждый элемент перечня снабжается темным кружочком (" горох" на жаргоне полиграфистов).Перечни могут быть вложенными друг в друга: максимальная глубина вложенности равна 4;отступы и символы перед элементами выбираются автоматически. На втором уровне элементы перечня отмечаются полужирными короткими тире, на третьем — звездочками, на четвертом — точками. При попытке вложить пять таких окружений LaTeX выдаст сообщение об ошибке.Вот как выглядел в исходном файле предшествующий текст:
\begin{itemize} \item На печати каждый... \item Перечни могут быть вложенными друг в друга: \begin{itemize} \item максимальная глубина вложенности равна 4 \item тступы и символы перед элементами выбираются автоматически. \end{itemize} \item На втором уровне элементы... \item При попытке вложить... \end{itemize}Внутри окружения itemize до первой команды \item не должно идти никакого текста или же команд, генерирующих текст. Если вы попытаетесь проигнорировать этот запрет, то LaTeX выдаст вам сообщение об ошибке. Другие команды (например, команды смены шрифта) могут идти и до первого \item.
Окружение itemize можно использовать также для создания перечней, в которых каждый элемент имеет короткий заголовок. Для создания такого заголовка надо задать команде \item необязательный аргумент (в квадратных скобках, как водится). При наличии у этой команды необязательного аргумента стандартный значок, отмечающий элемент перечня (" горошина", звездочка и т.п.) не печатается, а вместо него печатается текст, заданный в необязательном аргументе:
\begin{itemize} \itemЭтот элемент перечня помечен стандартно. \item[\sffamily A] Здесь мы сами задали заголовок. \item[999] Здесь тоже. \end{itemize} |
p> Обратите внимание, что заголовки, заданные нами в необязательных аргументах команд \item, печатаются выровненными по правому краю, а также что команды смены шрифта в этих аргументах не распространяются на дальнейший текст.
Если заголовок, заданный вами в необязательном аргументе команды \item, будет слишком длинен, то он заедет на левое поле. В таких случаях лучше пользоваться окружением description, о котором речь пойдет ниже.
Если первый отличный от пробела символ после команды \item является открывающей квадратной скобкой, то LaTeX решит, что эта скобка начинает необязательный аргумент команды \item. Если при этом вы использовали эту скобку просто как типографский знак, то в результате получится сообщение об ошибке. Чтобы избежать такой неприятности, надо в этом случае квадратную скобку "спрятать", заключив ее в фигурные скобки:
\item {[} - редко встречающийся знак... Нумерованные перечни (enumerate). В таких перечнях каждый элемент также вводится командой \item без аргумента, но на печати он будет отмечен не значком, а номером (эти номера создаются LaTeX'ом автоматически; если вы переставите какие-то элементы перечня, что-то добавите или удалите, нумерация автоматически изменится).
В исходном тексте это выглядело так:
\begin{enumerate} \item В окружении \texttt{enumerate}... \item Нумерация производится автоматически. \item Перечни могут быть вложенными друг в друга: \begin{enumerate} \item максимальная глубина вложенности равна 4; \item отступы и обозначения для элементов... \end{enumerate} \item На втором уровне элементы обозначаются... \item При попытке вложить пять таких окружений... \end{enumerate} Внутри окружения enumerate до первой команды \item не должно идти никакого текста или же команд, генерирующих текст.
На номера элементов нумерованного перечня можно организовать автоматические ссылки с помощью команды \ref. Делается это так.
Представим себе, что вам нужно сослаться на какой-то пункт нумерованного перечня (например, чтобы написать "Согласно пункту 3 настоящих Правил ...").
Если вы в ходе работы над текстом переставите какие-то пункты или добавите новые, то номер пункта может измениться. Вместо того чтобы каждый раз отсчитывать, которым по счету идет этот пункт, можно пометить элемент перечня с помощью команды \label . Команду \label лучше ставить сразу после команды \item, вводящей помечаемый элемент перечня. но можно поставить ее и позже — до следующего \item.
Ссылка на метку производится с помощью команды \ref. У нее также один обязательный аргумент — та самая метка, на которую вы хотите сослаться (ссылка на страницу, на которой расположена метка, производится, как обычно, с помощью команды \pageref. Пример:
| \begin{enumerate} \item Переходите улицу только на зеленый свет. \item \label{tram} Стоящий трамвай обходить можно, а автобус — нет. \end {enumerate} Согласно правилу ~\ref{tram}, сформулированному на с.~\pageref{tram}, обходить стоящий автобус нельзя. |
В окружении enumerate команда \item может иметь необязательный аргумент, который работает так же, как в окружении itemize. Если первый отличный от пробела символ после \item является открывающей квадратной скобкой, необходимо взять эту квадратную скобку в фигурные скобки (как и в случае с окружением itemize).
Перечни с заголовками (description). В этих перечнях каждый элемент, как уже было сказано, снабжен заголовком. Поэтому элементы перечня вводятся командой \item с необязательным аргументом (заключенным, стало быть, в квадратные скобки), представляющим собой этот заголовок. Пример:
| Летом можно собирать различные ягоды: \begin{description} \item[черника:] темно-синие, очень вкусные, хороши в свежем виде, варенье тоже получается хорошее; \item[голубика:] синие, более водянистые, чем черника, и не такие вкусные; \item[брусника:] ярко-красные, из них получается очень вкусное варенье. \end{description} |
Если вас не устраивает этот шрифт, можно аргумент команды \item начать с команды переключения шрифта, скажем, \normalfont или \slshape.
Внутри окружения description до первой команды \item не должно идти никакого текста или же команд, генерирующих текст.
Если в заголовке элемента перечня присутствует закрывающая квадратная скобка, то LaTeX решит, что именно на ней заканчивается необязательный аргумент команды \item, в результате чего на печати получится совсем не то, что вы хотели. Чтобы избежать этой неприятности, надо эту квадратную скобку (либо, что еще проще, весь заголовок) заключить дополнительно в фигурные скобки (внутри квадратных).
Другие виды перечней. Если вас не устраивает стандартное оформление перечней (например, вид пометок, которыми отмечаются элементы перечня itemize), его несложно изменить. Как это сделать, будет рассказано в разд."Модификация разделов перечней" лекции 7. Несколько труднее, к сожалению, сделать так, чтобы буквы, которыми нумеруются элементы нумерованного перечня, были русскими, а не латинскими, как в примерах в этой книге (в лекции 9 мы расскажем, как этого добиться). Можно менять оформление перечней и более серьезным образом, создавая перечни иного типа, чем рассмотренные выше. На данный момент наш TeX-нический уровень не столь высок, чтобы можно было освоить эти возможности LaTeX'а, но в лекции 9 будет рассказано и об этом.
Подавление абзацного отступа
Иногда возникает необходимость создать абзац, в котором нет абзацного отступа. Для этой цели удобно воспользоваться командой \noindent. В том абзаце, отступ в котором вы хотите подавить, эта команда должна идти первой (до любого текста):
\noindent В этом абзаце отступа не будет.\par В этом абзаце отступ будет \noindent присутствовать. |
Команда \noindent действует только на тот абзац, который с нее начинается; если ее поместить внутри абзаца, то вообще ничего не произойдет (что и иллюстрирует второй из абзацев в нашем примере). Стало быть, между \noindent и абзацем, к которому она относится, не должно быть пустой строки (иначе получится, что \noindent относится к "пустому абзацу", заканчивающемуся этой пустой строкой).
В большинстве случаев, когда разумно сделать абзац без отступа, LaTeX заботится об этом сам, так что вам не придется пользоваться командой \noindent чересчур часто.
Пользуясь понятием режима, можно сказать так: в вертикальном режиме команда \noindent означает "начать новый абзац без абзацного отступа", а в горизонтальном (и математическом, коль на то пошло) режиме она означает "ничего не делать".
Подчеркивания, рамки
Чтобы подчеркнуть текст, используется команда \underline. У нее один обязательный аргумент — подчеркиваемый текст:
Это слово будет \underline{подчеркнуто}. |
Подчеркнутый текст должен умещаться в одной строке.
Чтобы взять часть текста в рамку, используется команда \fbox:
Два слова будут \fbox{в рамке.} |
Команда \fbox позволяет взять в рамку только фрагмент текста, умещающийся в одну строку. Чтобы взять в рамку фрагмент, состоящий из нескольких строк, надо воспользоваться командами, о которых пойдет речь в лекции 8.
При использовании подчеркивания и рамок могут пригодиться невидимые линейки, описанные в разд. "Линейки".
Подробности о шрифтах
Каждый из доступных в LaTeX'е текстовых шрифтов характеризуется следующими четырьмя атрибутами: семейством (family), насыщенностью (series), начертанием (shape) и размером (size)1) Что такое размер, читатель разберется самостоятельно, а смысл остальных атрибутов следующий:
семейство означает примерно (но не в точности) то же, что отечественный термин "гарнитура"; в стандартной поставке определены семейства rmfamily (шрифты с засечками), sffamily (шрифты без засечек) и ttfamily (шрифты типа "пишущая машинка");насыщенность определяет ширину и жирность шрифта. В стандартной поставке возможны насыщенности средняя (mdseries) и полужирная (bfseries);начертание бывает прямое (upshape), курсивное (itshape), наклонное (slshape) и " капитель"(scshape).Семейство, насыщенность, начертание и размер шрифта могут различным образом сочетаться. Это предложение, например, набрано шрифтом семейства "без засечек" (sffamily), полужирной насыщенности (bfseries), прямого начертания (upshape) и размера \large.
Каждый из шрифтовых атрибутов можно менять независимо от остальных. Разберем, какие команды для этого предусмотрены.
Все команды для изменения размера вам уже известны: это десять команд, от \tiny до \Huge, перечисленных в предыдущем разделе. Каждая из команд для изменения остальных атрибутов существует в LaTeX'е в двух вариантах:
в виде команды без аргументов, меняющей атрибут текущего шрифта вплоть до того момента, пока он не будет изменен другой командой (или пока не закончится группа, если атрибут менялся внутри группы);в виде команды с одним аргументом (помещаемым, как водится, в фигурные скобки), меняющей атрибут шрифта только у своего аргумента (т.е. у текста в фигурных скобках) — некоторые из этих команд (\textit, \upshape и т.д.) уже нам знакомы.Имя команды без аргумента совпадает с английским названием соответствующего атрибута (например, \sffamily или \scshape); имя команды с аргументом состоит из слова \texttt{text}, к которому добавлены две буквы, описывающие атрибут (например, \textsf или \textsc).
Ниже перечислены все команды для смены атрибутов в обоих вариантах.
Обратите внимание, что в трех строках этой таблицы шрифт совпадает с основным шрифтом текста: это строки, в которых стоят команды, устанавливающие семейство "с засечками", среднюю насыщенность или прямое начертание. Поскольку текущий шрифт и так обладает этими атрибутами, от соответствующей команды он не меняется.
Вот пример применения этих команд:
| Сменим сначала \slshape начертание, затем \ttfamily семейство, затем \small размер, затем \bfseries насыщенность, затем \upshape\mdseries \rmfamily\normalsize все вернем на место. |
А вот пример, когда для смены атрибутов шрифта используются команды с аргументом:
| Выберем \textbf{полужирный шрифт в \textit{курсивном} начертании} (временно, конечно же). |
После многочисленных изменений атрибутов шрифта хочется вернуться к обычному шрифту "одним махом", не устанавливая заново все четыре атрибута. Для этих целей предусмотрена команда \normalfont, переключающая шрифт на " нормальный" — основной шрифт документа. Наряду с ней есть, как водится, и команда с одним аргументом \textnormal, печатающая текст, являющийся ее аргументом, основным шрифтом.
В стандартных TeX'овских шрифтах (гарнитура Computer modern и ее русские аналоги) жирный шрифт, задаваемый командами \bfseries, \textbf и т.п., выглядит, по мнению многих, довольно неудачно.
Можно сделать его несколько более приемлемым, если написать в преамбуле такую строку:\renewcommand{bfdefault}{b}.
Если по какой-либо причине вы используете команды изменения атрибутов без аргумента, следует иметь в виду одну тонкость. При соседстве слова, набранного шрифтом с наклоном (курсивным в частности) и слова, набранного прямым шрифтом, последняя буква " наклонного" и первая буква "прямого" слова могут слишком сблизиться, что на печати выглядит некрасиво. Чтобы избежать этого явления, необходимо после последней буквы слова, которое будет набрано наклонным шрифтом, поставить команду \/ ; она создаст после буквы небольшой дополнительный пробел (зависящий от шрифта и от буквы), который скомпенсирует наклон и предотвратит нежелательное сближение со следующей буквой:
| You {\itshape and} I\\ You {\itshape and \/} I |
Если фрагмент текста, имеющий наклон, завершается точкой или запятой, то после них ставить \/ не нужно: требуемый эффект достигается за счет места, занимаемого в тексте этим знаком.
Всё это, повторим, относится лишь к командам изменения атрибутов без аргумента; команды \textit, \textsl и \emph вносят нужную поправку автоматически.
Если команда \/ поставлена между двумя символами, дающими на печати лигатуру, то вместо лигатуры на печати получатся два этих символа по отдельности; если эту команду поставить в слове между двумя символами, между которыми в текущем шрифте предусмотрен кернинг, то кернинг между этими символами будет отключен.
Понятие о режимах TeX'а
Несколько упрощая ситуацию, можно сказать, что в процессе обработки исходного текста TeX в каждый момент находится в одном из трех режимов: горизонтальном, вертикальном или математическом.
В процессе обработки текста (от появления первой же буквы до команды "закончить абзац", например, пустой строки) TeX находится в горизонтальном режиме.Между абзацами, а также в начале работы (например, в процессе обработки преамбулы к LaTeX'овскому файлу) TeX находится в вертикальном режиме.При обработке математических формул TeX находится в математическом режиме.В вертикальном режиме все пробелы и пустые строки игнорируются, так что между пустой строкой, завершающей абзац, и новой порцией собственно текста незачем заботиться о лишних или недостающих пробелах.
В качестве команды "закончить абзац" можно использовать, наряду с известной вам пустой строкой, команду \par:
Это — абзац, который мы не намерены завершать пустой строкой, как раньше.\par А это другой абзац. |
Иногда для ясности, когда в исходном файле присутствует сложная комбинация из TeX'овских команд, имеет смысл обозначить конец абзаца именно таким способом.
Идущие подряд несколько команд \par, команда \par, за или перед которой следует пустая строка, и т.п. — все это равносильно одной пустой строке или одной команде \par (точно так же, как несколько пустых строк равносильны одной); дополнительный промежуток между абзацами вы таким образом не создадите. В разд. "Вертикальные промежутки" рассказывается, как получить на печати дополнительные вертикальные промежутки.
Сказанное в предыдущем абзаце можно с помощью понятия режима сформулировать так: в вертикальном режиме команда \par ничего не делает.
Промежутки между предложениями
В обычном режиме TeX выравнивает справа строки абзаца, при необходимости делая переносы и слегка растягивая или сжимая промежутки между словами. Промежутки между предложениями при этом сами по себе шире и являются более растяжимыми, чем между словами внутри предложения. Посмотрите внимательно на следующий пример (из "Винни-Пуха"; для наглядности все промежутки равномерно растянуты):
North Pole. Discovered by Pooh. Pooh found it.Такая печать соответствует английским типографским правилам, но в русских текстах промежутки между словами и между предложениями отличаться не должны. Чтобы так и было, следует включить в преамбулу команду \frenchspacing.
Если среди русского текста встречается фрагмент, написанный по-английски, то можно командой \nonfrenchspacing восстановить действие английского правила относительно межсловных промежутков. Когда английский текст кончится, надо восстановить действие российского правила командой \frenchspacing (другой вариант: заключить английский фрагмент вместе с командой \nonfrenchspacing в группу — по выходе из группы действие команды \nonfrenchspacing забудется).
Для читателей, которым необходимо набирать английские тексты, объясним более подробно правила расстановки промежутков в тех случаях, когда команда \frenchspacing не дается.
Чтобы отличить промежутки между словами от промежутков между предложениями, TeX применяет следующие правила:
Пробел увеличивается после: точки, вопросительного знака, восклицательного знака (в максимальной степени);двоеточия (несколько меньше);точки с запятой (еще меньше);запятой (совсем чуть-чуть). Если последняя из букв, встретившихся перед одним из упомянутых в пункте 1 знаков препинания, была прописной, то пробел после этого знака препинания не увеличивается.Если после одного из упомянутых в пункте 1 знаков препинания следует закрывающая скобка (круглая или квадратная) или закрывающие кавычки, а затем — пробел, то этот пробел увеличивается.Смысл правила 2 в том, что точка после прописной буквы чаще всего обозначает не конец предложения, а конец чьих-то инициалов.
Как это и бывает обычно с "машинными эвристиками", сформулированные правила иногда приводят к неверным результатам: точка после строчной буквы может встретиться и в середине предложения, например, в сокращении, а точка после прописной буквы может, напротив, попасть в конец предложения. В этих случаях надо следующим образом помочь TeX'у сделать правильные пробелы:
Если точка после строчной буквы не заканчивает предложения, то после нее следует поставить команду \ (backslash с пробелом), генерирующую обычный пробел между словами . Если точка (или любой другой из перечисленных в пункте 1 знаков препинания) после прописной буквы заканчивает предложение, то перед ней следует поставить команду \@ - тогда пробел будет обычным образом увеличен.Вот примеры:
| If $n$ is even (resp.\ odd), then $(-1)^n$ equals one (resp.\ minus one). This research was supported by the NSF\@. The author is grateful to Prof.~Smith. |
Простые средства
Обычно шрифт, отличный от используемого в основной части текста, применяется для выделения каких-то частей этого текста. Например, шрифтом выделяют заголовки разделов; по этому поводу вам беспокоиться незачем, поскольку для таких выделений LaTeX выбирает шрифт автоматически (если, разумеется, вы оформляете разделы текста с помощью команд, описываемых в следующей лекции, а не пытаетесь сделать это вручную).
Но может потребоваться выделить шрифтом не заголовок, который LaTeX делает сам, а какую-то выбранную вами часть текста — скажем, слово, на которое вы хотите обратить внимание читателя. Например, так выделено слово меньше в нашем предупреждении (и в этой фразе). Для этого использована команда \emph, аргументом которой служит выделяемое слово:
Например, так выделено слово \emph{меньше} в...Выделяемое слово набирается курсивом, если текущий шрифт прямой, и прямым шрифтом, если текущий шрифт наклонный. Это полезно, так как в некоторых ситуациях (в заголовках, колонтитулах, в текстах " теорем" и т.п.), LaTeX выбирает шрифт за вас, и потому рекомендуется для выделения текста использовать в первую очередь именно эту команду.
Но можно указать шрифт и явно. Команда \textit набирает свой аргумент курсивом, так что в обычном тексте \textit{слово} неотличимо от \emph{слово}. Команда \textsl набирает свой аргумент наклонным шрифтом (обратите внимание на разницу между этим шрифтом и курсивом); команда \textbf — полужирным шрифтом. Есть еще команда \texttt, которая набирает свой аргумент шрифтом "типа пишушей машинки". В этом шрифте все буквы имеют одинаковую ширину (как часто бывает на экране компьютера), и потому его часто используют для изображения программ, команд и сообщений операционной системы и т.п. В этой книге такой шрифт используется в примерах TeX'овских исходных текстов. Чтобы получить шрифт без засечек, надо воспользоваться командой \textsf. Шрифт "капитель", в котором строчные буквы представляют собой уменьшенные прописные}, можно получить с помощью команды \textsc.
Эти два шрифта обычно используются не для выделений в тексте, а для заголовков, подписей к рисункам и таблицам и др.
Вот, пожалуй, и все употребительные команды переключения шрифтов. Еще есть команда \textup, которая набирает свой аргумент прямым шрифтом (внутри наклонного или курсивного текста); часто ее применяют, чтобы набрать знаки препинания (скобки и др.) прямым шрифтом:
| \textit{Рядом с $f(x)$ \textup{(}значением функции $f$ в точке $x$\textup{)} лучше использовать прямые скобки (а не курсивные)}. |
Когда одно из {\scriptsize слов} набрано шрифтом другого кегля, это выглядит плохо.
Реальный размер шрифтов, задаваемых командами \large, \small и т.п., зависит от класса документа и классовых опций . В стандартных классах с основным шрифтом кегля 12 команды \huge и \Huge задают один и тот же размер (кегль 25).
Обратите внимание, что команды изменения размера текстового шрифта меняют и размер букв в формулах. Меняется и расстояние между строками по вертикали, если только не сделать одной распространенной ошибки. Если вы набрали шрифтом измененного размера (скажем, \small или \footnotesize) целый абзац, то в момент, когда TeX видит пустую строку (или команду \par —, этот шрифт не должен быть еще переключен на обычный, иначе интервалы между строками получатся неправильные. Вот пример того, как надо и как не надо делать:
{\footnotesize Мы закрываем группу и возвращаемся к обычному шрифту только после пустой строки, завершающей абзац. } Вот шрифт обычного размера. | |
{\footnotesize Здесь мы вернулись к обычному шрифту раньше времени, и межстрочные интервалы оказались слишком велики. } Вот шрифт обычного размера. |
Ручное управление разрывами строк
Иногда возникает необходимость повлиять на то, в каком месте TeX начинает новую строку. Для этой цели есть соответствующие команды, с одной из которых мы уже встречались — это "неразрывный пробел", запрещающий разрыв строки между двумя словами.
Иногда надо обеспечить, чтобы в каком-то слове не делалось переносов, причем не вообще никогда (тогда разумно применить команду \hyphenation), а только в данном месте. Можно добиться этого, например, с помощью команды \mbox, написав так:
Параметр \mbox{\textbf{filename}} задает имя файла. |
Команда \mbox имеет один обязательный аргумент: в фигурных скобках может находиться любой текст, укладывающийся в одну строку (в том числе, как вы заметили, с командами переключения шрифта и т.п.); TeX будет рассматривать содержимое \mbox как одну большую букву и тем самым, конечно, не сможет разорвать его между строками.
Вы уже встречались с командой \mbox, если прочли в предыдущей лекции раздел о включении текста в формулы; более подробно мы ее рассмотрим в лекции о "блоках".
Теперь посмотрим, что делать, если вам понадобилось насильно разорвать строку в каком-то месте, не начиная при этом нового абзаца. Для этого есть несколько способов, в зависимости от того, что вы хотите получить. Один из вариантов — воспользоваться командой \\ и получить возможно не доходящую до края, но не растянутую строку:
Эта строка\\ была разорвана. Справа осталось пустое место, но зато строка не разреженная. |
Можно также воспользоваться командой \linebreak; при этом оборванная строка будет выровнена по правому краю, даже если ради этого ее придется растянуть:
Эта строка была\linebreak разорвана. Она выровнена по правому краю, но для этого ее пришлось безбожно растянуть. |
Если строка действительно окажется разреженной, то вы получите сообщение об этом во время трансляции. Если абзац длинный, а команда \linebreak расположена не слишком близко к его началу, то скорее всего разреженных строк не будет.
Команда \\ допускает и необязательный аргумент: если в квадратных скобках указать какое-то расстояние (в TeX'овских единицах длины — то после оборванной строки будет оставлено это расстояние (по вертикали). Пример:
| Разорвем строку\\[5pt] и оставим место. |
\smallskipamount | маленький вертикальный пробел; |
\medskipamount | вертикальный пробел побольше; |
\bigskipamount | еще больше. |
У команды \linebreak с необязательным аргументом} также может присутствовать необязательный аргумент. При этом команда \linebreak[n] указывает, что в данном месте желателен переход на новую строку, причем указывает "силу" этого желания ( должно быть целым числом от 0 до 4). Если , то это полностью равносильно \linebreak без необязательного аргумента, если , то это означает только, что строку в данном месте разрешается разорвать (так что применять эту команду с аргументом 0 между словами обычно бессмысленно); когда возрастает от 1 до 3, команда \linebreak[n] "усиливает давление" на TeX'овский алгоритм верстки абзаца, делая для него разрыв в указанном месте все более выгодным, невзирая на возможное появление разреженных строк.
Есть также команда\nolinebreak, действующая противоположно; она также может принимать необязательный аргумент — целое число от 0 до 4. Будучи заданной с аргументом 4, эта команда запрещает разрыв строки в указанном месте. Когда ее необязательный аргумент возрастает от 1 до 3, TeX начинает рассматривать разрыв строки в указанном месте как все менее желательный, даже невзирая на то, что из-за отказа от этого разрыва могут появиться разреженные строки.Команда \nolinebreak[0] равносильна, как это ни странно, команде \linebreak[0]. Команду \nolinebreak надо давать непосредственно после слова и до пробела, иначе она не сработает.
Для простых приложений, о которых идет речь в этой лекции, команда \nolinebreak, как правило, не нужна: чтобы запретить разрыв, гораздо удобнее "неразрывный пробел". Команда \nolinebreak иногда бывает полезна при разработке собственных макроопределений, о чем сейчас говорить преждевременно.
Смена шрифтов в тексте
В первой лекции мы уже сталкивались с командами, изменяющими текущий шрифт. Сейчас мы рассмотрим их более подробно, но начнем с предупреждения, которое не требуется полиграфистам, но не повредит остальным читателям:
Не увлекайтесь переключением шрифтов! Чем меньше различных видов шрифта использовано в тексте, тем легче его читать и тем красивее он выглядит.Сноски
Чтобы сделать сноску к какому-то месту в тексте, достаточно использовать команду \footnote с одним обязательным аргументом — текстом сноски. В стандартных классах LaTeX'а сноски8) нумеруются подряд на протяжении всей лекции или даже (в классе article) всего документа. В исходном тексте предыдущий фрагмент выглядел так:
сноски\footnote{Вроде этой.} нумеруются ...В разделе, посвященном "счетчикам", мы расскажем о том, какие возможности есть для того, чтобы помечать сноски по-другому.
Если после слова, к которому делается сноска, должен стоять знак препинания, то в исходном тексте его надо поставить после закрывающей фигурной скобки, ограничивающей аргумент команды \footnote.
Текст сноски может состоять из нескольких абзацев; в этом случае они, как обычно, разделяются пустой строкой.
К сожалению, весьма непросто заставить TeX автоматически нумеровать сноски так, чтобы нумерация начиналась заново на каждой странице. В LaTeX'е, в частности, такая возможность не предусмотрена. Если вы готовы пожертвовать автоматической нумерацией сносок, то можно воспользоваться командой \footnote с необязательным аргументом. Этот необязательный аргумент ставится (в квадратных скобках) перед обязательным\footnote[2003]{Вот какой интересный номер!}. Предыдущий фрагмент выглядел в исходном тексте так:
обязательным\footnote[2003]{Вот какой ... }При использовании команды \footnote с необязательным аргументом автоматическая нумерация сносок не сбивается: предыдущая сноска имела номер \arabic{footnote}, затем мы искусственно создали сноску номер 2003, а следующая сноска9) будет иметь номер \arabic{footnote}.
В случае, если вы хотите сделать сноску к тексту, входящему в " блок" (например, в аргумент команды \mbox; в лекции 8 мы расскажем о том, что такое блок в общем случае и какими командами блоки генерируются), команда \footnote непригодна. Вот как надо ставить сноски в этом случае:
Роман \mbox{``Три\footnotemark\ мушкетера''}\footnotetext{А не четыре!} написал Дюма.В этом случае получится нормальная сноска, напоминающая нам, что в названии романа \mbox{``Три\footnotemark\ мушкетера''}\footnotetext{А не четыре!} фигурируют три мушкетера, а не четыре. Если бы мы просто написали \footnote, то увидели бы на печати только номер, но не саму сноску. Обратите также внимание на "backslash с пробелом" после команды \footnotemark: мы его поставили, чтобы между словами " три" и "мушкетера" на печати был пробел.
Если вы к тому же хотите вручную задать номер сноски к тексту, входящему в "блок", то нужно задать этот номер дважды: первый раз в качестве необязательного аргумента команды \footnotemark (обязательных аргументов у этой команды не предусмотрено), а второй раз — в качестве необязательного аргумента команды \footnotetext (необязательный аргумент этой команды должен идти перед обязательным):
Роман \mbox{``Три\footnotemark[99] мушкетера''}\footnotetext[99]{А не четыре!} написал Дюма.Специальные абзацы
В разделе, посвященном абзацам, уже упоминалось о том, как можно печатать текст без выравнивания по правому краю. Сейчас речь пойдет о других подобных случаях, когда требуются абзацы специального вида. Большинство описываемых в этом разделе способов верстки реализовано в виде окружений ; не забывайте, что всякое окружение ограничивает группу, так что если вам нужно будет не только получить текст специального вида, но и сменить шрифт, вы можете дать команду переключения шрифта (наподобие \itshape) внутри окружения и не заботиться специально о восстановлении прежнего шрифта: вместе с окружением кончится и группа, и прежний шрифт восстановится автоматически.
Специальные типографские знаки
Большинство знаков препинания (точка, запятая, двоеточие и т.п.) набираются очевидным образом: точке в исходном тексте, например, соответствует типографская точка на печати. В этом разделе речь пойдет о знаках, требующих специального набора.
"Старые" команды изменения шрифта
Наряду с описанными выше, в LaTeX'е пока сохраняются (для совместимости с LaTeX'ом 2.09) команды переключения шрифта, перечисленные в таблице 3.1 .
\bf | \normalfont\bfseries |
\it | \normalfont\itshape |
\sl | \normalfont\slshape |
\sf | \normalfont\sffamily |
\sc | \normalfont\scshape |
\tt | \normalfont\ttfamily |
\rm | \normalfont\rmfamily |
До некоторых шрифтов с помощью "старых" команд добраться невозможно (поскольку шрифты, получаемые с помощью этих команд, отличаются от "основного" не более чем в одном атрибуте).
Стихи
В принципе стихи можно набирать с помощью окружений flushleft или center, разделяя строки командой \\, а строфы, например, пустой строкой и командой \smallskip. Кроме того, в LaTeX'е для набора стихов предусмотрено специальное окружение verse. Строки в нем разделяются командой \\, а строфы — пустой строкой. При этом строки получаются выровненными по левому краю и отодвинутыми от левой границы текста. Если строка окажется слишком длинной, она будет перенесена на следующую строку (не исключено, что в каких-то словах будет сделан перенос) и сдвинута примерно на 15 пунктов вправо. Пример:
\begin{verse} Здесь любит медведь\\ Иногда посидеть\\ И подумать: ``А чем бы такое заняться?'' \end{verse} |
Создатель LaTeX'а Лесли Лэмпорт предсказывал, что окружение verse будет обругано поэтами.
Наличие или отсутствие абзацного отступа в абзаце после окружения verse определяется по тем же правилам, что для quote и quotation.
TeX'овские команды для генерации линеек
Рассмотренная нами LaTeX'овская команда \rule обладает рядом недостатков. Например, то обстоятельство, что создаваемые с ее помощью линейки воспринимаются TeX'ом как буквы, усложняют печать линейки, простирающейся во всю ширину страницы. Если между абзацами, т. е. в "вертикальном режиме", сказать \rule{10cm}{1pt}, то линейка начнется не с левого края текста, а после абзацного отступа: TeX решит, что с этой "буквы" начинается новый абзац. Кроме того, при печати линеек с помощью команды \rule необходимо заранее знать их длину и ширину, что не всегда удобно (например, если линейка должна идти во всю ширину текста, то надо точно знать, чему эта ширина равна, или, по крайней мере, как она обозначается в TeX'е). Избавиться от этого неудобства можно с помощью TeX'овских команд \hrule и \vrule. Команда \hrule употребляется в "вертикальном режиме" (между абзацами). Она создает линейку высотой 0.4pt и шириной, равной ширине колонки текста. Команда \vrule употребляется в "горизонтальном режиме" (внутри абзацев). Она создает линейку шириной 0.4pt, простирающуюся по высоте до максимальной высоты букв в содержащей ее строке (если в строке присутствуют буквы наподобие "у", опускающиеся ниже уровня строки, то и линейка будет опускаться ниже уровня строки). Пример:
\hrule\smallskip Весь этот текст будет заключен между двумя линейками. Внутри абзаца тоже будет \vrule{} линейка. \Large Если буквы в строках выше, то и линейка \vrule{} будет больше. \smallskip\hruleЕсли вас не устраивает, что генерируемая командой \hrule линейка имеет высоту 0.4pt, то требуемую вам высоту можно указать в явном виде. Например, для задания линейки шириной во всю колонку и высотой 2 пункта надо написать (как водится, между абзацами) так:
\hrule height 2ptОтсутствие символа \ перед \height не является опечаткой height - не команда, а одно из так называемых " ключевых слов" TeX'а, наподобие уже встретившихся нам ранее слов plus и minus). Для явного задания ширины линейки, генерируемой командой \vrule, используется ключевое слово width:
\vrule width 2mmВ принципе можно указывать при команде \hrule не только высоту, но и ширину, а при команде \vrule - не только ширину, но и высоту, но в таком случае обычно проще воспользоваться LaTeX'овской командой \rule.
Если после команды \hrule или \vrule в тексте идет слово, совпадающее с одним из используемых этими командами ключевых слов (то бишь height, width или depth, о котором у нас речи не было), то это слово будет воспринято TeX'ом как ключевое, что приведет к сообщению об ошибке. В русском тексте вероятность такого стечения обстоятельств исчезающе мала, но если вы хотите, чтоб неприятностей не было с гарантией, то после чего-нибудь вроде \hrule height 2mm. пропустите строку (между абзацами это ничего не испортит), а после команды наподобие \vrule width 2mm поставьте еще команду \relax, означающую " ничего не делать".
Управление разрывами страниц
Как вы могли убедиться, TeX предоставляет широкие возможности для управления видом абзаца, местами разрывов строк и т.п. С разрывами страниц все обстоит не столь хорошо. Дело в том, что при верстке абзаца TeX сначала читает его целиком, а затем перебирает различные способы разбиения на строки и выбирает из них оптимальный. При разбиении на страницы такой подход невозможен: если читать сразу весь текст, а затем перебирать различные варианты разбиения его на страницы, то компьютеру не хватит памяти. Поэтому разбиение на страницы в TeX'е — процесс " одноразовый". Обработав очередной абзац, TeX проверяет, набралось ли уже достаточно строк, чтоб заполнить страницу. Если оказывается, что достаточно, он производит разрыв страницы, и при этом выбор обычно невелик (часто бывает возможно сместить место разрыва страницы на строчку - другую за счет того, что некоторые интервалы между строками можно слегка растягивать или сжимать; таковы обычно интервалы между абзацами, между текстом и выключными формулами, но не между строками внутри абзаца). Имея все это в виду, рассмотрим, какие команды предоставляет LaTeX для управления разрывами страниц.
Запрет разрыва страницы. Чтобы запретить разрыв страницы, используется команда \nopagebreak. Если поставить ее после конца абзаца, то разрыв страницы после этого абзаца будет запрещен. Если после конца абзаца присутствуют совместно как команда \nopagebreak, так и команда для дополнительных вертикальных промежутков, то команда \nopagebreak должна идти первой, в противном случае она не подействует.
Команда \nopagebreak может принимать необязательный аргумент — целое число от 0 до 4. Будучи снабжена этим аргументом, она не запрещает разрыв страницы в указанном месте, но делает его менее выгодным с точки зрения TeX'а (тем менее выгодным, чем больше аргумент). Команда \nopagebreak[4] означает полный запрет разрыва, как если бы команда была дана вообще без аргумента. Если аргумент равен 0, это означает только, что в данном месте страницу в принципе можно разорвать.
Принудительный разрыв страницы. Для принудительного разрыва страниц в LaTeX'е существует несколько способов. Первый и самый простой — команда \newpage. Под действием этой команды текущая страница завершается и дополняется снизу пустым пространством, если высота страницы получается меньше, чем надо.
Команда \clearpage также предназначена для принудительного разрыва страницы. Если пользоваться только теми средствами LaTeX'а, которые были описаны до этого момента в нашей книге, то она будет работать в точности так же, как \newpage. В том же случае, если к моменту подачи этой команды остались так называемые "плавающие" иллюстрации или таблицы , то перед выдачей новой страницы они будут, скорее всего, напечатаны.
Команда \cleardoublepage делает то же, что и \clearpage, но при этом в некоторых классах документов (в тех, которые предусматривают разное оформление страниц с четными и нечетными номерами — см. разд."Классы, пакеты и классовые опции" лекции 4 по поводу классовой опции twoside) новая страница обязательно имеет нечетный номер (если необходимо, при этом создается дополнительная пустая страница).
Если поставить подряд две команды \newpage (или \clearpage), то в печатном тексте чистая страница не получится. Чтобы создать чистую страницу, надо LaTeX немного обмануть: между двумя командами для разрыва страницы дать команду \mbox{}.
Наконец, существует команда \pagebreak, формально аналогичная команде \linebreak. Если дать ее без аргументов, то страница в этом месте будет разорвана; при этом не исключено, что будет сделана попытка выровнять ее по высоте с остальными страницами за счет растяжения тех вертикальных интервалов, которые можно растянуть — как правило, это интервалы между абзацами. (Команда \newpage такой попытки не делает.) Если дать команду \pagebreak с необязательным аргументом (целым числом от 0 до 4), то этот аргумент будет выражать степень желательности разрыва страницы в данном месте: если 0, то это всего лишь разрешение разорвать страницу, если 4, то разрыв обязателен, в остальных случаях степень желательности растет с ростом аргумента от 1 до 3.
Каждую из названных команд можно дать не только между абзацами, но и внутри абзаца; при этом разрыв страницы произойдет (или будет запрещен) после той строки, в которую попадает текст, соседствующий с этой командой.
Изменение высоты отдельной страницы. Иногда при окончательной отделке текста бывает необходимо немного увеличить или уменьшить размер отдельно взятой страницы (чтобы, например, втиснуть в нее еще одну строку, которая иначе окажется в одиночестве на следующей полосе). Для этого есть следующее средство: на той странице, размер которой надо увеличить на одну строку, поместить между абзацами команду
\enlargethispage{\baselineskip} Если надо увеличить размер на две строки, а не на одну, напишите в фигурных скобках 2\baselineskip вместо \baselineskip; можно также в аргументе команды \enlargethispage написать \baselineskip, -2\baselineskip, и т. п. В этом случае высота полосы уменьшится на одну, две и т.д. строки.
Добавим несколько TeX'нических подробностей. Во-первых, если текст набирается в две колонки, то команда \enlargethispage действует только на одну из них — на ту, в которую она попала. Во-вторых, при действии команды \enlargethispage увеличенная полоса может наложиться на строку с колонцифрой, если таковая предусмотрена стилем оформления документа. И наконец, в аргументе команды \enlargethispage может стоять не только кратное \baselineskip, но и любая длина, выраженная в TeX'овских единицах (скажем, 5mm).
Подробности о параметре \baselineskip и колонцифре — в следующей лекции. О двухколонном наборе будет рассказано в разд. "Набор в две колонки".
Висячие строки. Вообще говоря, не следует допускать, чтобы на страницу попадала только первая или только последняя строка абзаца. В TeX'е предусмотрены два параметра, влияющие на вероятность появления разрывов страницы в этих местах. Именно, параметр \clubpenalty определяет нежелательность разрыва страницы после первой строки абзаца, а \widowpenalty — перед последней. Чем выше значение этих параметров, тем с меньшей охотой TeX будет допускать такие разрывы (если, конечно, есть возможность выбора); значение 10000 означает, что разрыв полностью запрещен.По умолчанию и \clubpenalty, и \widowpenalty равны 150.
Установка промежутков вручную
Как команда "backslash с пробелом" "\ ", так и символ неразрывного пробела "~" генерируют пробел, но делать пробелы вручную с помощью набора чего-нибудь вроде "~~~" или "\ \ \ "неразумно, поскольку эти пробелы, как правило, могут растягиваться или сжиматься ради выравнивания строк, и вы не сможете проконтролировать реальный размер пустого пространства, полученного таким способом.
Чаще всего требуется получить промежуток величиной в один или два em . Для этого служат команды \quad, дающая промежуток в 1em, и \qquad, дающая промежуток в 2em. Команда \enskip дает промежуток, в два раза меньший, чем \quad (в стандартных шрифтах он равен ширине цифры). Про команду \, (" backslash с запятой") уже шла речь в разд." Кавычки".
Если необходимо задать промежуток с указанием конкретной длины, можно воспользоваться командой \hspace {длина}
Если этот промежуток должен сохраняться также и в начале (или конце) строки, используется команда \hspace * вместо \hspace . Указание длины состоит из числа и названия единицы , например,\hspace{1.5cm}
Пользуясь командами типа \quad, не сделайте лишнего пробела (разумеется, кроме того, который ограничивает имя команды, состоящей из букв). Вот примеры того, как надо и как не надо делать:
Здесь\quad 1em промежутка.\\ Здесь\quad{}1em промежутка.\\ Здесь\quad{} 1em плюс еще немного. |
В этом примере используется еще команда \\, начинающая новую строку .
Вертикальные промежутки
Большинство вертикальных промежутков (например, между заголовком раздела и его текстом) LaTeX устанавливает самостоятельно, и вам об этом можно не заботиться. Иногда возникает необходимость сделать дополнительный вертикальный промежуток между абзацами. Как вы помните, как внутри абзацев для задания промежутков вручную разумнее пользоваться не командами, явно задающими размер промежутка, а командами вроде \, или \quad; аналогичным образом, для задания промежутков между абзацами рекомендуются такие команды:
\smallskip задает такой, промежуток;\medskip задает такой, промежуток;\bigskip задает такой, промежуток.Проще всего поставить эти команды непосредственно после пустой строки или команды \par, завершающей абзац:
После этого абзаца мы оставим дополнительный пробел. \par\smallskip А теперь начнем новый абзац. |
Конкретная величина промежутков, задаваемых этими командами, зависит от класса документа. Эти размеры совпадают со значениями параметров \smallskipamount\ldots\bigskipamount, о которых шла речь на с. .
Если вы хотите задать размер вертикального промежутка в явном виде, можно воспользоваться командой \vspace. Подобно команде \hspace, у нее есть один обязательный аргумент — величина промежутка. Например, можно написать
\vspace{2ex}Команду \vspace удобнее всего ставить после конца абзаца (подобно таким командам, как \smallskip).
Можно поставить команду \vspace (или \smallskip и т.п.) не после пустой строки или \par, а непосредственно перед ними, после всего текста абзаца. Если поставить какую-либо из этих команд внутри абзаца, то дополнительный вертикальный пробел получится не между абзацами, а между строками абзаца.
Если дать команду \vspace сразу же после \newpage или \clearpage, то вертикального отступа в начале новой страницы не получится; вертикальный отступ, создаваемый \vspace, пропадет и в том случае, если он оказывается в начале новой страницы, получившейся "естественным образом". Чтобы вертикальный отступ в начале страницы не пропадал, надо воспользоваться вариантом со звездочкой после имени команды: если написать \vspace*{1cm}, то будет создан вертикальный промежуток в 1cm, не пропадающий даже в том случае, если команда дана сразу после \newpage или \clearpage или в этом месте произошел разрыв страницы.
Можно заставить команду \ vspace создать промежуток не фиксированной, а переменной длины. Именно, в самом общем виде эта команда записывается так:
\vspace{x plus y minus z} Здесь , и - длины, выраженные в TeX'овских единицах, а plus и minus — так называемые "ключевые слова" TeX'а (в отличие от команд, перед ними не надо ставить backslash). При этом обозначает "естественную" величину отступа: если при верстке страницы вертикальные интервалы не приходится растягивать или сжимать (например, в случае, когда, мы разрешили TeX'у оставлять внизу страницы пустое место; в дальнейшем мы обсудим, как это делать), то будет сделан пробел размером ровно . При необходимости, однако (например, ради того, чтобы все страницы имели одинаковую высоту), этот интервал можно будет и изменить: указывает степень растяжимости, а — степень сжимаемости интервала. Говоря TeXническим языком, команда \vspace вставляет в страницу "клей"10); расстояния, указанные после plus и minus, называются соответственно plus- и minus-компонентами этого клея. Если plus- или minus-компонента в аргументе команды \vspace не указана, то соответствующий интервал не сможет растягиваться (сжиматься). Большинство вертикальных интервалов, автоматически вставляемых LaTeX'ом, обладают растяжимостью и/или сжимаемостью, что помогает при нахождении оптимальных разрывов страниц.
Один частный случай растяжимых промежутков настолько важен, что в LaTeX'е для него предусмотрена специальная команда. Именно, в аргументе \vspace или \vspace* можно вместо длины, заданной в TeX'овских единицах, написать \fill. Это задает промежуток нулевого размера, но обладающий способностью бесконечно растягиваться. Если, например, написать
\clearpage\vspace*{\fill} \begin{center} Заголовок \end{center} \vspace*{\fill}\clearpage то слово "заголовок" будет расположено точно по центру отдельной страницы, созданной командами \clearpage.
Перед командой \fill в аргументе \vspace или \vspace* можно поставить коэффициент — целое число или десятичную дробь, и тогда растяжимость умножится на этот коэффициент.Например, если написать
\clearpage\vspace*{0.5\fill} \begin{center} Заголовок \end{center} \vspace*{\fill}\clearpage то перед словом "заголовок" будет оставлено ровно в два раза меньше места, чем после него, так как 0.5\fill растяжим в два раза меньше, чем \fill.
Теперь можно признаться, что горизонтальные промежутки, создаваемые командой \hspace, также могут быть растяжимыми; чтобы этого добиться, надо задать в аргументе команды \hspace не только " естественную длину", но еще и plus- и/или minus-компоненту. Например, если сказать
\hspace{1cm plus 2mm minus 1em} то при верстке абзаца соответствующий интервал сможет растягиваться или сжиматься. Можно также, вместо длин с plus- или minus-компонентами, написать \fill (возможно, с коэффициентом). В простых приложениях такие конструкции, как правило, не встречаются. Мы еще будем говорить о них в лекции 8.
Вызов символа по коду
Можно добраться до любого символа в текущем шрифте, если знать код этого символа. Для этих целей предназначена команда \symbol. Ее единственный обязательный аргумент — код символа. Для латинских букв и цифр эти коды совпадают с обычными ASCII-кодами:
Кошка по-английски будет \symbol{99}\symbol{97}\symbol{116}. |
Код символа можно указывать не только в десятичной системе, как в приведенном примере, но и в восьмеричной (тогда перед кодом надо поставить символ "'") или шестнадцатеричной (перед кодом ставится символ |"|, "цифры" от A до F должны быть прописными буквами). Например, записи \symbol{122} , \symbol{'172} и \symbol{"7A} на печати дадут одно и то же: букву "z".
Если вы не знаете ASCII -кода нужного вам символа, можно в аргументе команды \symbol вместо номера поставить символы `\ и требуемый вам символ:
{\ttfamily\symbol{`\\}\symbol{`\s}qrt} |
Мы использовали в этом примере команду \ttfamily, включающую специальное начертание шрифта , чтобы backslash выглядел на печати как \ (в большинстве TeX'овских шрифтов символу с этим кодом на печати соответствует нечто другое, см. таблицу в приложении В).
Заключительные замечания о разрывах страниц и вертикальных интервалах
Мы уже отмечали, что TeX'овские алгоритмы создания страниц не обладают той же гибкостью, что алгоритм разбиения абзаца на строки. Поэтому не надо слишком увлекаться принудительными разрывами и запретами разрывов страниц и командами наподобие \vspace*. Даже такая замечательная программа, как TeX, не сможет удовлетворить логически противоречивым требованиям; если ограничений на разрывы страниц слишком много, то TeX будет вынужден сделать эти разрывы, исходя из формального смысла своих алгоритмов. При этом, скорее всего, на печати вы получите много страниц, разорванных в самых неожиданных и неудачных с точки зрения человека местах, а на экране — много сообщений вроде такого:
Underfull \vbox (badness 10000) has occurred while \output is activeЕсли вы регулярно сталкиваетесь с такими неприятностями, имеет смысл заново продумать принципы организации вашего текста. Избавиться от растянутых по вертикали страниц можно, если дать в преамбуле документа команду \raggedbottom, разрешающую делать страницы неодинаковой высоты (некоторые классы документов дают эту команду автоматически, но если вы ее продублируете, ничего плохого не случится). Действие, противоположное \raggedbottom, вызывается командой \flushbottom.
Наконец, если трудности возникают оттого, что вы часто оставляете в тексте место для рисунка командой \vspace*, то вам стоит воспользоваться "плавающими" иллюстрациями (см. разд. "Плавающие иллюстрации и таблицы" лекция 4).