Журнал LinuxFormat - перейти на главную

LXF84:LaTeX

Материал из Linuxformat
Перейти к: навигация, поиск
LaTeX

Листинги и текст на сайте автора

ЧАСТЬ 2: Мы говорим на русском языке и пользуемся операционной системой GNU/Linux — подобное на нашей планете встречается не так уж часто. Хотите стать ещё более элитарным подмножеством? Евгений Балдин знает уникальный рецепт — используйте LaTeX!

Содержание

Базовые элементы

«Командная логика»

Щенок должен понять, что быстрое и чёткое выполнение команд хозяина всегда вознаграждается лакомством или лаской. Для набора кода в LaTeX знание английского языка приходится очень кстати. Основных команд немного — их можно запомнить и так, но для совершенствования английский необходим, хотя бы для чтения документации к пакетам. Названия у команд, как правило, вполне осмысленны, что очень помогает при поиске чего-нибудь необходимого в алфавитном указателе. «Правильный» тестовый редактор тоже не является лишним.

Спецсимволы

Не все символы равноправны. За частью символов в LaTeX зарезервированы специальные значения. Это: «\», «$», «%», «_», «{», «}», «&», «#», «^» и «~». В процессе изложения их роль будет, со временем, раскрыта.

Чтобы отобразить эти символы при печати необходимы дополнительные усилия. Предыдущий параграф в текстовом редакторе выглядел бы так:

Это: <<\textbackslash>>, <<\$>>, <<\%>>, <<\_>>[1], <<\{>>, <<\}>>, <<\&>>, <<\#>>, <<\^{}>> и <<\~{}>>. В процессе изложения их роль будет раскрыта.

Группировка

Группировка осуществляется с помощью фигурных скобок: {группа}. Фигурные скобки при печати не отображаются.

Сложные конструкции, которые имеют открывающую и закрывающую команды (например, окружения), тоже группируют текст.

Построение команды

Команды в LaTeX начинаются с символа \ (backslash или обратная косая черта) и продолжаются комбинацией, состоящей только из стандартных латинских букв[2]. Команды завершаются пробелом, цифрой или не латинской буквой. Все пробельные символы после команды игнорируются. Для того, чтобы пробел после команды не игнорировался, достаточно вставить «пустую группу»: \command{}. Например, чтобы лого LaTeX (команда \LaTeX) не слилось со следующим за ним словом, следует написать \LaTeX{}.

Аргументы

Командам LaTeX могут передаваться внешние аргументы:

\command[param1][param2]{param3}{param4}

В квадратные скобки заключаются необязательные параметры (param1 и param2), а в фигурные — обязательные (param3 и param4). Некоторые из команд LaTeX влияют только на свои аргументы. Например, команда

\textbf{текст}

выводит слово текст жирным шрифтом.

Декларативные команды

Часть команд LaTeX являются своеобразными переключателями режимов. Область действия декларативной команды может ограничиваться логической группой или единицей структуры печатного документа, например, страницей.

%дальнейший текст будет печататься жирным шрифтом
\bfseries
%убрать заголовки и нумерацию для текущей страницы
\thispagestyle{empty}
Окружения

Сложные конструкции, которые имеют открывающую и закрывающую команды вида \begin{имя} и \end{имя}, называют окружениями. Вместо слова «имя» подставляется название соответствующего окружения

\begin{center}
Это строка будет отцентрирована
\end{center}

Окружения могут вкладываться друг в друга, как матрёшки, но их области действия не могут перекрываться.

Логика документа

Вид документа определяется выбором класса и стилей. Хорошим приёмом является наличие личных готовых шаблонов с уже предопределёнными предпочтениями, которые могут меняться по мере развития документа.

Структура файла LaTeX

Текстовый tex-файл состоит из двух частей: заголовка или преамбулы и собственно самого текста, и выглядит примерно следующим образом:

