Автоматическая генерация ссылок
Система LaTeX предоставляет возможность организовать ссылки на отдельные страницы или разделы документа таким образом, чтобы программа сама определяла номера страниц или разделов в этих ссылках. Объясним это на примере.
Представим себе, что вам нужно сослаться на какое-то место в вашем тексте. Проще всего было бы указать страницу, на которой это место находится, написав "... как мы уже отмечали на с. 99" или что-то в этом роде, но как угадать, на какую страницу печатного текста попадет это место? Вместо того, чтобы гадать, можно сделать следующее:
пометить то место, на которое вы хотите сослаться в дальнейшем (или предшествующем) тексте;в том месте текста, где вы хотите поместить ссылку, поставить команду-ссылку на вашу метку.Конкретно это реализуется так. Помечается любое место текста с помощью команды \label. Эта команда имеет один обязательный аргумент (помещаемый, стало быть, в фигурных скобках) - " метку". В качестве метки можно использовать любую последовательность букв и цифр (не содержащую пробелов). Например, эта команда может иметь вид
\label{wash}Ссылка на страницу, на которой расположена метка, производится с помощью команды \pageref. У нее также один обязательный аргумент — та самая метка, на которую вы хотите сослаться. Пример:
Обязательно мойте руки\label{wash} перед едой, чтобы не заболеть. Как известно (см. с.~\pageref{wash}), руки надо мыть. |
Обратите внимание, что мы поставили команду \label. рядом с ключевым словом "руки" без пробела, чтобы гарантировать, что будет помечена именно та страница, на которую попало это слово.
В этом примере мы использовали еще значок "~ " (" неразрывный пробел"), чтобы при печати сокращение " с." попало на ту же строку, что и номер страницы. Подробности см. в разд."Неразрывный пробел" лекции 3.
После того как вы впервые вставите в свой файл команды \label и \pageref, при трансляции вы получите сообщение о том, что ваша ссылка не определена, а на печати или при просмотре увидите на месте своих ссылок вопросительные знаки.
Дело в том, что в этот момент LaTeX еще не знает значения ваших меток: он только записывает информацию о них в специальный файл (с тем же именем, что у обрабатываемого файла, и расширением aux при следующем запуске он прочтет эту информацию и подставит ссылки. Если в промежутке между двумя запусками в файл были внесены изменения, это может привести к сдвигу нумерации страниц. Если такие изменения действительно произошли, LaTeX сообщит вам об этом и попросит запустить программу еще раз, чтобы получить корректные ссылки. (На практике иногда нужно и больше запусков программы LaTeX — если в книге есть оглавление, предметный указатель и др.)
Если вы после двух запусков подряд получите сообщение о неопределенной ссылке, значит, в исходном тексте присутствует ошибка (вероятнее всего, опечатка в аргументе команды\pageref; возможно, вы забыли включить в текст команду \label).
На место, помеченное с помощью команды \label, можно сослаться с помощью команды \ref, а не \pageref — тогда на печати получится не номер страницы, а номер раздела документа, в котором находится метка, или номер рисунка, или номер элемента в нумерованном перечне и т.п. — пометить с возможностью ссылки можно почти любой элемент документа. Об этом мы будем подробно говорить в разд. "Еще о метках и ссылках" лекции 4.
Что нужно LaTeX'у от шрифта?
Допустим, нам понравилась какая-то гарнитура и мы хотим использовать такой (точнее говоря, очень похожий) на нее шрифт в системе LaTeX. Чтоб для этого нужно?
Прежде всего нужно иметь файлы, описывающие формы букв выбранной нами гарнитуры. Проще всего, если эти файлы подготовлены в формате METAFONT (как это сделано Кнутом для шрифтов Computer Modern). Тогда с помощью программы METAFONT из них можно получить tfm-файлы с описанием размеров букв.
Немного сложнее обстоит дело со шрифтами в формате Type 1. Но и для этого формата написаны программы, позволяющие полуавтоматически изготавливать tfm-файлы (основная проблема, требующая ручного вмешательства, — несовпадение кодировок).
После этого можно попросить LaTeX использовать эти файлы вместо обычно используемых им tfm-файлов для шрифтов Computer Modern, и получить dvi-файл. (Подробнее об этом см. ниже). Но чтобы использовать этот файл, dvi-драйвер должен либо иметь pk-файлы с матрицами букв, либо уметь использовать вместо них описания шрифтов в формате Type 1 (и иметь эти описания). Обе возможности встречаются на практике. Например, программа xdvi (показывающая dvi-файлы на экране в X Window System под UNIX) использует pk-шрифты. Эти шрифты программа xdvi получает из шрифтов в формате Type 1 с помощью программы gsftopk. А программа dvips просто вставляет в результирующий PostScript-файл описания соответствующих шрифтов в формате Type 1. (При этом используется механизм "виртуальных шрифтов", но его описывать мы не будем.)
При этом получающийся файл имеет то достоинство, что он не зависит от разрешения: в нем содержатся не матрицы букв того или иного размера (как будет с pk-шрифтами), а векторные описания форм букв. Такие PostScript-файлы лучше выдерживают увеличение.
Для примера посмотрите на надпись "Это строка (string)!" в приложении Б. При изготовлении соответствующего PostScript-файла были использованы pk-шрифты разрешения
dpi. Затем эта надпись была включена в текст с увеличением вдвое, поэтому в итоговом оригинал-макете она соответствовала разрешению dpi и выглядела хуже, чем такая же надпись в разрешении dpi. Такого не случается с векторными шрифтами: сравните с надписью "This is a string", которая использует (предусмотренные стандартом PostScript) векторные шрифты. Впрочем, заметить разницу в плавности линий можно только на хорошем принтере и при внимательном разглядывании.Что такое TeX и LaTeX
Как уже отмечалось в предисловии, TeX (произносится "тех", пишется также "TeX") - это созданная американским математиком и программистом Дональдом Кнутом (Donald E. Knuth)- система для верстки текстов с формулами. Сам по себе TеX представляет собой специализированный язык программирования (Кнут не только придумал язык, но и написал для него транслятор, причем таким образом, что он работает совершенно одинаково на самых разных компьютерах), на котором пишутся издательские системы, используемые на практике. Точнее говоря, каждая издательская система на базе ТеХ-а представляет собой пакет макроопределений (макропакет) этого языка. В частности, LaTeX (произносится "латех" или "лэйтех", пишется также "LaTeX") - это созданная Лесли Лэмпортом (Leslie Lamport) издательская система на базе TeX-а.
Прежде чем углубиться в изучение собственно LaTeX'а, скажем несколько слов о других издательских системах на базе TeX'а. Наряду с LaTeX'ом распространены также макропакеты Plain-TeX и AMS-TeX. Макропакет Plain-TEX был разработан самим Дональдом Кнутом, рассматривавшим его в качестве платформы для построения более сложных систем; на практике он используется и как средство для обмена текстами (текст, подготовленный для Plain TeX'а, сравнительно несложно переделать в исходный текст для того же LaTeX'а). Что касается AMS-TeX'а, то эта издательская система сориентирована на важный, но узкий круг приложений: верстку статей для математических журналов и книг, издаваемых Американским математическим обществом. Соответственно, в AMS-TeX'е предусмотрено большое количество весьма изощренных возможностей для создания сложных математических формул, но при этом нет многих вещей, которые естественно было бы ожидать в издательских системах общего назначения (например, автоматической нумерации частей документа). Современные версии LaTeX'а включают в себя AMS-TeX'овские возможности для набора формул (и используются Американским математическим обществом).
Настоящее издание этой книги посвящено описанию LaTeX'а версии (она называется LaTeX, произносится " два е" или "два эпсилон"). Эта версия, вышедшая в 1994 году, в настоящее время стала стандартной. Ее создатели Йоханнес Браамс (Johannes Braams), Михаэль Гуссенс (Michael Goossens), Алан Джеффри (Alan Jeffrey), Дэвид Карлайл (David Carlisle), Франк Миттельбах (Frank Mittelbach), Крис Роули (Chris Rowley) и Райнер Шепф (Rainer Schopf). Иногда встречаются тексты, набранные в более старой версии LaTeX'а (так называемый LaTeX 2.09, описанный в предыдущих изданиях этой книги). Во многих случаях файл, подготовленный в LaTeX'e 2.09, успешно обрабатывается и с помощью LaTeX'а , хотя абсолютной совместимости "снизу вверх" все же нет.
Добавление одного шрифта
УСТЬ теперь у нас есть tfm- и pk-файлы для какого-то шрифта (и они находятся в тех местах, где TeX их ищет). Как добавить такой шрифт в наш текст? Самый простой и самый грубый способ добавить новый шрифт предоставляет команда \newfont. Ее формат таков: \newfont{команда}{описание_шрифта}
Здесь команда — это придуманная вами команда для переключения на добавляемый вами шрифт. Имя этой команды надо выбирать так же, как первый аргумент команды \newcommand (оно не должно быть занято, не должно начинаться на end} и т.п.). Что же до описания_шрифта, то в простейшем виде это — просто имя tfm-файла, соответствующего данному шрифту.
Вот пример. В свое время Дональд Кнут шутки ради разработал причудливый шрифт, называемый cmff10 (его tfm-файл и mf-файл называются соответственно cmff10.tfm и cmff10.mf, и входят в стандартный комплект). Чтобы пользоваться этим шрифтом в своем тексте, включите в преамбулу строку
\newfont{\weird}{cmff10}и вы сможете писать тексты вроде
The letters look {\weird strange.} |
Команду, определенную с помощью \newfont, можно использовать только так, как в этом примере, а именно, переключаться с ее помощью на новый шрифт внутри группы, и в этом отношении она похожа на команды переключения шрифтов наподобие \itshape или \bfseries. На этом, однако, сходство и кончается: \itshape или \bfseries меняют начертание шрифта, но сохраняют его размер, в то время как команда, определенная с помощью \newfont, всегда выдает шрифт одного размера — того, что записан в tfm-файле, на который вы ссылаетесь в ее втором аргументе. Далее, некоторые LaTeX'овские команды для переключения шрифтов (именно, команды, меняющие размер) не только переключаются на шрифт другого размера, но и меняют интерлиньяж (а также, кстати, размер невидимой линейки, создаваемой командой \strut); команда, определенная с помощью \newfont, никакого влияния ни на интерлиньяж, ни на смысл команды \strut не окажет. Наконец, внутри математической формулы такая команда вообще будет проигнорирована.
Тем не менее, если вы нашли какой-то экзотический символ, который хотите несколько раз использовать, и нашли шрифт, в котором он есть, команда \newfont может быть полезна.
Например, в шрифте wasy10, входящем во многие комплекты TeX'а, в позиции
\newfont{\wasyten}{wasy10} \newcommand{\telephone}{\hbox{\wasyten\symbol{7}}} и использовать команду \telephone для изображения телефона .
Еще одно применение этой команды — масштабирование шрифтов. Чтобы подключить масштабированный шрифт с помощью команды \newfont, надо задать требуемое увеличение или уменьшение во втором аргументе команды \newfont. Оно задается с помощью TeX'овского "ключевого слова" scaled (без backlash'а!), за которым следует коэффициент масштабирования, умноженный на (после умножения коэффициента на должно получиться целое число). Например, для подключения шрифта, увеличенного в два с половиной раза, надо после имени tfm-файла написать scaled 2500, а для шрифта, размеры которого уменьшены на 30%, надо написать scaled 700.
Можно также задавать увеличение не в явном виде, а сообщить TeX'у требуемый "характерный размер" шрифта. Для этого надо во втором аргументе команды \newfont написать после имени tfm-файла масштабируемого шрифта
at размер где размер — требуемый "характерный размер", заданный обычным образом в TeX'овских единицах длины или через TeX'овские параметры длины, а at — еще одно TeX'овское " ключевое слово" (пишущееся без backslasha'а). Если основной шрифт документа имеет кегль , то характерный размер разумно выбирать равным 10pt}, если или , то 11pt или 12pt.
Но, конечно, это зависит от ситуации. Скажем, можно написать
\newfont{\wasytwenty}{wasy10 at 20pt} \newcommand{\bigtelephone}{\hbox{\wasytwenty\symbol{7}}} и получить вдвое больший рисунок телефона:
Еще одно применение масштабирования можно увидеть в начале этого раздела, где с его помощью изготовлен инициал "П". При этом использован такой код:
\newfont{\initial}{zcr17 at 48pt} \newbox{\literaP} \savebox{\literaP}{\hbox{\initial П}} \begin{wrapfigure}{l}{0.75\wd\literaP} \vbox to 0.4\ht\literaP{% \vss \usebox{\literaP}% \vspace*{-0.2\ht\literaP}% }% \end{wrapfigure} УСТЬ теперь...
Достоинства и недостатки
Все издательские системы на базе TeX'а обладают достоинствами, заложенными в самом TeX'е. Для новичка их можно описать одной фразой: напечатанный текст выглядит "совсем как в книге". LaTeX как издательская система предоставляет удобные и гибкие средства достичь этого полиграфического качества. В частности, указав с помощью простых средств логическую структуру текста, автор может не вникать в детали оформления, причем эти детали при необходимости нетрудно изменить (чтобы, скажем, сменить шрифт, которым печатаются заголовки, не надо шарить по всему тексту, а достаточно заменить одну строчку в так называемом " стилевом файле"). Такие вещи, как нумерация разделов, ссылки, оглавление и т.п. получаются почти что "сами собой".
Огромным достоинством систем на базе TeX'а является высокое качество и гибкость верстки абзацев и математических формул (в этом отношении TeX до сих пор не превзойден).
Программа TeX (и все издательские системы на ее базе) неприхотлива к технике (в свое время автор этих строк с успехом работал в TeX'е на компьютерах на базе всеми забытого 80286-процессора, и даже на таком электронном тихоходе, как IBM XT, а уж с современными компьютерами проблем заведомо не возникает).
С другой стороны, TeX'овские файлы (особенно английские — с русскими дело обстоит хуже; см приложение E) обладают высокой степенью переносимости: вы можете подготовить LaTeX'овский исходный текст на своей IBM PC, переслать его (скажем, по электронной почте) в издательство, и надеяться, что там ваш текст будет правильно обработан и на печати получится в точности то же, что получилось у вас при пробной печати на вашем любимом принтере (с той единственной разницей, что фотонаборный автомат даст отпечаток более высокого качества). Благодаря этому обстоятельству TEX стал очень популярен как язык международного обмена статьями по математике и физике.
Есть у TeX'а и недостатки. Тем, кто привык к редакторам наподобие Word'а, может не понравиться, что TeX не является системой типа WYSIWYG: работа с исходным текстом и просмотр того, как текст будет выглядеть на печати, — разные операции. На взгляд автора, благодаря этой особенности время на подготовку текста типографского качества только сокращается, но представления об удобстве у всех разные.
Далее, хотя параметры оформления менять легко, создать принципиально новое оформление (новый "класс документов") — совсем не простое дело.
Переносимость TeX'овских текстов снижается, если в них предусмотрен импорт графических файлов (эта возможность в TeX'е зависит от его реализации). Впрочем, в последнее время в этом отношении наметился определенный прогресс: стандартом de facto в TeX'овском мире становится представление графики в формате PostScript, причем в LaTeX'e появились удобные средства для включения этой графики в текст.
Наконец, как мы отмечали в предисловии, TeX плохо приспособлен для верстки страниц со сложным взаимодействием текста и графики.
Дроби
Дроби, обозначаемые косой чертой (так рекомендуется обозначать дроби во внутритекстовых формулах), набираются непосредственно:
Неравенство $x+1/x\ge 2$ выполнено для всех $x>0$. |
В этом примере мы еще использовали знаки "строгих" неравенств (в TeX'овских формулах они набираются непосредственно, как знаки ">" и "<") и нестрогих неравенств (знак "больше или равно" генерируется командой \ge, "меньше или равно" — командой \le). Если вы употребите символы "<" и ">" в обычном тексте, вне формул, то вместо знаков "меньше" и "больше" увидите небольшой сюрприз.
Наряду со знаками для нестрогих неравенств, TeX предоставляет большое количество специальных символов для математических формул (греческие буквы также рассматриваются как специальные символы). Все эти символы набираются с помощью специальных команд (не требующих параметров). Списки этих команд вы найдете в таблицах в начале следующей лекции.
Если вы используете в формуле десятичные дроби, в которых дробная часть отделена от целой с помощью запятой, то эту запятую следует взять в фигурные скобки (в противном случае после нее будет оставлен небольшой дополнительный пробел, что нежелательно):
\pi\approx 3{,}14 |
Здесь команда \pi порождает греческую букву
, а команда /approx дает знак (" приближенно равно"). Десятичную точку в дробях заключать в скобки не нужно.Дроби, в которых числитель расположен над знаменателем, набираются с помощью команды \frac.Эта команда имеет два обязательных аргумента: первый - числитель, второй - знаменатель.
Пример:
$$ \frac{(a+b)^2}{4}-\frac{(a-b)^2}{4}=ab $$ |
Если числитель и\или знаменатель дроби записываются одной буквой (в том числе греческой) или цифрой, то можно их и не брать в фигурные скобки:
$$ \frac12+\frac x 2= \frac{1+x}2 $$ |
Единицы длины
Многие параметры, используемые TeX'ом, являются размерами (пример тому мы видели в разд. "Параметры"; в табл.1.1 собраны единицы длины (кроме нескольких экзотических), которые можно использовать в TeX'е при задании размеров.
pt | пункт ? 0.35,миллиметра |
pc | пика=12pt |
mm | миллиметр |
cm | сантиметр = 10 mm |
in | дюйм = 25,4 mm |
dd | пункт Дидо ? 1.07pt |
cc | Цицеро = 12 dd |
Замечание для полиграфистов: TeX'овский пункт является единицей измерения, принятой в англо-американской типометрии; он отличается от пункта, принятого в континентальной Европе (в том числе и в России). Единица измерения, называемая в TeX'е пунктом Дидо, соответствует пункту, к которому привыкли отечественные полиграфисты.
Можно задавать размеры с помощью любой из этих единиц; при записи дробного числа можно использовать как десятичную запятую, так и десятичную точку (в таблице мы использовали оба способа); прописные и строчные буквы в обозначениях единиц длины не различаются.
Даже если длина, которую вы указываете TeX'у, равна нулю, все равно необходимо указать при этом нуле какую-нибудь из используемых TeX'ом единиц длины. Например, если написать
\parindent=0то вы получите сообщение об ошибке; вместо "0" надо было бы писать, например, "0pt" или "0in".
Кроме перечисленных, в TeX'е используются еще две " относительные" единицы длины, размер которых зависит от текущего шрифта. Это em приблизительно равная ширине буквы "М" текущего шрифта, и ex приблизительно равная высоте буквы "x" текущего шрифта. Эти единицы удобно использовать в командах, которые должны работать единообразно для шрифтов разных размеров.
Еще о русских шрифтах: подробности для знатоков
Сейчас мы сообщим вам две новости: хорошую и плохую. Хорошая состоит в том, что большая часть из сказанного выше совершенно не нужна для пользования различными шрифтами в LaTeX'е, поскольку разработчики стилевых пакетов о вас позаботились. Скажем, если организаторы конференции просят присылать статьи в гарнитуре Times, достаточно добавить в преамбулу команду
\usepackage{times}После этого все шрифты заменятся на шрифты типа таймс без каких-либо дополнительных усилий с вашей стороны. (Правда, могут появиться новые overfull'ы, так как размеры букв другие). Эта команда не меняет шрифтов, используемых в формулах, и они выглядят не очень хорошо (гарнитура таймс в среднем жирнее обычной Computer Modern). Чтобы изменить и шрифты для формул, скажите
\usepackage{mathptmx}Более подробно смена шрифтов в тексте и формулах обсуждается в книге [6]; учтите только, что соответствующие пакеты часто меняются.
Теперь плохая новость: все перечисленные удобства (возможности легко использовать различные гарнитуры) доступны лишь при использовании латинских шрифтов. Если вы попробуете добавить русские буквы к нашим примерам, то ничего хорошего не получится. Прежде всего это связано с нехваткой свободно распространяемых русских шрифтов различных гарнитур, а также с различиями в кодировках русских символов. Этим бедам и посвящен настоящий раздел, в котором автор попытался кратко изложить известную ему информацию про положение дел с русскими шрифтами. Вряд ли она сильно поможет многим на практике, но если она побудит кого-либо из читателей взяться за дело и исправить положение (хотя бы немного), то автор будет считать свою задачу выполненной. Автор заранее приносит извинения тем (вероятно, многочисленным) коллегам, о работах которых у него нет достаточной информации; вина, разумеется, тут только его.
Для использования разнообразных русских шрифтов в LaTeX'е нужно решить две проблемы: (а) найти сами шрифты и (б) написать файлы для подключения их к LaTeX'у. В этом разделе мы обсудим первую из этих проблем, а второй из них посвятим следующий раздел.
Нас будут интересовать шрифты двух типов: METAFONT-шрифты и PostScript-шрифты. Еще бывают так называемые TrueType шрифты, их подключение к TeX'у в принципе возможно, но менее удобно, и о них мы говорить не будем.
Гарнитуры
Если при чтении книжек вы больше интересовались содержанием, чем оформлением, то могли и не заметить, что они набираются разными шрифтами. Здесь мы имеем в виду не шрифтовые выделения (скажем, жирный — или, как сказали бы полиграфисты, полужирный шрифт), а различные рисунки шрифтов. Полиграфисты называют их гарнитурами. Заглянув в выходные данные книги (особенно изданной несколько десятилетий назад), можно найти там слова " Гарнитура обыкновенная новая" или "Литературная гарнитура". Эти слова означают разные рисунки букв; каждая из гарнитур может включать в себя шрифты различных начертаний (прямые, курсивные, полужирные) и размеров.
Вот несколько образцов различных гарнитур:
Вначале показаны четыре начертания гарнитуры Times1) — прямое светлое, курсивное светлое, прямое полужирное и курсивное полужирное. Аналогичные варианты есть и для других гарнитур нашего примера, но для экономии места они не показаны. Кроме того, не показаны (также входящие в число символов) цифры, знаки препинания и т.п.
Группы
Важным понятием TeX'а является понятие группы. Чтобы понять, что это такое, рассмотрим пример.
При обработке TeX'ом исходного файла набор текста в каждый момент идет каким-то вполне определенным шрифтом (он называется текущим шрифтом). Изначально текущим шрифтом является " обычный" прямой шрифт (по-английски "roman"). Команда\slshape, с которой мы уже столкнулись в разд."Команды и их задание в тексте", переключает текущий шрифт на наклонный, а upshape выполняет обратное переключение. Аналогичным образом команды bfseries и mdseries меняют жирность шрифта4).
Полужирный шрифт начнется с \bfseries этого слова. Снова \mdseries светлый, теперь \slshape наклонный, до нового переключения; вновь \upshape прямой. |
В этом примере можно обойтись и без команд mdseries и upshape (отменяющих действие предыдущих команд). Для этого часть текста, которую вы хотите оформить полужирным или наклонным шрифтом, можно заключить в фигурные скобки, и дать команду bfseries или slshape внутри этих скобок! Тогда сразу же после закрывающей фигурной скобки TeX "забудет" про то, что шрифт переключался, и будет продолжать набор тем шрифтом, который был до скобок:
Полужирным шрифтом набрано только {\bfseries это} слово; после скобок все идет, как прежде. |
Сами по себе фигурные скобки не генерируют никакого текста и не влияют на шрифт; единственное, что они делают — это ограничивают группу внутри файла. Как правило, задаваемые командами TeX'а изменения различных параметров (в нашем случае — текущего шрифта) действуют в пределах той группы, внутри которой была дана соответствующая команда; по окончании группы (после закрывающей фигурной скобки, соответствующей той фигурной скобке, что открывала группу) все эти изменения забываются и восстанавливается тот режим, который был до начала группы. Проиллюстрируем все сказанное следующим примером, в котором используется еще команда itshape (она переключает шрифт на курсивный):
Сначала {переключим шрифт на \itshape курсив; теперь сделаем шрифт еще и {\bfseries полужирным;} посмотрите, как восстановится} шрифт после кон{ца г}руппы. |
p> Как видите, группы могут быть вложены друг в дружку. Обратите внимание, что внутри внешней группы курсив начался не c того места, где была открывающая скобка, а только после команды itshape (именно команда, а не скобка, переключает шрифт). Шутки ради мы создали еще одну группу из двух последних буквы слова конца, первой буквы слова группы и пробела между ними; как и должно быть, на печати это никак не отразилось: ведь внутри скобок мы ничего не делали!
Трюк с постановкой пары скобок "{}" после имени команды, о котором шла речь выше - тоже пример использования групп. В этом случае скобки ограничивают "пустую" группу; ставятся они в качестве не-букв, ограничивающих имя команды и при этом никак не влияющих на печатный текст.
Фигурные скобки в исходном тексте должны быть сбалансированы5): каждой открывающей скобке должна соответствовать закрывающая. Если вы почему-либо не соблюли это условие, при трансляции вы получите сообщение об ошибке.
Некоторые команды, называемые глобальными, сохраняют свое действие и за пределами той группы, где они были употреблены. Всякий раз, когда идет речь о глобальной команде, это будет специально оговариваться.
Имена функций
Функции наподобие
,и т.п., имена которых принято печатать прямым шрифтом, набираются с помощью специальных команд (обычно одноименных с обозначениями соответствующих функций).Как знают некоторые школьники, $\log_{1/16}2=-1/4$, а $\sin(\pi/6)=1/2$. |
Заметьте, что основание логарифма задается как нижний индекс.
Полный список команд, аналогичных \log или \sin, приведен в разд."Операции с пределами и без" лекции 2
В стандартный набор команд TeX'а не входят команды для функций
и (в англоязычных странах эти функции принято обозначать и соответственно). Большой беды тут нет, поскольку эти недостающие команды легко определить самому (см.лекцию 2).Исходный файл
Исходный файл для системы LaTeX представляет собой собственно текст документа вместе со спецсимволами и командами, с помощью которых системе передаются указания касательно размещения текста. Этот файл можно создать любым текстовым редактором, но при этом необходимо, чтобы в итоге получился так называемый "чистый" текстовый файл. Это означает, что текст не должен содержать шрифтовых выделений, разбивки на страницы и т.п.
Исходный текст документа не должен содержать переносов (TeX сделает их сам). Слова отделяются друг от друга пробелами, при этом TEX не различает, сколько именно пробелов вы оставили между словами (чтобы вручную управлять пробелами, есть специальные команды, о которых пойдет речь позже). Конец строки также воспринимается как пробел. Соседние абзацы должны быть отделены друг от друга пустыми строками (опять-таки все равно, сколько именно пустых строк стоит между абзацами, важно, чтоб была хоть одна).
В правой колонке приведен фрагмент исходного текста, а в левой - то, как он будет выглядеть на печати после обработки системой LaTeX.
Слова разделяются пробелами, а абзацы - пустыми строками. Абзацный отступ в исходном тексте оставлять не надо: он получается автоматически. |
Как мог заметить читатель, форматировать исходный текст не обязательно.
Предупреждение: мы используем русские буквы в наших примерах, хотя стандартный LaTeX (без специальной "русификации") их не понимает, и, строго говоря, следовало бы использовать латинские буквы. Подробнее об этом написано в приложении E.
Как изучать курс дальше?
Наш обзор основных понятий завершен, и вы уже можете подготовить с помощью LaTeX'а несложный текст. Дальнейшее чтение, в зависимости от ваших потребностей, можно построить по-разному: несколько последующих лекций почти независимы друг от друга, а внутри каждой из них материал расположен в порядке возрастания трудности.
В лекции 2 подробно рассказано про набор математических формул.
Лекция 3 посвящена набору текста " в малом": в ней рассказывается, в частности, как задавать в тексте шрифты разных начертаний и размеров, как набирать ударения над буквами и специальные типографские значки наподобие знака параграфа, как делать сноски и т.п.
Лекция 4 посвящена оформлению текста " в целом": в ней подробно рассказано про то, какие бывают классы документов и чем они отличаются друг от друга, как устроить разбиение текста на разделы таким образом, чтобы LaTeX автоматически создавал заголовки этих разделов и к тому же автоматически их нумеровал, как оформлять титульный лист, как создать оглавление, и тому подобное.
В лекции 5 описаны так называемые псевдорисунки - примитивные картинки, которые можно создавать, не выходя за рамки LaTeX'а.
В лекции 6 рассказывается о печати таблиц с помощью LaTeX'а.
В лекции 7 объяснено, как можно повысить эффективность своей работы в LaTeX'е, создавая собственные команды. Первые разделы этой лекции можно (а скорее всего, и нужно) читать параллельно с лекцией 2.
Две последние лекции предназначены прежде всего для читателей, интересующихся не только набором, но и версткой. В лекции 8 рассказывается о таких фундаментальных понятиях TeX'а, как "блоки" и "клей"; заключительная лекция 9, предполагающая знание всего предыдущего материала, рассказывает, как изменить стандартный стиль оформления документов, предоставляемый LaTeX'ом, применительно к своим нуждам.
Курс завершается различными приложениями, посвященными более частным вопросам; об их содержании можно узнать из оглавления.
2) Или даже на матричном.
3) В LaTeX 2.09 говорилось \documentstyle вместо \documentclass.
4) Подробнее о переключении шрифтов будет рассказано в разделе лекции 3 "Смена шрифтов в тексте"
5) Это не относится к скобкам, входящим в состав команд \{ и \}.
6) Примечание для полиграфистов: TeX'овский кегль 10 примерно соответствует нашему девятому кеглю
7) На моем домашнем компьютере TeX'овская память иссякла, когда длина абзаца превысила 34 страницы.
Как проходит работа с системой LaTeX
В дальнейшем мы будем отмечать, какие свойства системы специфичны для LaTeX'а, а какие относятся вообще к TeX'у и ко всем издательским системам на его базе, но при первом чтении вы можете об этих тонкостях не задумываться и воспринимать слова TeX и LaTeX как синонимы.
В частности, все, что сказано в этом разделе, применимо не только к LaTeX'у, но и к любому другому макропакету для TeX'а, хотя мы всегда будем говорить "LaTeX".
Для начала автор должен подготовить с помощью любого текстового редактора файл с текстом, оснащенным командами для LaTeX'а. Такие файлы по традиции имеют расширение "tex" (описанию того, что должно быть в таком файле, и посвящена вся эта книга)1). Дальнейшая работа протекает в два этапа. Сначала надо обработать файл с помощью программы-транслятора; в результате получается файл с расширением "dvi" (device independent - не зависящий от устройства).
Теперь полученный файл (его называют еще dvi-файлом) можно с помощью программ, называемых -драйверами, распечатать на лазерном или струйном2). принтере, посмотреть на экране (текст будет в таком же виде, как он появится на печати) и т.д. (для разных устройств есть разные драйверы). Неудовлетворенный результатом, автор вносит изменения в исходный файл — и цикл повторяется.
На самом деле повторений цикла будет больше, так как придется еще исправлять синтаксические ошибки в исходном тексте.
Перед тем, как начать работать в системе LaTeX, вам необходимо уяснить для себя три вопроса:
Что нужно сделать, чтобы оттранслировать исходный текст (т.е. создать из него dvi-файл)?Что нужно сделать, чтобы просмотреть dvi-файл на экране?Что нужно сделать, чтобы напечатать dvi-файл?Кроме того, для создания исходного текста нужно, естественно, уметь обращаться с каким-нибудь текстовым редактором.
Ответы на эти вопросы проще всего получить у знакомых, которые уже пользуются TeX'ом; они же помогут его достать (практически все реализации TeX'а являются свободно распространяемыми) и установить. Некоторые сведения о реализациях TeX'а для систем типа Unix (Linux, FreeBSD и др.) и для DOS/Windows приведены в приложении E.
Команды и их задание в тексте
Задание печатного знака процента с помощью последовательности символов "\%" — пример важнейшего понятия TeX'а, называемого командой. С точки зрения их записи в исходном тексте, команды делятся на два типа. Первый тип — команды, состоящие из знака "\" и одного символа после него, не являющегося буквой. Именно к этому типу относятся команды "\{", "\}",\ldots, "\%", о которых шла речь выше.
Команды второго типа состоят из "\" и последовательности букв, называемой именем команды (имя может состоять и из одной буквы). Например, команды \TeX, \LaTeX и \LaTeXe генерируют эмблемы систем TeX, LaTeX и LaTeX
. В имени команды, а также между "\" и именем, не должно быть пробелов; имя команды нельзя разрывать при переносе на другую строку.В именах команд прописные и строчные буквы различаются. Например, \large, \Large и \LARGE — это три разные команды (как вы в дальнейшем узнаете, они задают различные размеры шрифта).
После команды первого типа (из "\" и не-буквы) пробел в исходном тексте ставится или не ставится в зависимости от того, что вы хотите получить на печати:
В чем разница между \$1 и \$ 1? |
После команды из "\" и букв в исходном тексте обязательно должен стоять либо пробел, либо символ, не являющийся буквой (это необходимо, чтобы TeX смог определить, где кончается имя команды и начинается дальнейший текст). Вот примеры с командой \slshape (она переключает шрифт на наклонный):
\slshape2 turtle doves \slshape and a partridge in a pear tree. |
Если бы мы написали \slshapeand a partridge..., то при трансляции TEX зафиксировал бы ошибку (типичную для начинающих) и выдал сообщение о том, что команда \slshapeand не определена.
С другой стороны, если после команды из "\" и букв в исходном тексте следуют пробелы, то при трансляции они игнорируются. Если необходимо, чтобы TeX все-таки "увидел" пробел после команды в исходном тексте (например, чтобы сгенерированное с помощью команды слово не сливалось с последующим текстом), надо этот пробел специально организовать.
Один из возможных способов — поставить после команды пару из открывающей и закрывающей фигурных скобок "{}" (так что TEX будет знать, что имя команды кончилось), и уже после них сделать пробел, если нужно. Иногда можно также поставить команду \ (backslash с пробелом после него), генерирующую пробел. Вот пример.
| Освоить \LaTeX\ проще, чем \TeX. Человека, который знает систему \TeX{} и любит ее, можно назвать \TeX ником. |
Команды с аргументами
Команды наподобие LaTeX или, скажем, bfseries действуют " сами по себе"; многим командам, однако, необходимо задать аргументы. Первый пример тому дает команда documentclass: слово, указываемое в фигурных скобках, — ее аргумент; если его не указать, то произойдет ошибка. В LaTeX'е аргументы команд бывают обязательные и необязательные. Обязательные аргументы задаются в фигурных скобках если для команды предусмотрено наличие обязательных аргументов, она без них правильно работать не будет. У многих команд предусмотрены также и необязательные аргументы: они влияют на работу команды, коль скоро они указаны, но их отсутствие не ведет к сообщению об ошибке. Необязательные аргументы задаются в квадратных скобках.
В частности, у команды documentclass предусмотрен обязательный аргумент, о котором уже шла речь, и необязательный: в квадратных скобках перед обязательным аргументом можно указать список (через запятую) так называемых классовых опций, т.е. дополнительных особенностей оформления. Например, если мы хотим, чтобы книга набиралась шрифтом кегля 12 вместо кегля 10, принятого по умолчанию6) , и притом в две колонки, мы должны начать файл командой
\documentclass[12pt,twocolumn]{book}
Есть также классовая опция 11pt, означающая, что текст будет набираться кеглем 11. Полный список возможных классовых опций приведен в разд. "Классы, пакеты и классовые опции" лекции 4.
Наряду с классовыми опциями в LaTeX'е используются и так называемые стилевые пакеты. После команды \documentclass, начинающей файл, может следовать команда \usepackage, в аргументе которой стоит (через запятую) список подключаемых этой командой стилевых пакетов. (Можно использовать и несколько команд usepackage.) Например, первые две строки файла могут быть такими:
\documentclass[12pt,twocolumn]{book} \usepackage{amsfonts,longtable}Здесь пакет amsfonts подключается, чтобы использовать в математических формулах дополнительные шрифты, позволяющие напечатать что-нибудь вроде
, а пакет longtable нужен, чтобы иметь возможность набирать таблицы, простирающиеся на несколько страниц. Когда мы говорим: "чтобы воспользоваться этой возможностью, необходимо подключить такие-то стилевые пакеты", мы молчаливо предполагаем, что поставка LaTeX'а, которой вы пользуетесь, все эти пакеты содержит. В приложении Ж мы расскажем о том, откуда их взять.Необязательных аргументов может быть предусмотрено несколько; иногда они должны располагаться до обязательных, иногда после. В любом случае порядок, в котором должны идти аргументы команды, надо строго соблюдать. Между скобками, в которые заключены обязательные аргументы, могут быть пробелы, но не должно быть пустых строк.
Корни
Квадратный корень набирается с помощью команды \sqrt , обязательным аргументом которой является подкоренное выражение; корень произвольной степени набирается с помощью той же команды \sqrt с необязательным аргументом — показателем корня (необязательный аргумент у этой команды ставится перед обязательным). Пример:
По общепринятому соглашению, $\sqrt[3]{x^3}=x$, но $\sqrt{x^2}=|x|$. |
Обратите внимание, что вертикальные черточки, обозначающие знак модуля, набираются непосредственно.
Литература по TeX'у
Каноническое описание языка TEX и макропакета Plain TeX — трудная книга Дональда Кнута [2]. У рядового пользователя LaTeX'а необходимость читать эту книгу обычно не возникает.
Каноническое описание AMS-TeX'а — книга [5], также написанная самим создателем AMS-TEXа Майклом Спиваком (Michael Spivak).
Наконец, каноническое описание LaTeX'а — книга Лесли Лэмпорта[1]. Настоящее пособие в чем-то уже, чем книга[1], а в чем-то — шире: мы не упоминаем о некоторых средствах LaTeX'а, которые, на наш взгляд, редко используются на практике, но при этом рассказываем о многих полезных вещах, о которых в [1] не упоминается. Разнообразные модификации стандартного стиля оформления (" пакеты") описаны в книге Миттельбаха, Гуссенса и Самарина [6], рассчитанной на читателя, уже умеющего работать в LaTeX'е. Некоторые другие книги по LaTeX'у приведены в списке литературы .
Одной из первых книг по LaTeX'у на русском языке была брошюра [4], представляющая собой выполненный А.Шенем перевод краткого руководства [3] с дополнением переводчика, посвященным описанию одной из популярных реализаций TeX'а под DOS - системы emTEX.
METAFONT-шрифты.
Эти шрифты в свою очередь делятся на две категории. В первом случае авторы ставили своей целью экстраполировать Computer Modern на русские буквы (и, в частности, заимствовали формы общих букв из Computer Modern). Таковы шрифты AMS, шрифты Глонти и шрифты Лапко (см. ниже) Во втором случае авторы старались сделать русский шрифт определенного вида, не связывая себя требованиями единства стиля с Computer Modern.
В комплект шрифтов AMS (Американского математического общества), распространяемый практически со всеми версиями TeX'а, входят шрифты, разработанные в Humanities and Arts Computing Center, University of Washington (в 1989 году). Эти шрифты использовались в различных публикациях AMS (в основном — для печати русских названий статей и книг в списках литературы). Вот образец шрифта wncyr10}:
Эти шрифты, если можно так выразиться, "импортные". Первыми " отечественными" русскими METAFONT-шрифтами, кажется, были шрифты, разработанные в Институте физики высоких энергий (Протвино) при участии Наны Глонти и Александра Самарина (их иногда называют шрифтами Глонти). Вот образец шрифта cmcyr10} (взят с сервера ftp.dante.de})
Эти шрифты (с небольшими изменениями отдельных букв, сделанными в основном А.Шенем) были использованы при подготовке этой книги. Приведем их (с этими изменениями) в том же масштабе:
Наконец, Ольга Лапко и Андрей Ходулев разработали шрифты, получившие название "LH-шрифтов". Многие считают, что из различных METAFONT-продолжений шрифта Computer Modern именно эти шрифты обладают наиболее высоким качеством. Кроме того, они включают в себя большой набор символов самых разных языков на кириллической основе. Можно надеяться, что они в будущем окончательно стабилизируются (пока что новые версии выходят довольно часто) и будут в разных версиях TeX'а столь же стандартны, как сейчас шрифты Кнута. (Уже сейчас LH-шрифты входят в большинство дистрибутивов TeX'а, обычно в не самых последних версиях. Впрочем, дело осложняется тем, что авторами этих шрифтов предусмотрено много разных версий для разных кодировок, причем они генерируются "на лету" с использованием довольно хитроумных и не везде работающих механизмов.)
Вот как выглядят русские буквы в этих шрифтах:
Разница между этими четырьмя образцами заметна, если приглядеться внимательно. (Обратите внимание на буквы "Л", " Д" и "Э".)
К шрифтам второй категории относятся шрифты, авторы которых не стремились следовать стилю Computer Modern.
При поддержке Российского фонда фундаментальных исследований в рамках проекта "Русский TeX" Л.Н.Знаменская и С.В.Знаменский разработали шрифты, отчасти напоминающие гарнитуру "Обыкновенная новая". Вот образцы этих шрифтов (мы воспроизводим предварительный вариант этих шрифтов, вошедший, с разрешения разработчиков, в использованную при подготовке книги русификацию):
Видно, что общие для латинского и русского алфавита буквы имеют несколько разные начертания (латинские буквы не изменились по сравнению с оригинальными шрифтами Computer Modern Кнута)
Были предприняты также попытки изготовить METAFONT-файлы на основе других популярных гарнитур. Часть полученных таким образом шрифтов также вошли в использованную при подготовке этой книги русификацию. Вот образцы этих шрифтов:
Завершая разговор о METAFONT-шрифтах, отметим, что существует (не вполне завершенный) набор программ ps4mf (подробную информацию можно найти на сервере ftp.dante.de), который позволяет полуавтоматически изготавливать METAFONT-шрифты из Type 1 шрифтов. Однако получающиеся шрифты плохо приспособлены к печати при низких и средних разрешениях (например, для 300 dpi). Дело в том, что и METAFONT, и Type 1 предусматривают задание границ букв в виде кусочно-гладких кривых, и эти кривые легко перевести из одного формата в другой с минимальными изменениями. Проблема в том, что при переводе шрифтов в черно-белую матрицу кривые подвергаются округлению с неизбежными погрешностями. Если, скажем, ширина вертикальной палочки в букве "Ш" не есть точное кратное размера точки, то может случиться, что три палочки (которые имеют одну и ту же ширину в точном представлении) при округлении приобретут разную ширину.
Кроме того, из- за того же округления буква "Ш" может потерять осевую симмметрию, что нежелательно. Эта проблема существует и для METAFONT'а, и для Type 1, но решается по-разному. Язык METAFONT предоставляет автору шрифтов возможности самому влиять на округление так, как он этого пожелает. В шрифтах Type 1 используются указания особого вида (hints), которые побуждают интерпретатор PostScript'а производить округления так, как это хотелось автору шрифта. При этом формат и интерпретация этих указаний — дело довольно сложное, и без потерь в METAFONT они не переводятся.
Обратный перевод (из METAFONT'а в Type 1) сталкивается не только с проблемой округления, но и с тем, что в METAFONT'е (который представляет собой язык программирования) есть разнообразные средства описания шрифтов, а не только описание контуров. На практике, изготавливая Type 1 шрифты из METAFONT-шрифтов, сначала изготавливают матрицы букв в высоком разрешении, после чего применяют программы, восстанавливающие границы кривых, и добавляют указания (hints) вручную или полуавтоматически.
Обработка ошибок
В исходных текстах для TeX'а, которые вы будете готовить, неизбежно будут присутствовать ошибки. В настоящем разделе мы обсудим, как TeX на них реагирует и как вам, в свою очередь, следует реагировать на эти реакции TeX'а.
Все сообщения, которые TeX выдает на экран в процессе трансляции исходного текста, все ваши ответы на эти сообщения, вообще все, что в процессе трансляции появляется на экране, записывается в специальный файл — протокол трансляции. Обычно файл-протокол имеет то же имя, что обрабатываемый TeX'ом файл, и расширение .log, поэтому он называется .log-файлом. Когда трансляция будет завершена, вы можете в спокойной обстановке просмотреть . log - файл и проанализировать, что произошло.
Часть информации, выдаваемой при трансляции на экран и в .log-файл, представляет собой предупреждения (например, о нештатных ситуациях при верстке абзаца), при выдаче которых трансляция не прерывается . Если, однако, TeX натыкается на синтаксическую ошибку в исходном тексте, трансляция приостанавливается, а на экран выдается сообщение об ошибке.
Чтобы понять, что делать с этими сообщениями, проведем эксперимент. Наберите следующий файл test.tex из 14 строк, в котором умышленно допущено несколько ошибок (только не сделайте лишних ошибок при наборе):
\documentclass{article} \begin{document} По-английски специалист по \TeX'у называется \TeXpert. Следующая строка будет центрирована: \begin{center} Строка в центре. \end{centrr} А теперь попробуем формулы, например, такие, как $(2x+1)^3=5x$. И еще выключную формулу: $$\frac{25}{36}=\lrft(\frac{1} {1+\frac{1}{5}}\right)^2. $$ И последняя формула: $\sqrt{4 = 2$. \end{document}Теперь обработайте наш файл test.tex с помощью LaTeX'а. Вскоре вы увидите на экране вот что:
! Undefined control sequence. l.3 ...алист по TeX'у называется TeXpert . ?Первая строка TeX'овского сообщения об ошибке всегда начинается с восклицательного знака, после которого идет краткое указание на характер ошибки (в нашем случае речь идет о том, что обнаружена несуществующая команда).
Второй обязательный элемент сообщения об ошибке - строка, начинающаяся с l., после которой идет номер строки исходного текста с ошибкой (в нашем случае 3). После номера на экран выдается сама эта строка или та ее часть, которую TeX успел прочесть к моменту обнаружения ошибки. В нашем случае текст был прочитан до несуществующей команды "TeXpert" включительно (эта "команда" получилась потому, что мы забыли оставить пробел, ограничивающий имя команды \TeX, на которой TeX и прервал чтение файла. Наконец, третий основной элемент сообщения об ошибке — строка, состоящая из одного вопросительного знака. Этот вопросительный знак представляет собой "приглашение" пользователю: вам теперь предстоит на сообщение об ошибке отреагировать. Рассмотрим возможные реакции.
Во-первых, всегда можно нажать клавишу x или X (латинскую) и после этого "ввод" ("Enter"): тогда трансляция немедленно завершится. Может быть, именно так стоит поступать начинающему TeXнику, чтобы разбираться с ошибками по очереди. Но можно и просто нажать клавишу "ввод": при этом TeX исправит обнаруженную ошибку "по своему разумению" и продолжит трансляцию. Догадаться о том, что ошибка произошла именно из-за забытого пробела, программа, естественно, не может: исправление будет заключаться попросту в том, что будет проигнорирована несуществующая команда "TeXpert" (так что из печатного текста будет неясно, как по-английски называют специалиста по TeX'у). Нажимать "ввод" в ответ на сообщения об ошибках — довольно распространенная на практике реакция. Если вы твердо намерены нажимать на "ввод" в ответ на все сообщения об ошибках, то можно в ответ на первое же из этих сообщений нажать на "S" или "s", а затем на " ввод"; при обнаружении дальнейших ошибок трансляция прерываться не будет (TeX будет обрабатывать ошибки так, как если бы вы все время нажимали на "ввод"), по экрану пронесутся сообщения об ошибках, а затем вы сможете их изучить, просмотрев log-файл.
Итак, трансляция продолжается. Следующая остановка будет с таким сообщением:
! LaTeX Error: \begin{center} on input line 5 ended by \end{centrr}. See the LaTeX manual or LaTeX Companion for explanation. Type H for immediate help. ... l.7 \end{centrr}
? Это сообщение об ошибке начинается со слов LaTeX Error. Такого рода сообщения не встроены в TeX , а создаются LaTeX'ом. В них также присутствуют строка, начинающаяся с !, строка, начинающаяся с l., и приглашение - вопросительный знак. Есть на экране и объяснение ошибки: из-за опечатки ( centrr вместо center) получилось, что команда \begin, открывающая окружение, не соответствует команде \end , закрывающей его : имена окружений при открывающем \begin и закрывающем \end должны совпадать). Так или иначе, давайте снова нажмем на "ввод"; тут же мы увидим вот что:
! Missing inserted.
^ l.9 как (2x+1)^ 3=5x . И еще выключную формулу: На сей раз мы забыли знак доллара, открывающий формулу; TeX , однако, понял это не сразу, а лишь наткнувшись на символ "^", который вне формул таким образом использовать нельзя. Нажмем "ввод": TeX исправит положение, вставив знак доллара непосредственно перед знаком "^", и пойдет дальше (все такие исправления не вносятся в ваш файл, а происходят только в оперативной памяти компьютера). На печати формула будет иметь странный вид, поскольку "(2x+1)" будет набрано прямым шрифтом, а "5x" - курсивным, но TeX сможет продолжить трансляцию (и искать дальнейшие ошибки).
Следующая ошибка будет уже знакомого нам типа, только на сей раз несуществующая команда получается не из-за забытого пробела, а из-за опечатки ( "\lrft" вместо \left ):
! Undefined control sequence. l.10 $$\frac{25}{36}=\lrft (\frac{1} ? Нажав очередной раз на "ввод", мы немедленно увидим сообщение еще об одной ошибке:
! Extra \right. l.11 {1+\frac{1}{5}}\right) ^2 ? Откуда это, ведь в строке 11 у нас все правильно?! Оказывается, эта ошибка была наведена предыдущей.
В самом деле, перед этим TeX проигнорировал " команду" "\lrft", набранную вместо \left (именно так TeX и делает, если в ответ на ошибку "несуществующая команда" нажать на клавишу " ввод"), так что команду \left TeX вообще не видел; теперь выходит так, что в тексте, который видит TeX , присутствует \right без \left , что запрещено . Ввиду возможности появления таких " наведенных" ошибок, исправлять ошибки надо, начиная с самой первой; не исключено, что при ее исправлении часть последующих пропадет сама собой.
Нажмем на "ввод" и на этот раз; TeX опять по-свойски исправит ошибку, и вскоре вы увидите такое сообщение:
! Missing } inserted. l.13 И последняя формула:$\sqrt{4 = 2$. ? На сей раз ошибка в том, что мы забыли закрывающую фигурную скобку. Нажмем на "ввод"; TeX вставит недостающую скобку (в результате чего на печати получится забавная формула
Количество различных сообщений об ошибках, которые может выдавать TeX , составляет несколько сотен, и нормальная реакция на них обычно такая же, как в нашем эксперименте; сейчас мы рассмотрим еще две типичные ошибки, реакция на которые должна быть иной.
Во-первых, может случиться, что в качестве аргумента команды \input задано имя несуществующего файла. В этом случае вы получите сообщение наподобие следующего:
! LaTeX Error: File `ttst.tex' not found. Type X to quit or <RETURN> to proceed, or enter new name. (Default extension: tex) Enter file name: В ответ на это следует набрать правильное имя файла и нажать на " ввод" , и трансляция благополучно продолжится.
Если вообще никакого файла нет (например, TeX запущен по ошибке), наберите null — это всегда существующий пустой файл. (В некоторых версиях — nul с одним l.)
Можно отреагировать на эту ошибку и так же, как на любую другую: нажать x и "ввод" (трансляция прервется) или s и "ввод" (неправильная команда \input будет проигнорирована, на дальнейшие ошибки TeX будет реагировать так, как если бы вы все время нажимали " ввод"). А если вы работаете с LaTeX'ом под операционной системой UNIX или каким-то ее аналогом (Linux, например), то в ответ на сообщение о такой ошибке можно и попросту нажать "ввод", и она будет проигнорирована.
Если команда \input с именем несуществующего файла попадется TeX'у после того, как вы в ответ на какую-то из прежних ошибок сказали s, то трансляция на этом месте тем не менее остановится и TeX поинтересуется верным именем файла.
Вторая ошибка, о которой мы хотели сказать, строго говоря, ошибкой не является; скорее, это нештатная ситуация. Чтобы смоделировать ее, проведем такой эксперимент: удалим из нашего файла test.tex последнюю строчку, гласящую "\end{document}", и снова запустим LaTeX для обработки этого файла. Нажав сколько-то раз "ввод", мы обнаружим, что работа TeX'а не закончилась, а на экран выдана звездочка: *. Эта звездочка — приглашение TeX'а ввести еще текст или команды; она появляется, когда в исходном тексте отсутствует команда для TeX'а "завершить работу" (в LaTeX'е эта команда входит в качестве составной части в комплекс действий, выполняемых командой \end{document}). Теперь можно вводить с клавиатуры любой текст и команды - TeX отреагирует на них так же, как если бы этот текст и команды присутствовали в вашем файле. Не будем баловаться, а просто наберем \end{document} и нажмем на "ввод", после чего трансляция благополучно завершится. Вряд ли вы будете очень часто забывать последнюю строчку в исходном тексте, но иногда, в результате какой-либо сложной ошибки, может случиться так, что TeX "не заметит" строки \end{document}, и вот тогда-то вы и окажетесь лицом к лицу с TeX'овским приглашением-звездочкой.
Бывают и такие хитрые ошибки, что \end{document} в ответ на приглашение-звездочку LaTeX не удовлетворяет и на экране снова появляется звездочка. На этот случай в LaTeX'е предусмотрено последнее средство: команда \stop. Если вы введете ее в ответ на TeX'овское приглашение, то, скорее всего, трансляция все-таки прервется. Если и \stop не помогает, остается только перезагрузить компьютер или "убить процесс" более цивилизованным способом.
Скажем еще об одном нередко встречающемся TeX'овском сообщении. Если вы открыли группу с помощью фигурной скобки, но забыли ее закрыть, то, даже если трансляция не будет прерываться, в конце вы заведомо получите такое TeX'овское предупреждение:
(\end occurred inside a group at level 1) (вместо 1 может стоять и другая цифра, в зависимости от того, сколько вложенных групп вы забыли закрыть). В частности, такое сообщение будет, если вы забыли закрыть или неправильно закрыли какое-то LaTeX'овское окружение (но в этом случае LaTeX выдаст вам и свое сообщение об ошибке, как в нашем примере с \begin{center} и \end{centrr}).
Наряду с пассивной реакцией на ошибки — все время нажимать на " ввод" или сказать s — есть и другая возможность: прямо с клавиатуры вносить исправления в тот текст, который " видит" TeX . На содержимое файла это не повлияет, но изменения в файл можно будет внести и позднее, руководствуясь тем, что записано в log-файле. При этом может сэкономиться время за счет того, что будет меньше "наведенных" ошибок и, как следствие, потребуется меньше прогонов TeX'а для отладки.
Чтобы внести исправления с клавиатуры, надо нажать i или I и затем "ввод". На экране появится такое приглашение:
insert> В ответ на это приглашение следует ввести тот текст и/или команды, которые вы хотите вставить в текст, читаемый TeX'ом. Чтобы продемонстрировать это на практике, давайте приведем файл test.tex в исходное состояние, вернув в него строку \end{document}, и еще раз запустим LaTeX для его обработки.
В ответ на первое же сообщение (по поводу несуществующей команды "TeXpert") нажмем i , а затем, в ответ на приглашение insert>, наберем правильный текст.
TeX pert и нажмем на "ввод". В ответ на вторую ошибку (когда мы в команде \end допустили опечатку в имени окружения center) скажем сначала i, а затем (в ответ на приглашение) "\end{center}" (кстати, можно делать такие вещи и в один шаг: сразу набрать "i\end{center}" и нажать " ввод"). В ответ на следующую ошибку ничего не остается, как по-прежнему нажать на "ввод": те символы в исходном тексте, между которыми должен был стоять пропущенный знак доллара, уже поглощены TeX'ом, и вставить его куда надо в данный момент невозможно; зато в ответ на следующую ошибку ( "\lrft" вместо \left ) наберем "i\left" и нажмем на "ввод". Следующей (" наведенной") ошибки вообще не будет (ведь на сей раз в тексте, который видит TeX , команда \left присутствует, а поэтому и на команду \right он отреагирует правильно); наконец, в ответ на последнюю ошибку опять ничего не остается, кроме как нажать на "ввод": вставить закрывающую фигурную скобку между 4 и знаком равенства прямо с клавиатуры невозможно. Теперь можно просмотреть, как на сей раз будет выглядеть на печати наш текст; некоторые несуразности наподобие в нем останутся, но их будет меньше, чем если бы мы нажимали на "ввод" : не будет потеряно слово "TeXpert", центрированная строка будет действительно центрирована, формула
будет выглядеть так, как надо. Теперь остается внести исправления в исходный файл (справляясь с тем, что записано в log-файле) и запустить LaTeX вторично, чтобы получить безошибочный текст.
Как мы уже отмечали, в ответ на сообщение об ошибке всегда можно прервать трансляцию, нажав X или x и "ввод"; кроме того, бывают случаи, когда TeX прерывает трансляцию "по своей инициативе". На практике важны два случая:
TeX обнаружил 100 ошибок в пределах одного абзаца — тогда выдается сообщение (That makes 100 errors; please try again.) TeX'у не хватило памяти — тогда выдается сообщение типа ! TeX capacity exceeded, sorry [main memory size=263001]. Нехватка памяти может возникнуть в результате таких ошибок, из-за которых TeX "зацикливается"; тогда достаточно исправить ошибку.
Иногда памяти может действительно не хватить. Так бывает, если в тексте встречаются чудовищно длинные абзацы7) или сверхсложные таблицы с очень большим количеством строк и столбцов (см. лекцию 4 по поводу таблиц). Если вы встретились с такой проблемой, то можно проконсультироваться со специалистом (или самому изучить по книге [2]), как использовать TeX более эффективно (в частности, TeX можно научить переваривать сколь угодно длинные абзацы). Можно также попробовать найти транслятор TeX'а, дающий возможность работать с увеличенным объемом памяти.
Скажем пару слов про более редкие способы реакции на ошибки. Во-первых, в ответ на приглашение ? можно набрать h или H и нажать "ввод". В этом случае TeX выдаст на экран дополнительную информацию по поводу вашей ошибки (вряд ли вы много из нее почерпнете, если вы не TeX ник), а затем еще раз приглашение ?. Во-вторых, можно набрать r или R (и " ввод", естественно); результат будет такой же, как если бы вы сказали s , с той разницей, что в случае, когда аргументом команды \input служит несуществующий файл, никаких вопросов задаваться не будет, а трансляция просто прервется. Наконец, можно набрать Q или q (и "ввод"): результат будет такой же, как от R , с той разницей, что на экран не будет выдаваться вообще ничего (в log -файл все будет записано).
Наконец, режимы реакции на ошибки, задаваемые с клавиатуры с помощью клавиш s , r или q , можно задать прямо в файле, написав в преамбуле одну из перечисленных ниже команд:
\scrollmode - равносильна нажатию s\nonstopmode - равносильна нажатию r\batchmode - равносильна нажатию q
Окружения
Еще одна важная конструкция LaTeX'а - это окружение(environment)
Окружение - это фрагмент файла, начинающийся с текста
\begin{"TeXtit{имя\_окружения} "}где TeXtit{имя\_окружения} представляет собой первый обязательный (и, возможно, не единственный) аргумент команды \begin. Заканчивается окружение командой
\end{"TeXtit{имя\_окружения} "}(команда \end имеет только один аргумент - имя завершаемого ею окружения). Например:
\begin{center} Все строки этого абзаца будут центрированы; переносов не будет, если только какое-то слово, как в дезоксирибонуклеиновой кислоте, не длинней строки. \end{center} |
Каждой команде \begin, открывающей окружение, должна соответствовать закрывающая его команда \end (с тем же именем окружения в качестве аргумента).
Важным свойством окружений является то, что они действуют и как фигурные скобки: часть файла, находящаяся внутри окружения, образует группу. Например, внутри окружения center в вышеприведенном примере можно было бы сменить шрифт, скажем, командой \itshape, и при этом после команды \end{center} восстановился бы тот шрифт, что был перед окружением.
Основные принципы
В документе, подготовленном с помощью TeX'а, различают математические формулы внутри текста и " выключные" (выделенные в отдельную строку). Формулы внутри текста окружаются знаками $ (с обеих сторон). Выключные формулы окружаются парами знаков доллара $$ с обеих сторон. Формулами считаются как целые формулы, так и отдельные цифры или буквы, в том числе греческие, а также верхние и нижние индексы и спецзнаки. Пробелы внутри исходного текста, задающего формулу, игнорируются (но по-прежнему надо ставить пробелы, обозначающие конец команды): TeX расставляет пробелы в математических формулах автоматически (например, знак равенства окружается небольшими пробелами). Пустые строки внутри текста, задающего формулу, не разрешаются. Если нужен пробел до или после внутритекстовой формулы, надо оставить его вне долларов. То же самое относится и к знакам препинания, следующим за внутритекстовой формулой: их также надо ставить после закрывающего формулу знака доллара. (В выключных формулах приходится указывать знаки препинания внутри долларов, иначе эти знаки попадут на следующую строку.) Каждая буква в формуле рассматривается как имя переменной и набирается шрифтом " математический курсив" (в отличие от обычного курсива, в нем увеличены расстояния между соседними буквами).
Часть файла, составляющая математическую формулу, образует группу : изменения параметров, произведенные внутри формулы, забываются по ее окончании.
о котором уже шла речь,
Наряду с текущим шрифтом, о котором уже шла речь, TeX в каждый момент обработки исходного текста учитывает значения различных параметров, таких, как величина абзацного отступа, ширина и высота страницы, расстояние по вертикали между соседними абзацами, а также великое множество других важных вещей. Расскажем, как можно менять эти параметры, если это понадобится.
Параметры TeX'а обозначаются аналогично командам: с помощью символа "\" (" backslash"), за которым следует либо последовательность букв, либо одна не-буква. Например, \parindent обозначает в TeX'е величину абзацного отступа; если нам понадобилось, чтобы абзацный отступ равнялся двум сантиметрам, можно написать так:
\parindent=2cm (Это изменение распространяется лишь на текущую группу: после конца группы восстановится старое значение отступа.)
Аналогично поступают и в других случаях: чтобы изменить параметр, надо написать его обозначение, а затем, после знака равенства, значение, которое мы "присваиваем" этому параметру; в зависимости от того, что это за параметр, это может быть просто целое число, или длина (как в нашем примере), или еще что-нибудь.
Подключение шрифтов
До сих пор мы говорили о наличии шрифтов как таковых, а не о механизме их подключения к системе LaTeX. Само по себе подключение не очень сложно, и можно надеяться, что если качественные разнообразные свободно распространяемые METAFONT- или PostScript-шрифты появятся, то вскоре будут написаны и LaTeX-определения, их подключающие.
Тем не менее, скажем несколько слов о том, как работает механизм подключения шрифтов.
Подключение шрифтов и fd-файлы.
Итак, мы знаем, что имеются пять (вообще говоря) независимых атрибутов шрифта. Все эти атрибуты можно увидеть в сообщении об overfull'е (см. 116). Именно, там присутствует последовательность символов \OT1/cmr/m/n/10.95, в которой перечислены, через косую черту, атрибуты текущего шрифта (кодировка, семейство, насыщенность, начертание, размер). Их можно менять независимо.
Кодировка задается с помощью команды \fontencoding, единственным аргументом которой является имя кодировки. Пример: \fontencoding{T1}. Иногда в ответ на команду \fontencoding LaTeX может пожаловаться, что кодировка ему неизвестна. Тогда можно дать предварительно команду \DeclareFontEncoding таким, например, образом: \DeclareFontEncoding{T2C}{}{} (две пары пустых фигурных скобок — не опечатка!). Может, конечно, случиться, что вы пытаетесь заказать кодировку, вообще отсутствующую в вашей установке LaTeX'а; тогда этот рецепт не сработает.Семейство задается с помощью команды \fontfamily, единственный аргумент которой — внутреннее имя семейства. Пример: \fontfamily{cmr} обозначает семейство Computer Modern Roman.Насыщенность задается с помощью команды \fontseries , единственный аргумент которой — внутреннее обозначение для насыщенности. Пример: \fontseries{bx} обозначает полужирный шрифт (см. таблицу на стр.366}).Начертание задается с помощью команды \fontshape , единственный аргумент которой — обозначение (опять же " внутреннее") для начертания. Пример: \fontshape{it} означает курсивное начертание.Размер задается с помошью команды \fontsize, имеющей два аргумента: первый из них указывает кегль, а второй — интерлиньяж (в пунктах). Пример: \fontsize{10}{12} . Интерлиньяж, указанный во втором аргументе команды \fontsize, будет умножен на коэффициент, являющийся значением команды \baselinestretch (по умолчанию, как мы помним, этот коэффициент равен единице). Теперь становится ясно, как работает прием для изменения интерлиньяжа во фрагменте текста, описанный ранее.При этом само по себе задание атрибутов с помощью этих команд шрифта еще не меняет: чтобы шрифт действительно сменился, надо сначала задать одну или несколько приведенных выше команд, меняющих атрибуты, но непосредственно после них необходимо дать еще команду \selectfont.
Через эти команды выражаются и команды более высокого уровня (скажем, \textbf или \emph). Например, \normalfont) в стандартных классах задается по существу так:
\newcommand*{\normalfont}{% \fontencoding{OT1}\fontfamily{cmr}% \fontseries{m}\fontshape{n}% \selectfont } Остается объяснить, как проинформировать LaTeX, какие шрифты соответствуют тем или иным комбинациям атрибутов. Это делается с помощью специального файла с расширением fd. Вот, например, файл, который (в использованной нами русификации) подключает шрифты типа гельветика.
\ProvidesFile{ot1zhr.fd} [Quasi Helvetica font definitions] \DeclareFontFamily{OT1}{zhr}{} \DeclareFontShape{OT1}{zhr}{m}{n} { <5> <6> <7> <8> zhr5 <9> <10> <10.95> zhr10 <12> <14.4> zhr12 <17.28><20.74><24.88> zhr12}{} \DeclareFontShape{OT1}{zhr}{b}{n} { <5> <6> <7> <8> <9> <10> <12> <10.95> <14.4> <17.28> <20.74> <24.88> zhb10}{} \DeclareFontShape{OT1}{zhr}{bx}{n} { <5> <6> <7> <8> <9> <10> <12> <10.95> <14.4> <17.28> <20.74> <24.88> zhbx10}{} \DeclareFontShape{OT1}{zhr}{m}{sl} { <5> <6> <7> <8> <9> <10> <12> <10.95> <14.4> <17.28> <20.74> <24.88> zhsl10}{} \DeclareFontShape{OT1}{zhr}{m}{it}{ <-> sub * zhr/m/sl }{} Сначала говорится, что определяется семейство zhr в кодировке OT1. (Что не вполне верно, так как в OT1 никаких русских букв нет.) Затем объясняется, что надо использовать в качестве светлых шрифтов прямого (не курсивного) начертания: шрифты zhr5, zhr10, zhr12 (выбор зависит от размера нужного шрифта, указанного в угловых скобках). Затем объясняется, что надо использовать в качестве полужирных ( bx) и наклонных ( sl) шрифтов. Наконец, в последней строке говорится, что (по причине отсутствия курсива в шрифтах типа гельветика) вместо курсива ( it) надо пользоваться наклонным ( sl) шрифтом.
Как видите, ничего сложного в подключении нового семейства нет, если внутренняя кодировка шрифтов совпадает с кодировкой семейства, для которого они применяются. Если же нет, то нужно изготавливать виртуальные шрифты, описание чего выходит за рамки этой книги (есть по крайней мере два способа: один описан в документации к драйверу dvips, второй содержится в пакете fontinst).
В заключение еще раз скажем, что все эти (полезные скорее для общего понимания ситуации, чем практически) сведения приведены здесь в качестве затравки — чтобы вдохновить читателей на изготовление хороших и доступных для применения русских шрифтов.
Может, попробуете?
2) Впрочем, не всё так просто. Например, посмотрев на сайт www.paratype.com}, можно обнаружить разные типы лицензий. Одни ограничивают число принтеров, на которых можно печатать полученные файлы (тем самым, скажем, переслать статью с этими шрифтами коллегам уже нельзя), другие (лицензия на одну публикацию) требуют покупать отдельную лицензию на каждую статью и т.п. Вряд ли даже законопослушные пользователи станут широко использовать шрифты с такими лицензиями.
3) Недавно появились предназначенные для свободного распространения шрифты В.Филиппова, дополняющие упомянутые выше URW-шрифты русскими буквами; видимо, работа над ними еще не закончена. См. ftp://ftp.gnome.ru/fonts/urw}.
Понятие кодировки. Пример: кодировка T1.
Система LaTeX пытается реализовать следующую простую идею: набор символов и форма символов (гарнитура) являются независимыми координатами. Скажем, можно говорить о русских и латинских шрифтах (два значения первой координаты), а также о шрифтах гарнитуры таймс и гельветика (два значения второй координаты), и двигаться по каждой координате независимо.
Несмотря на кажущуюся очевидность, этот принцип трудно реализовать буквально, и не только потому, что какие-то значения координат соответствуют отсутствующим в данном комплекте шрифтам, но и по более тонким причинам. Например, в какой-то гарнитуре может быть специальный символ { "fi"}, которым изображаются стоящие рядом буквы f и i (это называется " лигатурой", обратите внимание на отличие этого символа от набранных подряд букв:fi), а в другой гарнитуре соединять эти буквы не принято и такого символа нет.
Тем не менее в первом приближении можно считать, что в системе LaTeX есть два независимых параметра: кодировка (encoding) говорит, какие символы имеются, а семейство (font family) определяет внешний вид символов. Мы уже упоминали кодировку T1, используемую при работе с неанглийскими языками на латинской основе. Рисунок B.1 показывает символы кодировки T1, представленные шрифтами семейства Computer Modern.
Рис. B.1. Кодировка T1
Та же самая кодировка T1, представленная шрифтами семейства Helvetica, показана на рисунке B.2
Рис. B.2. Кодировка Т1:Helvetica
В теории эти две таблицы должны отличаться лишь формой символов, но на практике это не совсем так: в нынешней версии LaTeX'а некоторые позиции в кодировке T1 в шрифте типа Helvetica не заполнены соответствующими буквами.
Тем не менее кодировка T1 (ее еще называют Cork encoding, поскольку кодировка была утверждена на конференции TeXников в ирландском городе Корк) обеспечивает более или менее приемлемую основу для использования LaTeX'а с разными шрифтами и разными языками с латинской графикой.
Впрочем, до сих пор по умолчанию используется так называемая кодировка OT1, в которой всего
символов, представленных в оригинальных шрифтах Кнута.Эта кодировка показана на рисунках B.3 и В.4. в двух видах (обычные шрифты и tt}-шрифты).
Рис. B.3. Кодировка ОТ1
Рис. B.4. Кодировка ОТ1:семейство cmtt
Читатель может заметить, что эти таблицы не соответствуют идее кодировки, объясненной выше: далеко не все символы в двух таблицах соответствуют друг другу. (А в курсивных шрифтах на месте доллара появляется фунт!) Причина этого понятна: шрифты разрабатывались Кнутом исходя из ограничения в символов и до появления общей схемы переключения шрифтов.
PostScript-шрифты.
В отличие от кириллических METAFONT-шрифтов, которые можно пересчитать по пальцам, PostScript-шрифты с русскими буквами существуют в изобилии. Некоторые из них распространяются западными производителями (скажем, той же фирмой Adobe), но подавляющее большинство сделано в России. Этим, в частности, много занималась фирма "Параграф" (впоследствии шрифтовое подразделение фирмы получило название Paratype).
В отличие от METAFONT-шрифтов, которые (как правило) являются свободно распространяемыми, PostScript-шрифты надо покупать и нельзя выкладывать на сервер вместе с TeX-системой. Формально говоря, это не запрещает распространять вспомогательные файлы, необходимые для их подключения к TeX, как это делалось в течение многих лет с английскими PostScript-шрифтами. В конце концов, наиболее законопослушные пользователи могут шрифтыкупить2), а менее законопослушные пойдут в ближайший ларек за " пиратским" компакт-диском. Но и в том, и в другом случае нет никаких гарантий, что удастся достать именно ту версию шрифта, что была у разработчика вспомогательных файлов — русские шрифты еще менее стандартны, чем английские, и не только формы букв, но и их размеры и кодировка могут различаться в разных версиях.
В случае латинских шрифтов ситуация сильно упростилась благодаря фирме URW, которая разрешила распространять бесплатно некоторые наиболее популярные шрифты вместе с системой Ghostscript. Именно эти шрифты и были использованы нами в приведенных выше примерах гарнитур . К сожалению, насколько известно автору, этому примеру никто из фирм-производителей кириллических шрифтов не последовал, и "белых" (с ясным происхождением и свободно распространяемых без ограничений на использование при подготовке печатных и электронных документов) качественных PostScript-шрифтов автору найти не удалось3) Но есть некоторые "серые" шрифты:
Давным-давно фирма Urbansoft распространяла версию системы Linux, которая называлась "Открытое ядро" (занимавшую тогда несколько дюжин пятидюймовых дискет).В ее состав входили некоторые PostScript-шрифты с русскими буквами (в том числе комплект шрифтов типа литературной гарнитуры), однако они не содержали внутри себя сведений о копирайте. Возможно, какие-то из этих шрифтов послужили исходным материалом для пакета PSCyr (см. следующий пункт).В состав нескольких недавних версий Linux входит пакет PSCyr. Один из разработчиков этого пакета, Александр Лебедев, пишет (цитируется по версии 0.4c-patch2, взятой с сервера ftp.vsu.ru}): Первые шрифты в коллекцию русских шрифтов были собраны Сергеем Наумовым в 1995 г. В этих шрифтах отсутствовала информация об изготовителе, однако по некоторым признакам это были просканированные изображения широко распространенных русских типографских шрифтов... В 1997 г. коллекция была дополнена шрифтами .Arial.}, Courier и Times фирмы Monotype, построенными из шрифтов стандартной поставки Windows...
Свободно распространяемый шрифт ERKurier был добавлен Константином Чумаченко в версии 0.2, а шрифт Academy (неизвестного происхождения) — им же в версии 0.3.}".
Кроме того, говоря об изменениях в версии 0.3, Лебедев пишет:
для легализации коллекции шрифтов добавлен файл LICENSE. В этом файле говорится:
Permission is granted to use, copy, and freely redistribute the fonts from the PSCyr font collection in any media\ldots provided that 1. any modification of\/ \upshape *.afm} and\/ \upshape *.pfb} files is forbidden. 2. the redistribution of the font(s) and the whole collection as separate computer file(s) should retain this license information\/ В самих шрифтах встречаются: Monotype Corporation, AG Fonts Collection, Andrejs Grinbergs, Gavin Helf, Ares Software.
В файле README к версии 0.3 написано:
The typefaces included in this package originally come from The Monotype Corporation plc. (with changes by Eugene V.Demidov), Gavin Helf (with changes by Andrey Chernov); Paratype, division of Paragraph International. As to my knowledge, these fonts are placed into public domain and can be freely redistributed. (AUTHOR: Konstantin Chumachenko)\/ Вопрос о том, насколько законно объявлять свободно распространяемыми шрифты неизвестного происхождения, не указывая никаких подтверждений того, что первоначальные разработчики поместили их в public domain, сложен, тем более что законы, касающиеся юридической защиты шрифтов, непросты для понимания и различны в разных странах.
Мы условно относим эти шрифты к категории "серых", имея в виду лишь, что вопрос о законности их распространения кажется сложным. Впрочем, в условиях, когда на уличных лотках можно найти по бросовой цене базы данных государственных организаций и новейшие версии Windows, трудно представить себе, что именно эти шрифты станут темой юридических дебатов.
Наиболее понятна ситуация со шрифтами Литературной гарнитуры, разработанными фирмой Параграф (Paratype) по заказу Российского фонда фундаментальных исследований. (Заметим, что эта гарнитура отличается от других версий Литературной гарнитуры той же фирмы). По замыслу РФФИ, этот заказ должен был дать возможность готовить и распространять научные тексты, сверстанные в одной из наиболее распространенных традиционных гарнитур. К сожалению, прилагаемая к пакету лицензия не так проста для понимания. Там написано:
In the following paragraphs ``fonts'' stands for Type 1 fonts together with metric files and also any conversions and renderings of them. You are allowed: to use fonts with any TeX distribution; to use fonts with any graphic editors for preparing pictures to be included with TeX documents; to use fonts with other programs (such as WWW browsers) for screening purpose only; to convert fonts into any format for above purposes; to include fonts into electronic documents (such as PDF); to distribute fonts together with RFBR TeX distribution Казалось, бы все возможные разумные использования тут предусмотрены и разрешены. Однако далее написано, что
You are not allowed to use fonts for hardcopy making with any programs except TeX drivers\/, что, формально говоря, запрещает печать включающего эти шрифты файла (полученного с помощью системы TeX) с использованием (скажем) программ Adobe Acrobat} или Ghostscript. Еще написано, что нельзя distribute this fonts as an independent package (так в оригинале), причем что такое в точности RFBR TeX distribution, с которой распространять можно, и где ее взять, не вполне ясно.
Можно надеяться, что это лишь нечеткость формулировки и что дух лицензии важнее ее буквы.
Говоря об отсутствии "белых" кириллических PostScript-шрифтов, следует внести уточнение. Существуют совершенно легальные свободно распространяемые PostScript-шрифты в пакете CM-Super (автор — Владимир Волович), полученные преобразованием свободно распространяемых METAFONT-шрифтов (включая LH-шрифты, шрифты Computer Modern и другие). Но с точки зрения расширения ассортимента шрифтов этот пакет не особенно полезен, поскольку все входящие в него шрифты есть и в METAFONT-формате. Польза от него в другом: с его помощью можно готовить в системе TeX PostScript- и PDF-файлы, в которых использованы только шрифты Type 1 (такие файлы лучше приспособлены к просмотру в программе Acrobat Reader} и к печати на принтерах с высоким разрешением).
Шрифты эти были получены так: сначала из METAFONT-текстов были получены матрицы высокого разрешения, а затем они преобразованы в формат Type 1 с помощью программ TeXtrace и Autotrace.
Разбиение исходного файла на части
Команды, рассматриваемые в этом разделе, помогают разумно организовать исходный текст.
Часто бывает удобно разбить большой текст на несколько частей, хранящихся в разных файлах. Чтобы можно было объединить их в одно целое, в LaTeX'е предусмотрена команда \input. Если в тексте написать
\input{имя\_файла}то TeX будет работать так, как если бы вместо строки с командой \input стоял текст файла, имя которого вы указали.
Обычно, готовя текст большого объема, создают небольшой " головной файл", в котором между \begin{document} и \end{document} размещены строки с командами \input, задающими включение файлов, в которых и записана основная часть текста. Например, книгу из четырех глав, записанных в файлах "ch1.tex",..., "ch4.tex", можно организовать в виде файла из девяти строчек (именно его, а не файлы с отдельными главами, надо будет передать для обработки LaTeX'у):
\documentclass[11pt]{report} \frenchspacing \pagestyle{plain} \begin{document} \input{ch1} \input{ch2} \input{ch3} \input{ch4} \end{document}(Если расширение файла, являющегося аргументом команды \input, не указано, то LaTeX по умолчанию добавляет расширение tex.)
Ради реализма мы в этом примере включили в преамбулу парочку команд, которые могли бы там появиться и на практике. Первая из них означает, что после знаков препинания пробелы не увеличиваются, как это и принято в России и континентальной Европе (по умолчанию эти пробелы увеличиваются в соответствии с англо-саксонской традицией), а вторая — что номера страниц будут печататься снизу и при этом колонтитулов не будет. Позже мы рассмотрим эти вещи подробнее.
Если в вашем тексте присутствуют команды \input, то в процессе трансляции при начале чтения соответствующего файла на экран выдается его имя, чтобы вы понимали, к какому из ваших файлов будут относиться дальнейшие сообщения TeX'а (если таковые будут).
Если вы хотите, чтобы TeX прочитал только часть вашего файла, можно воспользоваться командой без параметров \endinput .
Если она присутствует в файле, то файл будет прочитан только до строчки, в которой написано \endinput , после чего его чтение прекратится.
Если фрагменты текста, включаемые с помощью команд \input , должны на печати начинаться с отдельной страницы (например, если это главы книги, как в приведенном примере), то удобно вместо \input воспользоваться командой \include (ее единственный обязательный аргумент — имя включаемого файла). Выгода здесь в том, что при пользовании командой \include можно в процессе работы над текстом попросить LaTeX обрабатывать только часть включаемых файлов.
Для этого надо добавить в преамбулу команду \includeonly, в аргументе которой приведен (через запятые) список обрабатываемых файлов. Пусть, скажем, в вышеприведенном примере работа над первой главой уже завершена, за четвертую главу вы еще не принялись, а вторую и третью уже вовсю редактируете. Тогда головной файл можно организовать так:
\documentclass[11pt]{report} \frenchspacing \pagestyle{plain} \includeonly{ch2,ch3} \begin{document} \include{ch1} \include{ch2} \include{ch3} \include{ch4} \end{document} (Внимание! В аргументе команды \include расширение ".tex" опускать необходимо! Файлы с расширениями, отличными от ".tex", с помощью этой команды подключать нельзя.) Когда вы перейдете к работе над другими главами, аргумент команды \includeonly надо будет соответствующим образом изменить, а когда весь текст будет готов, можно вообще удалить \includeonly из файла. При этом количество запусков LaTeX'а, необходимых для получения правильных ссылок, задаваемых командами \ref и \pageref , будет меньше, чем при проведении аналогичных манипуляций с \input .
Команду \include нельзя употреблять в файле, который сам включается в текст с помощью \include (для \input такого запрета нет).
Семейства шрифтов
Конечно, хотелось бы подключать к LaTeX'у не один шрифт фиксированного размера, а целый набор новых шрифтов таким образом, чтобы в tex}-файле можно было менять их начертание и размер с помощью команд, аналогичных рассмотренным нами в лекции 3.
Такие возможности действительно есть. Например, образцы шрифтов типа Times, приведенные на с. 360, были получены с помощью таких команд:
{\fontfamily{ptm} \selectfont \begin{center} This is Times font sample\\ ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz\\ \fontshape{it}\selectfont ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz \fontseries{b}\fontshape{n}\selectfont ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz\\ \fontshape{it}\selectfont ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz \end{center} }В них устанавливаются желаемые параметры шрифта, а затем этот шрифт вызывается командой \selectfont.
Сначала мы устанавливаем семейство шрифтов с помощью команды
\fontfamily{ptm}(где ptm есть внутреннее имя семейства шрифтов типа таймс). При этом остальные параметры (размер, насыщенность, начертание) остаются неизменными. Команда \selectfont переключает шрифт. Затем мы меняем начертание с помощью команды \fontshape, делая его курсивным (it}, прямое начертание обозначается n), и снова переключаем шрифт с помощью \selectfont. После этого мы меняем насыщенность с помощью команды \fontseries (при этом b} означает полужирный шрифт, а обычный шрифт обозначается m}) и возвращаемся к прямому начертанию. И так далее.
Есть еще команда изменения размера шрифта, явно указывающая кегль и интерлиньяж. Например, команды
\fontfamily{ptm} \fontsize{17pt}{24pt} \selectfont This is Times Roman\\ 17 pt / 24 ptпозволяют напечатать две строки шрифтом типа таймс с размером 17 pt и расстоянием между строками 24 pt:
Команды \fontfamily, \fontseries, \fontshape и \fontsize являются командами "нижнего уровня": как правило, надо использовать не их, а команды типа \textbf, \textit, \textsf или же команды смены начертания и насыщенности (\rmfamily, \sffamily, \upshape, \bfseries и др.).
Но откуда же LaTeX узнаёт, что, например, команда \rmfamily предписывает переключиться на семейство шрифтов, известное под внутренним именем cmr, а команда \bfseries устанавливает насыщенность, известную под внутренним именем bx? Эта информация содержится в определении следующих команд:
\rmdefault | cmr |
\sfdefault | cmss |
\ttdefault | cmtt |
\bfdefault | bx |
\mddefault | m |
\itdefault | it |
\sldefault | sl |
\scdefault | sc |
\updefault | n |
Сказанное объясняет рецепт уменьшения ширины жирного шрифта, приведенный на стр.114: переопределяя команду \bfdefault, мы заставляем LaTeX по командам \textbf или \bfseries (а также \bf) выбирать шрифт насыщенности b}, менее широкой, чем насыщенность bx, получающаяся по умолчанию.
А если, например, вы захотите, чтобы основным шрифтом вашего документа был шрифт без засечек, то можно переопределить в преамбуле команду \rmdefault:
\renewcommand*{\rmdefault}{cmss} (согласно нашей таблице, cmss — это LaTeX'овское внутреннее имя для шрифта без засечек). Другой вопрос, будет ли это удачным полиграфическим решением. Не слишком увлекайтесь подобными экспериментами, если вы не полиграфист!
Штрихи и многоточия
Штрихи в математических формулах обозначаются знаком "'" (и не оформляются как верхние индексы):
Согласно формуле Лейбница, $$ (fg)''=f''g+2f'g'+fg''. $$ Это похоже на формулу квадрата суммы. |
Если надо записать формулу, читающуюся как "
штрих в квадрате", возьмите x' в фигурные скобки, вот так: ${x'}^2$. Обратите еще внимание на то, что точку мы поставили в конце выключенной формулы (если бы мы поставили ее после знаков $$, то с нее начался бы абзац, следующий после формулы).В математических формулах встречаются многоточия; TeX различает многоточие, расположенное внизу строки (обозначается \ldots), и расположенное по центру строки (оно обозначается \cdots). Первое из них используется при перечислениях, второе — когда нужно заменить пропущенные слагаемые или сомножители (такова американская традиция; в России обычно многоточие ставят внизу строки и в этом случае):
В детстве К~.-Ф.~Гаусс придумал, как быстро найти сумму $$1+2+\cdots+100=5050; $$ это случилось, когда школьный учитель задал классу найти сумму чисел $1,2,\ldots,100$. |
Знак "~" после инициалов великого Гаусса мы поставили, чтобы фамилия не могла перенестись на другую строку отдельно от инициалов. В LaTeX'е можно использовать команду \ldots и в обычном тексте, вне математических формул, для знака многоточия.
Скобки
Круглые и квадратные скобки набираются как обычно, для фигурных скобок используются команды \{ и \},для других также есть специальные команды (см. следующую лекцию).
$$ 1+\left(\frac{1}{1-x^{2}} \right)^3 $$ |
Команда \left перед открывающей скобкой в совокупности с командой \right перед соответствующей ей закрывающей скобкой позволяет автоматически выбрать нужный размер скобки:
Подробнее о скобках, размер которых выбирается автоматически, рассказано в следующей лекции .
Спецсимволы
Большинство символов в исходном тексте прямо обозначает то, что будет напечатано (если в исходном тексте стоит запятая, то и на печати выйдет запятая). Следующие 10 символов:
{}, $, &, #, %, _, ",^, \имеют особый статус; если вы употребите их в тексте " просто так", то скорее всего получите сообщение об ошибке (и на печати не увидите того, что хотелось). Печатное изображение знаков, соответствующих первым семи из них, можно получить, если в исходном тексте поставить перед соответствующим символом без пробела знак "\" (по-английски он называется "backslash"):
Курс тугрика повысился на 7\%, и теперь за него дают \$200. |
Если символ "%" употреблен в тексте не в составе комбинации "\%", то он является "символом комментария": все символы, расположенные в строке после него (и сам "%"), TEX игнорирует. С помощью символа "%" в исходный текст можно вносить пометки "для себя":
Это % глупый % Лучше: поучительный пример. Жил-был у бабушки сере% нький козлик. |
Обратите внимание на предпоследнюю строку: после знака процента игнорируется вся строка, включая ее конец, который в нормальных условиях играет роль пробела; с другой стороны, начальные пробелы в строке игнорируются всегда. Поэтому TeX не видит пробела между кусками слов "сере" и "нький", и они благополучно складываются в слово "серенький".
Скажем вкратце о смысле остальных спецсимволов. Фигурные скобки ограничивают группы в исходном файле. Знак доллара ограничивает математические формулы. При наборе математических же формул используются знаки "_" и "^" (" знак подчеркивания" и " крышка"). Знак "" обозначает "неразрывный пробел" между словами . Со знака "\" начинаются все TeX'овские команды . Знаки "#" и "&" используются в более сложных конструкциях TeX'а, о которых сейчас говорить преждевременно.
Отметим еще, что символы "< > |" в тексте употреблять можно в том смысле, что сообщения об ошибке это не вызовет, но напечатается при этом нечто, совсем на эти символы не похожее. Подлинное место для этих символов, так же как и для символов "=" и "+", — математические формулы, о которых речь пойдет позже.
Степени и индексы
Степени и индексы набираются с помощью знаков "^" и "_" соответственно.
Катеты $a$,$b$ треугольника связаны с его гипотенузой $c$ формулой $c^2=a^2+b^2$ (теорема Пифагора). |
Если индекс или показатель степени - выражение, состоящее более чем из одного символа, то его надо взять в фигурные скобки:
Из теоремы Ферма следует, что уравнение $$ x^{4357}+y^{4357}=z^{4357} $$ не имеет решений в натуральных числах. |
Если у одной буквы есть как верхние, так и нижние индексы, то можно указать их в произвольном порядке:
Обозначение $R^i_{jkl}$ для тензора кривизны было введено еще Эйнштейном. |
Если же требуется, чтобы верхние и нижние индексы располагались не друг под другом, а на разных расстояниях от выражения, к которому они относятся, то нужно немного обмануть TeX, оформив часть индексов как индексы к "пустой формуле" (паре из открывающей и закрывающей скобок):
Можно также написать $R_j{}^i{}_{kl}$, хотя не всем это нравится. |
Если вы хотите написать формулу, читающуюся как "два в степени, равной икс в кубе", то запись "2^x^3" вызовет сообщение об ошибке; правильно будет "2^{x^3}" (на печати это будет выглядеть как
).Структура исходного текста
LaTeX-файл должен начинаться с команды
\documentclassзадающей стиль оформления документа (в LaTeX'е
принято говорить "класс документа".3)Пример:
\documentclass{book}
Слово {book} в фигурных скобках указывает, что документ будет оформлен, как книга: все главы будут начинаться с нечетных страниц, текст будет снабжен колонтитулами некоторого определенного вида и т.п. Кроме класса book, в стандартный комплект LaTeX'а входят классы article (для оформления статей), report (нечто среднее между article и book, proc (для оформления изданий типа " труды конференции") и letter (для оформления деловых писем так, как это принято в США). Чтобы задать оформление документа с помощью одного из этих классов, надо в фигурных скобках после команды \documentclass указать вместо {book} название требуемого класса. Стандартные классы можно (а иногда и нужно) менять, можно создавать и новые классы, но пока что будем исходить из стандартных классов.
После команды \documentclass могут следовать команды, относящиеся ко всему документу и устанавливающие различные параметры оформления текста, например, величину абзацного отступа (вообще-то все эти параметры определяются используемым классом, но может случиться, что вам понадобится сделать в них изменения). Далее должна идти команда \begin
\begin{document}
Только после этой команды может идти собственно текст. Если вы поместите текст или какую-нибудь команду, генерирующую текст (например, \LaTeX до \begin{document}, то LaTeX выдаст сообщение об ошибке. Часть файла, расположенная между командами \documentclass и \begin{document}, называется преамбулой.
Заканчиваться файл должен командой
\end{document}
Если после \end{document} в файле написано что-то еще, LaTeX это проигнорирует.
Следующий пример показывает LaTeX-файл, составленный по всем правилам. Ничего интересного в результате его обработки не напечатается, но уж зато и сообщений об ошибках вы не получите.
\documentclass{article} \begin{document} Проба пера. \end{document}Совет: если вы до сих пор не работали с системой LaTeX на компьютере, сейчас самое время попробовать (только замените русские буквы на латинские, если доступный вам LaTeX не " русифицирован").
Входная и внутренняя кодировки.
Следует подчеркнуть, что слово "кодировка" в сочетании " кодировка T1" имеет не совсем обычный смысл. Эта кодировка, вообще говоря, не совпадает с кодировкой букв во входных файлах (а для некоторых символов вообще нет кода, который им соответствует во входном файле). Как же задается соответствие между ними? Есть два принципиально разных подхода.
Первый вариант состоит в том, что в программу TeX встраивается дополнительный механизм (выходящий за рамки собственно TeX'а), который считывает таблицу соответствия между кодами и автоматически перекодирует входные символы. (Можно сказать, что TeX в узком смысле этого слова ничего не знает о входной кодировке.) Обратное перекодирование производится при выдаче log}-файлов и других текстовых файлов.
Второй вариант, не выходящий за рамки TeX'а и применяемый в пакете inputenc, состоит в том, что символы входного потока становятся "активными", то есть становятся командами, порождающими символы во внутренней кодировке. Это, конечно, противоречит всей архитектуре TeX'а, поскольку там есть специальная "категория", называемая буквами (letters), а активные символы — уже не буквы. В результате работа других пакетов может нарушиться, если они не готовы к такому повороту событий, в idx-файл попадают не буквы, а команды для них (что нарушает нормальную работу программ для обработки idx-файлов) и т.д. Зато, скажем, кодировку можно переключать "на лету" в середине текста, если это зачем-то понадобится.
Кстати, внутренняя кодировка (при использовании так называемых виртуальных шрифтов) может не совпадать и с кодировкой, используемой в шрифте (будь то PostScript- или METAFONT-шрифт). Но в tfm-файлах используется как раз внутренняя кодировка.
Рис. B.5. Кодировка T2A
Рис. B.6. Кодировка T2В
Рис. B.7. Кодировка T2C
Что же получается с русскими текстами? Для них есть несколько входных кодировок (koi8-r, cp1251, cp866) и несколько внутренних. Заметим, что при использовании одной внутренней кодировки не удается поместить в нее все кириллические символы, сохранив первую половину такой же, как в кодировке T1 (разных символов слишком много). Это было причиной появления кодировок T2A, T2B и T2C, в которых русские буквы стоят на одних и тех же местах, но вот дополнительные буквы разные. На рисунках В.5, В.6 и В.7 приведены соответствующие списки символов (набранные шрифтами LH — на сегодняшний день единственными кириллическими шрифтами, эти кодировки поддерживающими).
Представляет интерес также кодировка X2 (рис. В.8), в которой первая половина также используется для кириллических символов (в отличие от T2A, T2B и T2C, в ней присутствуют символы, необходимые для набора русских текстов в дореволюционной орфографии). Кроме этого, имеется кодировка OT2, соответствующая кодировке символов в русских шрифтах AMS, а также многие другие.
Рис. В.8. Кодировка X2
Звездочка после имени команды
В LaTeX'е некоторые команды и окружения имеют варианты, в которых непосредственно после имени команды или окружения ставится звездочка "*". Например, команда \section означает "начать новый раздел документа", а команда \section* означает "начать новый раздел документа, не нумеруя его".
Г. Классы документов АMS
Американское математическое общество (AMS) распространяет три специализированные класса документов, предназначенные для набора математических текстов: amsart , amsproc и amsbook. Оставляя последний в стороне (уж если Американское математическое общество закажет вам монографию, то, наверное, снабдит и подробными инструкциями), остановимся на особенностях оформления документа "в целом", характерных для первых двух классов.
Для начала отметим, что AMS'овские классы документов автоматически подключают стилевые пакеты amsmath и amsthm (если, однако, вам понадобились коммутативные диаграммы или дополнительные шрифты, то пакеты amscd, amsfonts или amssymb все же придется подключить в явном виде, с помощью команды \usepackage). Остальные особенности этих классов относятся к титульной информации (т.е. к тому, что идет до команды \maketitle) и рубрикации документа.
Начнем с титульной информации. Команды \title и \author могут принимать необязательный аргумент (в квадратных скобках, естественно), ставящийся перед обязательным. Эти необязательные аргументы суть сокращенные варианты заглавия и имени автора, предназначенные для включения в колонтитулы. Команда \thanks, в аргументе которой обычно выражается благодарность за финансовую поддержку, оформляется не как сноска к имени автора, а записывается в преамбулу самостоятельно, наравне с \author и \title. В преамбуле одного документа может быть несколько команд \thanks. Команда \address также принимает один обязательный аргумент — адрес автора (можно разбивать на строки командой \\). Если вы хотите, наряду с постоянным адресом, указать еще и адрес для текущей переписки, можно это сделать в аргументе команды \curraddr. А если автор хочет указать и электронный адрес, можно его указать в команде \email (вниманию привыкших к AmSTeX'у: символ "@" надо набирать непосредственно, не используя backslash и/или удвоения!). Команда \address должна следовать после команды \author; если вы пользуетесь командами \curraddr и/или \email, то они, в свою очередь, должны следовать после команды \address именно в таком порядке, как указано выше.
Все сказанное относилось к случаю, когда автор у документа один. Если авторов несколько, то информацию о каждом из них надо задавать отдельной командой \author; после каждой команды \author ставится своя команда \address, а также, если нужно, \curraddr и/или \email.
Если вы хотите посвятить кому-то свою работу, запишите это посвящение в аргументе команды \dedicatory. В аргументе команды \keywords вы можете записать список ключевых слов, определяющих вкратце, что надо знать для понимания вашего труда, а в аргументе команды \subjclass — указать, к какому разделу математики, согласно рубрикатору~AMS, относится ваш опус. Наконец, аннотация к статье, оформленная как окружение abstract , в AMS'овских классах должна идти до \maketitle (но все равно после \begin{document}).
Что касается самого текста статьи, то главное отличие от того, что нам привычно по "обычному" LaTeX'у, состоит в командах рубрикации. Классы amsart и amsproc допускают в качестве таковых только \section, \subsection, \subsubsection, а также команду \specialsection, задающую самые крупные рубрики (более крупные, чем \section).
Теперь вы знаете достаточно, чтобы оформить статью по математике в соответствии с канонами Американского математического общества. Осталось только эту статью написать. Успехов вам!