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

LXF110:LaTeX

Материал из Linuxformat
Версия от 07:17, 24 сентября 2009; Crazy Rebel (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск
Hardcore Linux Проверь себя на крутом проекте для продвинутых пользователей

Содержание

Latex: Верстаем документы

Джульетта Кемп считает настольные издательские системы типа WYSIWYG уделом слабаков – истинные хакеры используют код, пакеты и массу фигурных скобок.

OpenOffice.org и другие текстовые процессоры вполне достойно обрабатывают простой текст, но иногда хочется более изысканной верстки. LaTeX (произносится «лэй-тек», в русской разговорной речи – «латех», но никогда не «латекс») выглядит громоздко, но, поймав его ритм, вы осознаете, что он замечательно логичен и управляем и без лишней суеты дает вам превосходный контроль над страницами вашей бессмертной прозы.

LaTeX – это язык разметки и система подготовки документов, базирующаяся на языке набора TeX, который создал Дональд Кнут. TeX – язык очень низкого уровня, и его прямое использование не обрадует многих из нас (включая меня любимую); LaTeX предлагает более человеколюбивый способ общения с собой.

Основная идея TeX и LaTeX заключается в том, что автор документа должен сконцентрироваться на структуре своей работы и оставить представление дизайнерам, или, в нашем случае, дизайнеру(ам) процессора верстки. Вместо того, чтобы выбирать шрифты и оформление текста напрямую, вы просто указываете его тип (заголовок, список, диаграмма с подписью и т.п.), а LaTeX делает остальную работу за вас. Вникнув, вы поймете, что это невероятно мощная штука. Данная статья описывает основы, но вы можете сделать больше или меньше, если захотите – на LaTeX легко свалить всю тяжелую работу, но всегда остается возможность более тесного контроля за форматированием.

Часть 1 Основы LaTeX

Давайте рассмотрим простенький пример документа LaTeX.

  \documentclass{article}
  \usepackage[utf8]{inputenc}
  \usepackage[russian]{babel}
  \begin{document}
  \title{Простой документ Latex}
  \author{Джульетта Кемп}
  \date{Июль 2008}
    \maketitle
 
 
 LaTeX – это язык разметки и система подготовки документов, базирующаяся на языке разметки TeX, который создал Дональд Кнут.
 TeX – язык очень низкого уровня, и его прямое использование не
 обрадует многих из нас; LaTeX предлагает более человеколюбивый
 способ общения с собой.
 
 Это второй абзац.
     % Это строка комментариев, которая не будет сверстана
  \end{document}
   И эта строка тоже не будет сверстана.

Итак: первой идет секция преамбулы – часть перед строкой \begin{document}. В этом месте вы указываете тип документа (в нашем случае это article [статья]), автора и дату [при написании заголовка и автора на русском языке следует поместить эти поля в тело документа, а в преамбулу добавить команды работы с русским языком, – прим. пер.]. Преамбула – просто установочная информация, она не появляется на странице. Тело документа – то, что вы хотите вывести на печать/экран – располагается между строками \begin{document} и \end{document}. Команда \maketitle генерирует заголовок из содержимого команд \title, \author, и \date в преамбуле [для русского языка – в теле документа]. После этого вы помещаете основной текст.


Два перевода строки подряд обозначают новый абзац; в прочих случаях пробелы игнорируются, и вы можете отформатировать текст так, чтобы было легче ориентироваться в структуре документа. Все, что размещено вне секции document (как в коде примера), напечатано не будет. Данная возможность полезна для вставки личных примечаний – без риска, что они угодят в окончательную статью, если вы забудете их удалить... Комментарии начинаются с символа % и также игнорируются. Вы уже, наверное, заметили, что все команды LaTeX начинаются с \. Часть из них имеют аргументы, следующие дале в фигурных (для обязательных) или квадратных скобках (для опциональных параметров).

Есть два способа превратить эти команды в документ; оба требуют работы в терминале. Стандартная команда – latex file.tex – создает DVI-файл, file.dvi, который можно открыть в любом просмотрщике (сгодится Evince). Другой вариант – использовать pdflatex file.tex для генерации PDF-документа. Результат выполнения команды latex file.tex показан на экранном снимке.

Если вы получите сообщения об ошибках (они начинаются с !), нажмите X для возврата в командную строку. К несчастью, сообщения об ошибках LaTeX несколько туманны, но номер строки укажет вам место проблемы. Как правило, дело в пропущенных открывающих или закрывающих скобках (сообщение “Too many }’s” или “Runaway argument”), отсутствии команды \end{что_то} или ее ошибочном наборе (“Undefined control sequence”).