%---начало заголовка---
%выбор класса документа, например article или book
\documentclass{} 
%минимальная кириллизация
\usepackage[koi8-r]{inputenc}
\usepackage[english,russian]{babel}
\usepackage{indentfirst}
%загрузка пакетов по выбору
\usepackage{}%определение своих команд или переопределение уже существующих
\newcommand{\mycommand}{}
\renewcommand{\oldcommand}{}%локальные настройки%---конец заголовка---
\begin{document}
%тело документа
\end{document}

Первым делом с помощью инструкции \documentclass осуществляется выбор класса документа. Далее загружаются стилевые пакеты.

Для того, чтобы можно было набирать русский текст, необходимо с помощью пакета inputenc указать кодировку текстового файла, например, koi8-r. Далее нужно подключить пакет babel, который отвечает за локализацию, в частности, за переносы и «национальные особенности» набора. Например, при включении русского языка доопределяется символ номера № (\No), символ параграфа § (\S) и многое другое. Для формирования отступа или красной строки у первого параграфа, как это принято в России, необходимо загрузить пакет indentfirst. По идее, это должно относиться к «национальным особенностям», но в babel по умолчанию не подгружается.

К вопросу о переносах

Пожалуй, единственное, что, возможно, потребует настройки в свежеустановленном дистрибутиве LaTeX, это включение переносов. Этой проблемы заведомо не возникает при установке TeX Live и в большинстве современных дистрибутивах GNU/Linux, но всякое бывает.

Для установки переносов можно воспользоваться утилитой texconfig[3]. После запуска программы следует выбрать меню HYPHENATION, а затем меню LaTeX. Далее будет предложено отредактировать[4] файл переносов language.dat. Обычно достаточно таких настроек:

english hyphen.tex
russian ruhyphen.tex

Всё остальное по желанию можно закомментировать. По умолчанию, когда включаются переносы для определённого языка, все остальные правила переносов отключаются. Но в случае английского и русского языков это можно обойти, воспользовавшись русско-английской таблицей переносов:

ruseng ruenhyph.tex
=russian
=english

Следует понимать, что подобная настройка с точки зрения философии LaTeX не совсем корректна. Для гарантированно одинакового результата компиляции независимо от платформы лучше поступиться некоторыми удобствами.

Класс документа

С помощью обязательной инструкции \documentclass[опции]{класс} можно указать, к какому классу будет относиться рабочий текст.

Класс документа следует выбирать в зависимости от того, что должен представлять из себя текст. Для начала можно остановиться на стандартном классе article. Этот класс разработан специально для статей и небольших отчётов. Для отчётов побольше можно использовать класс report, а для книг — класс book.

Перечисленные стандартные классы сложились очень давно и многие производные классы документов основаны на них. Как следствие, стандартные базовые классы абсолютно статичны, поэтому для специализированных вещей используются свои классы. Например, для научных статей популярны различные модификации revtex4. Вячеслав Фёдоров разработал класс eskd (стандарт ЕСКД), который можно найти на CTAN или в стандартной поставке TeX Live. Те, кто недоволен большими полями в стандартных LaTeX-классах, могут обратить внимание на набор классов KOMA-script (scrartcl, scrreprt и scrbook вместо article, report и book, соответственно).

Поначалу в выбранном классе ничего менять не следует. То, что кажется с непривычки неудобным, на самом деле может улучшать восприятие печатной копии. Например, относительно узкая ширина текста в стандартных классах (следствие больших полей) позволяет при прочтении охватывать взглядом всю строку целиком, что увеличивает скорость чтения.

Как правило, разумные модификации можно осуществить через параметры в команде выбора класса, например:

\documentclass[a4paper,12pt,oneside]{scrbook}

a4paper — размер листа бумаги (можно выбрать другой стандарт, например, a5paper), 12pt — базовый размер шрифта (в стандартных классах доступны размеры в 10pt и 11pt), а oneside — односторонняя печать (удобнее при просмотре электронной версии).

В заключение хотелось бы отметить набор классов NCC, активно разрабатываемых А. И. Роженко. Класс ncc позиционируется автором как «русскоязычная статья». Класс можно взять на CTAN, он присутствует и в стандартной поставке TeX Live.

Стили