Вы также можете увидеть предупреждение “Overfull [or underfull] hbox” – оно означает, что данная строка не может быть сжата или разрежена, чтобы заполнить должным образом отведенное ей место. Пока не дойдет до окончательного варианта, не берите это в голову; и даже в финале сперва гляньте на страницу, прежде чем что-то исправлять. Если все и правда так плохо, в некоторые слова можно вставить ручные переносы.

Изменяем поля

Поля LaTeX по умолчанию очень велики. Дональд Кнут, делая их такими, упирал на то, что строки в книгах обычно достаточно коротки, чтобы их было удобнее читать. Вы, возможно, хотели бы уменьшить эти поля и сэкономить бумагу. Я обычно использую установки, которые выглядят так (все это располагается в преамбуле):

 \usepackage{setspace}
 \setlength{\parskip}{1ex}
 \setlength{\topmargin}{0in}
 \setlength{\oddsidemargin}{0in}
 \setlength{\evensidemargin}{0in}
 \setlength{\textheight}{9in}
 \setlength{\textwidth}{6.25in}
 \setlength{\headwidth}{6.25in}

Часть 2 Форматирование

Итак, это ваш первый простой документ. Но форматирования в нем явно мало; посмотрим, что еще можно сделать. Отредактируем наш исходный документ из первой части. Все обрывки кода, приведенные далее, нужно будет поместить, если не указано другое место, между тэгами \begin{document} и \end{document}.

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

 \section{Форматирование в LaTeX}
 Доступно множество видов форматирования.
 \subsection{Раздел}
 Таких как разделы.
 \subsubsection{Также под-под-раздел}

Эта вся доступная иерархия. Помните, что у нее есть предел.

Затем LaTeX автоматически создаст соответствующие стили заголовков для ваших разделов, как на экранном снимке. Если вы используете команды, указанные выше, разделы будут пронумерованы. Чтобы избежать этого, используйте синтаксис \section*{} ( \subsection*{} и т. д.) – лично я делаю так по умолчанию.


Помните, что при каждом редактировании исходного файла с кодом вы должны сохранить его и снова запустить latex file.tex перед перезагрузкой выходного файла в просмотрщике. Можно также создавать обычные списки (и упорядоченные, и неупорядоченные), как показано в следующем примере кода, и списки определений, немного отличающиеся по структуре. Они похожи на строки из словаря, где сперва идет термин, а потом описание. Сравните код с экранным снимком, чтобы понять, что происходит.

 \begin{itemize}
    \item Этот список
    \item Будет показан
    \item С маркерами
  \end{itemize}
  \begin{enumerate}
    \item Этот список
    \item Будет показан
    \item С цифрами
  \end{enumerate}
  \begin{description}
    \item[LaTeX] LaTeX-- это язык
    \item[Команда] Структура команд, доступных в LaTeX
    \item[Пакет] Пакеты позволяют вам использовать дополнительные команды
  \end{description}

Списки являются окружением – определяющие его команды имеют структуру \begin{что_то} . . . \end{что_то}. (Таким образом, сам документ – также окружение.) В основном это означает, что они влияют на более крупные части вашего документа, чем могут неокружающие команды. Внутри окружения LaTeX может обрабатывать другие команды, в том числе вложенные окружения [в терминологии TeX вместо термина «окружение» обычно используют понятие «командные скобки», – прим. пер.]

Есть и окружения для цитат: \begin{quote} ... \end{quote} для коротких и \begin{quotation} ... \end{quotation} для длинных (они лучше работают при наличии нескольких абзацев), и даже begin{verse} ... \end{verse} для стихов (они позволяют отделять строки внутри строф с помощью \\). Цитата всегда располагается с отступом от основного текста. Весь смысл LaTeX состоит в том, чтобы не заниматься сложным форматированием – пусть эту работу делает программа. Но если вдруг вы захотите напечатать что-то курсивом – попробуйте \emph{курсив}. Или жирным шрифтом – \textbf{а это жирным}. Или текстом в стиле Courier – \texttt{вот так}.

Абзацы

LaTeX воспринимает пустую строку как указание на разрыв абзаца, но это вовсе не означает, что она окажется между абзацами в вашем выходном файле – в книгах так не делают (вместо этого используют отступ), поэтому и LaTeX по умолчанию так не поступает. Однако данное поведение можно изменить: если, например, вы хотите получить между абзацами расстояние в 1 см, вставьте в вашу преамбулу (но не в окружение основного документа!) следующую конструкцию:

\setlength{\parskip}{1cm}

Вы также можете задать отступ абзаца [красную строку, – прим. пер.]

\setlength{\parindent}{1cm}

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

LaTeX может мерить длины в см, мм, дюймах, ex (высота типографской х), em (ширина типографской М), точках и bp (больших точках, которые чуть больше обычной точки). Я предпочитаю ex и em, когда собираюсь поиграть с размером шрифта (кеглем), потому что они будут изменяться вместе с ним.

Выкатить свои команды

Будучи фактически языком программирования (хотя я не уверена, что он полон по Тьюрингу!), LaTeX позволяет определять собственные макросы (команды) с помощью \newcommand. Такое может пригодиться, если у вас есть сложное имя или предложение, которое необходимо писать повторно. Например, можно создать такой макрос:

 \usepackage{xspace}
 \newcommand{\lf}{Linux Format}

в преамбуле. Затем, желая напечатать “Linux Format” в теле документа, набирайте \lf.

Пакет xspace здесь использован потому, что по умолчанию LaTeX воспринимает пробел после команды как символ ее конца, а не фактический отступ. Иначе, если вы наберете «Я читаю \lf регулярно», на выходе получится «Я читаю Linux Formatрегулярно» (то есть без пробела между двумя последними словами). Пакет xspace решает эту проблему – и должен быть включен в стандартную установку.

Макросы особенно полезны, если вы набираете сложную математику – можно ввести формулу только один раз, в определении макроса, и дать ей какое-нибудь легко запоминаемое имя. Можно также добавить в команду аргументы. Если же вы хотите переопределить существующие команды LaTeX, используйте \renewcommand.

Часть 3 Рисунки

Иногда одних слов недостаточно, вот почему LXF осчастливлен прекрасными иллюстрациями. LaTeX поддерживает добавление рисунков, хотя, к сожалению, процесс может быть немного нудным. В конечном итоге ваш исходный LaTeX-код станет похож вот на что:

 % Эта строка должна быть в преамбуле
 \usepackage{graphicx}
 % Эта строка в основном теле документа
 \begin{figure}
 \includegraphics{tree.eps}
 \caption{\label{tree}Это частично прекрасное дерево.}
 \end{figure}

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

Скажем пару слов о пакетах. Пакеты – это способ расширить основные команды LaTeX. Любители «изобретать велосипед» могут определить собственные команды и пакеты, а можно воспользоваться готовыми – люди уже создали множество таких, и большинство из них доступно через CTAN (Comprehensive Tex Archive Network). После того, как вы подключите пакет в преамбуле, его можно будет использовать из любого места документа. Это чрезвычайно просто.

OK, вернемся к добавлению нашей картинки. Окружение рисунка в теле документа велит LaTeX рассматривать все внутри него как единый блок, отдельно от остального окружающего текста. Процессор обработает размер вашего рисунка и поместит его как можно ближе к упоминанию о нем в тексте, но не нарушая общей верстки документа. Это значит, что нельзя самому решить, где именно поставить рисунок – вы должны положиться на LaTeX, который сделает это за вас. Расслабьтесь и согласитесь на утрату контроля…

Но уж если вы не можете расслабиться, или если ваш документ сильно загружен рисунками и LaTeX спотыкается, добавьте [tbh] к окружению иллюстрации, вот так:

\begin{figure}[tbh]

Данное предписание заставит LaTeX разместить рисунок вверху (t), внизу (b) страницы, а также «прямо здесь» (h) – т.е. там, где находится команда в исходном коде. Еще более радикальный способ заключается в использовании [tbh!], но в целом, вы должны быть довольны результатом, сгенерированным LaTeX автоматически.

Само изображение включается командой \includegraphics. Оно должно быть в формате EPS (Encapsulated PostScript) (и это один из источников некоторого занудства, о которых говорилось в начале этого раздела). GIMP способен генерировать файлы EPS из JPG или PNG файлов, но отличное качество не гарантируется; Inkscape, OpenOffice.org Draw или другой редактор векторной графики умеют это лучше. EPS-файлы обычно самодостаточны, и их гораздо легче вставить внутрь другого PS (или PDF) документа, потому они здесь и используются.

Больше чем слова

Наконец, надо дать рисунку подходящую подпись, а также включить в нее метку. Метка означает, что вы можете сослаться на рисунок в своем тексте, а LaTeX автоматически сгенерирует номер для рисунка (например, Рисунок 1.1) и правильно пронумерует ссылку на него. В исходном тексте документа ссылка будет выглядеть примерно так

    Изображение на рисунке \ref{tree} показывает, что это все весьма