За буковку «ё» замолвите слово

Пара слов в поддержку буквы «ё». Эту букву незаслуженно забывают при наборе текстов. Более того, некоторые деятели ратуют за её полное упразднение. Однако, коль уж вам довелось узнать русский язык, то говорить и писать на нём следует правильно. Наличие буквы «ё» в тексте значительно облегчает процесс чтения. Особенно это актуально при быстром чтении.

Поставь букву «ё» на место её!

Для проверки правописания следует использовать словарь Александра Лебедева. Этот словарь построен на основе словаря русского языка для ispell, первоначально составленного Нилом Далтоном (Neal Dalton) в 1992 г. После тщательной проверки и исправления примерно 4000 ошибок в словаре Нила Далтона, в словарь были добавлены отсутствовавшие в нём правила образования форм существительных, прилагательных, причастий, наречий, изменены правила формирования окончаний глаголов, так что affix-файл можно считать переписанным заново. Одновременно в словарь было добавлено большое число слов.

Отличительной чертой данного словаря является то, что в него включена полноценная поддержка буквы «ё». В современных дистрибутивах GNU/Linux словарь Александра Лебедева является основным русским словарём для ispell. К сожалению, в подавляющем большинстве случаев словарь «собран» без поддержки «ё». Авторы пакета ошибочно предполагают, что «е» и «ё» – это одинаковые буквы. При проверке правильными являются такие слова как «ежик», «елка» и тому подобное. Правильный выход: убедить автора/самому стать автором пакета. Неправильный, но гораздо более простой: локально пересобрать пакет с полноценной поддержкой «ё».

Словарь постоянно совершенствуется, дополняется и корректируется. Последнюю версию словаря можно найти на авторской страничке Александра Лебедева.

Стилевой файл (.sty) или пакет представляет из себя набор макросов и определений, созданных для решения какой-то определённой задачи. Для подключения стилевого файла используется команда \usepackage[опции]{стиль}.

Основное отличие классов от пакетов в том, что один документ может включать один класс и сколько угодно стилевых пакетов. Фактически, на любую задачу в LaTeX находится ответ в виде соответствующего пакета. В стандартной поставке TeX Live присутствует свыше двух тысяч .sty-файлов, кроме того, ничего не мешает создать свой, оптимизированный под локальные задачи.

К вопросу о кириллизации

Чтобы кириллизовать LaTeX, необходимы шрифты. Благодаря Ольге Лапко на свете есть шрифты семейства lh, которые отлично согласуются с базовыми шрифтами Computer Modern. Мало иметь просто кириллические буквы — надо, чтобы их начертания соответствовали и другим шрифтам, в том числе, математическим. В 2001 году Владимир Волович проделал огромную работу по переводу METAFONT-шрифтов в формат Type1, что теперь позволяет создавать не только хорошие печатные копии, но и вполне качественные электронные pdf-версии документов.

За перевод из кодировки файла во внутреннюю кодировку LaTeX отвечает пакет inputenc. В качестве опции при загрузке с ним передаётся текущая восьмибитная кодовая страница документа. Для кириллицы могут оказаться интересны следующие варианты: koi8-r, koi8-u, cp866, cp1251 и 8859-5. Собственно говоря, всё. Единственное неудобство, которое возникает из-за этого, заключается в том, что сообщения об ошибке LaTeX выдаёт в своей внутренней T2A кодировке[5]. Для исправления этого неудобства можно воспользоваться простейшим фильтром. Для начало его надо собрать:

> locate t2filter.c 
{TEXMF}/texmf-dist/doc/generic/t2/etc/t2filter.c
> cd {TEXMF}/texmf-dist/doc/generic/t2/etc/
> gcc -Wall -O2 -s -o ~/bin/t2filter t2filter.c
> LaTeX {файл}.tex | t2filter

Тело документа

Всё, что заключено внутри окружения document, является телом документа. Если у вас есть какие-то куски текста, которые печатать не хочется, а выкинуть жалко, то их достаточно вынести в конец за инструкцию \end{document}.

Логика набора