полезно.

Заметим, что для получения правильных ссылок, команду latex file.tex нужно запустить дважды – при первом проходе вы лишь получите предупреждение о неопределенных ссылках.

Если вы когда-либо решали включить в документ еще одну иллюстрацию, график или фотографию, а затем следующие 10 минут с проклятиями выискивали и переделывали вручную всю сбившуюся нумерацию и ссылки, вы зауважаете эту степень автоматизации. Если вы этого раньше не делали, попробуйте, пожалуйста, сейчас – вы тут же осознаете достоинства LaTeX.

Часть 4 Типы документов

Все, что мы рассматривали до сих пор, было в контексте документа типа «статья», что мы и указали в самой первой строке нашего примера:

 \documentclass{article}

Прежде чем заняться другими типами документов, запомните, что аргументы \documentclass могут иметь различные опции. Например,

 \documentclass[a4paper,11pt]{article}

создаст ваш документ с использованием размера бумаги A4 и шрифта кегля 11 pt. Также доступны другие опции: twoside, twocolumn, draft (последняя помечает чрезмерно длинные строки «тильдой» на полях страницы и выводит вместо рисунков пустые квадраты), leqno/reqno (ставит номера формул слева либо справа) и landscape.

Вы также можете использовать различные типы документов. Основные из них таковы:

  • article (статья) Применим для большинства документов.
  • report (отчет) Позволяет иметь несколько глав.
  • book (книга) Может иметь главы, оглавление и прочие книжные штуки.
  • letter (письмо) Понятое дело, хорош для написания писем.

Все эти типы работают схожим образом, но имеют разные настройки по умолчанию. Например, в article новая страница для заголовка не создается, а в report и book – создается. (Хотя это можно изменить, поместив titlepage или notitlepage как опцию аргумента \documentclass. LaTeX действительно очень гибок!)

Давайте глянем, как используется класс letter.

  \documentclass{letter}
  \usepackage[utf8]{inputenc}
  \usepackage[russian]{babel}
  \signature{Джульетта Кемп}
  \address{Мой дом \\ Лондон }
  \begin{document}
  \begin{letter}{Миссис Смит \\ Ее дом \\ Лондон }
  \opening{Дорогая миссис Смит,}
  Я хотела бы знать, не будете ли вы заинтересованы в покупке
 продаваемого мной моста. Легкость в использовании, щадящая
 эксплуатация одним владельцем, все документы в порядке.
 Заранее благодарю за ответ.
   \closing{С уважением,}
   \ps{P.S. Прилагаю сведения о мосте. Как вы видите, он перекинут с
 одного берега реки на другой.
 }
   \encl{enclosure.txt}
   \end{letter}
   \end{document}

LaTeX автоматически сгенерирует адрес (и сегодняшнюю дату) на правильной стороне страницы и должным образом отформатирует письмо, а после закрытия добавит постскриптум и подпись (используя ваше имя, установленное в преамбуле). Вы можете поместить несколько писем (каждое из которых ограничено будет окружением \begin{letter}... \end{letter}) в единый документ, что оградит вас от необходимости постоянно указывать имя и адрес, когда вы создаете целую пачку сообщений (мост нынче сбагрить не так-то просто, если вы не знали…).

Сперва может показаться, что код LaTeX не слишком удобно писать, но вы к нему очень быстро привыкнете (особенно если настроите «горячие клавиши» в любимом редакторе). И, надеюсь, вы поймете, что ради гибкости и простоты получения макетов с его помощью стоило карабкаться по кривой обучения. LXF

Идем дальше

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

BibTeX (поставляемый по умолчанию со стандартной установкой LaTeX) – система работы с библиографией, очень полезная, если ваш труд использует цитаты. CTAN, Comprehensive Tex Archive Network (http://www.ctan.org), имеет огромный каталог TeX-пакетов, доступных для скачивания. Есть пакеты для работы со шрифтами, графикой, языками, индексами и другие разнообразные примочки, заслуживающие просмотра даже просто из любопытства.

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

Внимание!!!

Эта статья – всего лишь введение, но LXF публиковал настоящий учебник по LaTeX в номерах 83–94. На основч этой серии издана книга: Е.М. Балдин «Компьютерная типография LaTeX» (ISBN 978-5-9775-0230-6)

Персональные инструменты
купить
подписаться
Яндекс.Метрика