Объявление в газете: Ищу работу машинистки.

Печатаю со скоростью 4000 знаков в минуту.

Правда, такая белиберда получается!

Мало открыть файл в текстовом редакторе и начать набирать. Нажимать на клавиши надо осмысленно.

Печатаем текст

При наборе книги/статьи/заметки основное вовсе не команды, а сам текст. Правила очень просты.

Комментарии

Всё, что следует за знаком «%» включительно, является комментарием. Большие закомментированные сегменты мешают работать с основным текстом, и поэтому их следует исключать из рабочего файла. Но при желании можно воспользоваться окружением comment из пакета verbatim.

Разделение слов

Пробельные символы используются в LaTeX для разделения слов. Пробелы в начале строки игнорируются. Символ перевода строки так же воспринимается как пробел. Если в конце строки сразу за последним словом вставить знак комментария:

экранировка перевода стр%
оки

то разделения слов не происходит. Иногда этот приём может оказаться полезным.

Разделение абзацев

Для того, чтобы начать новый абзац, необходимо оставить пустую строку:

текущий абзац закончился
 
следующий абзац начался

Число пустых строк между абзацами не имеет значения.

Пунктуация

TeX-логослово

Когда Д.Э. Кнут создавал TeX – он много думал. Причём думал не только об алгоритмах и коде. В частности, он нашёл время подумать о том, как назвать своё произведение. TeX читается как «тех». Последняя буква – вовсе не английская буква «икс», а греческая «хи». Также он продумал и правила изображения этого названия. С тех пор в TeX-сообществе возникла мода на создание TeX-лого.

290px Распространённые TeX-лого. Команда \NCC определена в пакете ncclatex. Остальные команды заведомо определены в пакете texnames.

Напечатанный текст обезличивается. Нет эмоций — только буквы. Единственное, что остаётся — это знаки пунктуации и, возможно, смайлики ☺.

Запятую, точку, точку с запятой, двоеточие, многоточие, скобки, кавычки, восклицательный и вопросительные знаки следует «прижимать» к словам. Не надо оставлять пробелов, а то LaTeX «подумает», что так и надо.

Пробелы

Расстояние между словами LaTeX выбирает по своему усмотрению для максимально равномерного заполнения страницы. Но иногда необходимо указать размер пробела вручную:

  • «~» — неразрывный пробел, то есть по этому пробелу не производится перенос на другую строку,
  • «\,» — маленький нерастяжимый пробел,
  • «\ » — нормальный нерастяжимый пробел.

В основном, указывать размеры пробелов надо в случае набора каких-либо сокращений, например, так следует набирать ФИО: Ф.\,А.~Милия "--- негоже «отрывать» ИО от Ф\@. Ещё примеры: т.\,е., г.~Новосибирск, рис.~1 и~т.\,д.\ и~т.\,п.

LaTeX считает, что после точки предложение заканчивается, если эта точка стоит не после заглавной буквы. Растяжимость пробелов между предложениями и между словами существенно разная. Поэтому если точка случается в середине предложения, то после неё следует явно вставить пробел «\ » или неразрывный пробел «~». Может случиться, что точка следует сразу за заглавной буквой и означает именно конец предложения (как в примере происходит с буквой Ф). Для этого перед такой точкой следует добавить коррекцию в виде команды «\@».

Дефисы, минусы и тире

В издательских системах, основанных на TeX’e, различают дефис (hyphen), короткое тире (en-dash), длинное тире (em-dash) и знак минуса.

Чтобы получить на печати дефис, короткое или длинное тире, надо набрать один, два или три знака «-», соответственно.

При подключении пакета babel с опцией russian появляются дополнительные команды, позволяющие более строго следовать русским печатным традициям.

Дефис используют в составных словах (кто-то, где-нибудь), короткое тире рекомендуется для указания диапазона чисел (10--15, 
2001--2006), длинное тире означает обычное тире (\LaTeX{} "--- это круто), минус может существовать только в формулах ($a-b=c$). 
Пакет \texttt{babel} вводит дополнительные команды для написания  тире. Для двойных или парных фамилий следует использовать 
конструкцию "--~, например, уравнение Менделеева"--~Клапейрона, композитор Римский"--~Корсаков. Чтобы длинное тире не отрывалось от 
предыдущего слова и вокруг него создавались правильные пробелы вместо --- следует употреблять "---, т.\,е. к трём тире надо 
добавить двойную кавычку. Прямая речь должна начинаться с команды "--*:
"--* Я сказал.

Правила могут показаться немного запутанными, но к ним быстро привыкаешь, и они того стоят.

Переносы В большинстве случаев LaTeX грамотно переносит слова, но в случае сложных слов, которые пишутся через дефис, перенос происходит только по дефису. Аналогично проблемы возникают, когда слово частично состоит из английских букв, а частично из кириллицы.

Прямо в тексте перенос можно указать с помощью команды \-, например: дель\-та-функ\-ция, \TeXно\-ло\-гия</tt>.

При наличии русского языка в \texttt{babel} вместо дефиса в сложном слове можно поставить команду "=, например, дельта"=функция. В этом случае переносы будут сделаны корректно без подсказки. Для часто упоминаемых слов можно задать шаблон переноса с помощью команды:

\hyphenation{образ-цы пе-ре-но-са дель-та=-функ-ция}

Обычно, образцы переноса лучше определять в заголовке документа. Следует понимать, что образцы автоматически не склоняются, поэтому надо предусмотреть всевозможные варианты окончаний.

С помощью команды \hyphenation можно запретить перенос слова в нежелательных местах, просто не указав место разрыва. В тексте запрет переноса можно оформить с помощью инструкции \mbox{нет переноса}.

Многоточие

Многоточие печатается с помощью команды \ldots. Если многоточие идёт после точки, то необходимо вставить неразрывный пробел ~.

Ударение

В русском языке длительность ударного гласного примерно в 1.5-2 раза длиннее безударного. Если ударение поставить не в том месте, то слово будет звучать совсем по другому.

В корне \textbf{зар-} "--- \textbf{зор-} под ударением пишется гласная в соответствии с произношением, без ударения "--- \textbf{а}.

\emph{Исключения:} зор\’янка, озар\’ять.
„Лапки” и «Ёлочки»

В пакете babel, кроме всего прочего, определены традиционные русские кавычки. Если в начале или в конце текста встречаются внутренние и внешние кавычки, то они должны различаться между собой рисунком.

Он сказал: <<А пойду-ка я и подпишусь на ,,Linux Format’’>>.

Структурная логика

LaTeX ориентирован на логическую разметку документа. Можно конечно «сказать», что данный кусок текста следует напечатать 20-м кеглем, выровнять по левому краю и сделать отступ после него в два интервала, но проще указать, что это заголовок раздела.

Титульный лист

Создания титульного листа это отдельная задача, в которой визуальная составляющая обычно превалирует над структурной. В этом случае следует воспользоваться окружением titlepage. При инициализации этого окружения создаётся чистая страница, которой присваивается номер один, а содержание этой страницы полностью определяется фантазией автора. Но, в любом случае, это следует делать после написания самого текста. Обычно достаточно стандартного заголовка:

\title{\LaTeX, Unix и русский стиль}
\author{Е.\,М.~Балдин\thanks{e-mail: E.M.Baldin@inp.nsk.su}}
\date{2006}
\maketitle

Команда \maketitle создаёт стандартный титульный заголовок, используя информацию о названии документа (\title), авторе (\author) и дате написания текста (\date). Команда \thanks правильным образом позволяет оформить подстрочное примечание на титульной странице. Если авторов более чем один, то их можно перечислять, разделяя командой \and — в этом случае список авторов печатается в виде таблицы.

В статьях (производные от класса article) вслед за заголовком следует обязательная аннотация, которая оформляется с помощью окружения abstract.

Секционирование

Часто бывает полезно сразу же за титульной страницей вывести оглавление с помощью команды \tableofcontents. Для этого в тексте должно присутствовать логическое разбиение на разделы.

\subsection{Секционирование}
\label{sec:base:sec}
Часто бывает \ldots

Команды секционирования образуют строгую иерархию. Самыми старшими по «званию» являются разделы \part{Часть} и \chapter{Глава}. Это большие куски текста, и, соответственно, их применение обосновано только в книгах, поэтому они не определены в классах производных от article и report, зато определены в классе book.

Далее по старшинству следуют:

\section{Раздел}
\label{ex:section}
\subsection{Подраздел}
\label{ex:subsection}
\subsubsection[<<Подподраздел>>]{Что-то более мелкое чем подраздел}
\label{ex:subsubsection}
\paragraph{Параграф}
\label{ex:paragraph}
\subparagraph{Подпараграф}
\label{ex:subparagraph}

Если воспользоваться необязательным параметром команды секционирования, его значение заместит основной заголовок при печати оглавления и создании колонтитулов.

Команды секционирования печатают заголовок необходимым шрифтом и нумеруют раздел. Если нет желания, чтобы название раздела попало в оглавление, и надобности в нумерации нет, то к команде секционирования следует добавить символ «*», например:

\section*{Приложение}

Перекрёстные ссылки

Одной из основных причин, по которой LaTeX вытеснил обычный TeX из текстовых редакторов TeXников, является механизм нумерации и создания ссылок.

Чтобы сослаться на раздел, в нём необходимо оставить метку \label{метка}. А затем можно использовать команды:

В разделе~\ref{ex:section} на странице~\pageref{ex:section} \ldots

Когда ссылки идут через метку, то номер раздела и номер страницы определяется LaTeX автоматически. Причём автоматическая нумерация свойственна не только командам секционирования — точно так же можно ссылаться на формулы, таблицы, картинки и листинги программ. Для этого необходимо оставить метку \label в соответствующем окружении.

Сложные документы

Всё можно хранить в одном файле — это ничему не противоречит. Более того, само понятие «файл» для пользователя не так уж и необходимо. Но уж если файл есть, то почему бы не разделить большой текст на несколько частично независимых кусков?

С помощью команды \input{имя файла} можно вставлять в документ другой tex-файл. LaTeX просто добавляет содержимое по месту команды, считывая файл либо до конца, либо до первой встретившейся инструкции \endinput. Совершенно не важно, в какой части документа встречается \input. Бывает довольно удобно вынести преамбулу в отдельный файл. В имени файла можно опустить расширение .tex.

Для включения текста можно применить другой способ:

\input{preheader}
\includeonly{
%  intro,
 base,
%  presentation
}
\begin{document}
%введение
\include{intro}
%базовые команды
\include{base}
%Презентация
\include{presentation}
\end{document}

Декларация \include позволяет включить только tex-файл (при написании имени расширение .tex опускается). В преамбуле с помощью команды \includeonly можно перечислить, какие части надо подключить при текущей сборке. При этом сохраняется правильная нумерация страниц и можно сослаться на не включённые в эту сборку разделы. Это довольно актуально в случае больших текстов в процессе их создания, так как значительно ускоряет компиляцию.

Примечания

  1. Можно воспользоваться пакетом underscore — в этом случае необходимость экранировать знак «_» в текстовом режиме отпадает.
  2. Это верно для стандартной кириллизации. Существуют варианты — например, русификация Шеня — где русские буквы также могут входить в имена команд.
  3. texconfig — это простенькое dialog-подобное консольное приложение. Некоторые настройки могут потребовать привилегий суперпользователя. После изменения настроек через texconfig автоматически пересоздаются необходимые форматные файлы. В противном случае может потребоваться сделать это вручную, например, с помощью инструкции вида texconfig init.
  4. Редактор можно определить с помощью переменной окружения $EDITOR. Если переменная не определена, то вызывается редактор vi. В случае отсутствия опыта работы с vi следует выйти из него с помощью последовательности :q и настроить переменную окружения.
  5. Расположение букв похоже на таковое в кодировке cp1251 — это чистая случайность
Персональные инструменты
купить
подписаться
Яндекс.Метрика