%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Contents: Typesetting Part of LaTeX2e Introduction % $Id: typeset.tex,v 1.3 1998/03/26 15:36:54 oetiker Exp oetiker $ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \chapter{Верстка текста} \begin{intro} После прочтения предыдущей главы вы должны представлять, из чего состоит документ \LaTeX{}. Вторая глава заполняет эту структуру всем необходимым для производства реальных материалов. \end{intro} \section{Структура текста и языка} \secby{Hanspeter Schmid}{hanspi@schmid-werren.ch} Основная цель написания текста~--- передать читателю идеи, информацию или знания. Читатель лучше поймет текст, если эти идеи структурированы, и намного лучше увидит и почувствует эту структуру, если типографская форма отражает логическую и смысловую структуру содержания. \LaTeX{} отличается от других систем верстки в том, что вам нужно лишь задавать ему логическую и смысловую структуру текста. Он затем выбирает типографскую форму текста в соответствии с <<правилами>>, заданными в файле класса документа и в различных стилевых файлах. Самый важный элемент текста в \LaTeX{} (и в наборе вообще)~--- абзац. Он называется <<элементом текста>>, потому что абзац является той типографской формой, в которую облекается одна связная мысль или идея. В следующих разделах вы узнаете, как вы можете вызвать перевод строки, например, при помощи \texttt{\bs\bs} и начало абзаца, например, оставив пустую строку. Поэтому, если начинается новая мысль, должен начинаться новый абзац, а, если нет,~--- используйте переводы строки. Если вы сомневаетесь в вашем разбиении на абзацы, подумайте о вашем тексте как о носителе идей и мыслей. Если вы начали новый абзац, продолжая изложение той же мысли,~--- убирайте начало нового абзаца. Если на протяжении абзаца начинается совершенно новая мысль~--- разбивайте его на два. Большинство людей совершенно не понимает важности разумного разбиения текста на абзацы. Многие не задумываются о значении разрыва абзацев или, особенно в \LaTeX{}, начинают абзацы, не зная этого. Последнюю ошибку особенно легко сделать, когда в текст включаются уравнения. Посмотрите на следующие примеры и разберитесь, почему иногда в них используются пустые строчки (разрывы параграфов), а иногда~--- нет. (Если вы еще не понимаете всех команд достаточно, чтобы понять примеры, прочтите, пожалуйста, эту и следующую главы и затем вернитесь к примерам снова.) % Example 1 \begin{example} \ldots когда Эйнштейн ввел свою формулу \begin{equation} e = m \cdot c^2 \; , \end{equation} которая является самой широко известной и самой мало понятной физической формулой. \end{example} % Example 2 \begin{example} \ldots откуда следует закон тока Кирхгофа: \begin{equation} \sum_{k=1}^{n} I_k = 0 \; . \end{equation} Закон напряжения Кирхгофа может быть выведен \ldots \end{example} % Example 3 \begin{example} \ldots который имеет несколько преимуществ. \begin{equation} I_D = I_F - I_R \end{equation} является ядром совершенно другой модели транзистора. \ldots \end{example} Следующая, более маленькая, единица текста~--- предложение. В английском тексте после точки, завершающей предложение, ставится б\'ольший пробел, чем после точки, стоящей после сокращения. \LaTeX{} старается определить, какую из них вы имели в виду. Если он ошибается, вы должны ему подсказать. Это объяснено далее в этой главе. Структура текста охватывает даже отдельные части предложений. Большинство языков использует очень сложные правила пунктуации, но во многих языках (включая немецкий и английский) вы расставите почти все запятые на места, просто помня, что они означают: короткую остановку в потоке изложения. Если вы не уверены в своих запятых, прочтите предложение вслух, останавливаясь на каждой запятой. Если где-то это прозвучит странно, уберите эту запятую, если вы почувствуете необходимость остановки в другом месте, вставьте запятую.\trfootnote{Все это мало применимо для русского, но я решил не выбрасывать этих абзацев из перевода, вдруг они кому-нибудь помогут писать по-английски.} Наконец, абзацы текста должны быть также логично структурированы на более высоком уровне, объединяясь в главы, разделы, и так далее. Однако, типографский эффект записи, например, \verb|\section{|\texttt{Структура текста и языка}\verb|}| обычно достаточно очевиден, чтобы было сразу ясно, как использовать эти высокоуровневые структуры. \section{Разбиение на строки и страницы} \subsection{Выровненные абзацы} Книги часто верстаются так, чтобы все строчки имели одинаковую длину. \LaTeX{} вставляет необходимые разрывы строк\index{разрывы строк} и пробелы между словами, оптимизируя форматирование абзаца как целого. При необходимости он также переносит слова, которые не помещаются на строке. От класса документа зависит то, как верстаются абзацы. Обычно каждый абзац начинается с красной строки, а дополнительного интервала между ними нет. Подробности смотрите в разделе~\ref{parsp}. В некоторых случаях может быть необходимо указать \LaTeX{} разорвать строку: \begin{lscommand} \ci{\bs} или \ci{newline} \end{lscommand} \noindent начинают новую строку, не начиная нового абзаца. \begin{lscommand} \ci{\bs*} \end{lscommand} \noindent запрещает, кроме того, разрыв страницы после вставленного разрыва строки. \begin{lscommand} \ci{newpage} \end{lscommand} \noindent начинает новую страницу. \begin{lscommand} \ci{linebreak}\verb|[|\emph{n}\verb|]|, \ci{nolinebreak}\verb|[|\emph{n}\verb|]|, \ci{pagebreak}\verb|[|\emph{n}\verb|]| и \ci{nopagebreak}\verb|[|\emph{n}\verb|]| \end{lscommand} \noindent разрывают строку, запрещают разрыв строки, разрывают страницу и запрещают разрыв страницы, соответственно. Необязательный аргумент \emph{n} позволяет автору влиять на их действие. Он может быть равен числу от нуля до четырех. Устанавливая \emph{n} в значение, меньшее~4, вы оставляете \LaTeX{} возможность игнорировать вашу команду, если результат будет очень плох. Не путайте эти команды <<разрыва (break)>> с командами <<начала (new)>>. Даже если вы зададите команду <<разрыва>>, \LaTeX{} попытается выровнять правую границу страницы и общую высоту страницы, как описано в следующей секции. Если вы действительно хотите начать <<новую строчку>>, используйте соответствующую команду. \LaTeX{} всегда пытается производить наилучшее из возможных разбиений строк. Если он не может найти способ разбить строки в соответствии со своими стандартами, он позволяет одной строке выступать из абзаца вправо. \LaTeX{} затем выводит диагностику (<<\wi{overfull hbox}>>) во время обработки входного файла. Чаще всего это случается, когда \LaTeX{} не может найти место для переноса слова.\footnote{Хотя \LaTeX{} и дает вам предупреждение, такие строки не всегда легко найти. Если вы в команде \ci{documentclass} используете опцию \texttt{draft}, такие строки будут отмечены толстой черной линией на правых полях.} Давая команду \ci{sloppy}, вы можете сказать, чтобы \LaTeX{} несколько ослабил свои стандарты. Тогда он сможет предотвратить такие слишком длинные строки, увеличивая интервалы между словами~--- даже если конечный вывод будет не оптимален. В этом случае пользователь получит предупреждение (<<\wi{underfull hbox}>>). В большинстве случаев результат выглядит не очень хорошо. Команда \ci{fussy} действует в обратную сторону. \subsection{Переносы} \label{hyph} \LaTeX{} переносит слова, когда это необходимо. Если алгоритм переносов не находит правильных точек переноса, вы можете исправить положение, сказав \TeX{} об исключении при помощи следующих команд. Команда \begin{lscommand} \ci{hyphenation}\verb|{|\emph{список слов}\verb|}| \end{lscommand} \noindent вызывает перенос слов, перечисленных в ее аргументе, только в местах, отмеченных <<\verb|-|>>. Эта команда должна даваться в преамбуле входного файла, и должна содержать только слова, состоящие из обычных букв. Правила переноса запоминаются для языка, активного в момент обратки команды \ci{hyphenation}. Это значит, что, если вы поместите ее в преамбулу документа, она будет влиять на английские переносы. Если вы поместите ее после команды \verb|\begin{document}|, используя при этом поддержку национальных языков, например, \pai{babel}, то переносы будут запомнены для языка, активизированного при помощи \pai{babel}. Следующий пример разрешает переносы в слове <>, так же, как и в слове <>, и запрещает переносы в словах <>, <> и <>. В аргументе не допускаются специальные символы. Пример: \begin{code} \verb|\hyphenation{FORTRAN Hy-phen-a-tion}| \end{code} Команда \ci{-} вставляет в слово выборочный перенос. Он также становится единственной разрешенной точкой переноса в этом слове. Эта команда в особенности полезна для слов, содержащих специальные символы (например, символы с акцентами), потому что \LaTeX{} не переносит такие слова автоматически. %\footnote{Unless you are using the new %\wi{DC fonts}.} \begin{example} I think this is: su\-per\-cal\-% i\-frag\-i\-lis\-tic\-ex\-pi\-% al\-i\-do\-cious \end{example} Несколько слов можно удержать вместе на одной строке командой \begin{lscommand} \ci{mbox}\verb|{|\emph{текст}\verb|}| \end{lscommand} \noindent Она будет в любом случае сохранять свой аргумент вместе. \begin{example} Номер моего телефона скоро сменится. Он будет \mbox{0116 291 2319}. Параметр \mbox{\emph{имя файла}} должен содержать имя файла. \end{example} Команда~\ci{fbox} аналогична команде \ci{mbox}, но вокруг ее содержимого будет нарисована видимая рамка. \section{Специальные строки} В некоторых предыдущих примерах вы уже встречали простые команды \LaTeX{} для набора специальных текстовых строк: \vspace{2ex} \noindent \begin{tabular}{@{}lll@{}} Команда & Пример & Описание\\ \hline \ci{today} & \today & Текущая дата на текущем языке\\ \ci{TeX} & \TeX & Название вашей любимой системы верстки\\ \ci{LaTeX} & \LaTeX & Название \LaTeX \\ \ci{LaTeXe} & \LaTeXe & Текущая инкарнация \LaTeX\\ \end{tabular} \section{Специальные буквы и символы} \subsection{Знаки кавычек} Для набора кавычек\index{кавычки} вы \emph{не должны} использовать знак~\verb|"|\index{""@\texttt{""}}, как на пишущей машинке. При верстке существуют специальные знаки открывающей и закрывающей кавычек. В \LaTeX{} используйте два знака~\verb|`| в качестве открывающей кавычки и два знака~\verb|'| в качестве закрывающей.\trfootnote{При верстке обычно требуются две пары кавычек, на случай <<\glqq кавычек\grqq{} в кавычках>>. При верстке на русском языке обычно вместо ``таких'' и `таких' кавычек используют <<эти>> и \glqq эти\grqq. Какими командами они задаются~--- зависит от используемой русификации, но обычно это \ci{flqq}, \ci{frqq} (вместо этой пары часто используют лигатуры \texttt{<{}<} и \texttt{>{}>}\index{<<}\index{>>}) и \ci{glqq}, \ci{grqq}.} \begin{example} ``Пожалуйста, нажмите клавишу `x' '' \end{example} \subsection{Тире и дефисы} \LaTeX{} знает про четыре вида \wi{тире}. Три из них вы можете получить различным числом последовательных знаков~\verb|-|. Четвертое на самом деле не тире вовсе, а математический знак минус: \index{-} \index{--} \index{---} \index{-@$-$} \index{математический!минус} \begin{example} мальчик-с-пальчик, X-лучи\\ страницы 13--67\\ да~--- или нет?\\ $0$, $1$ и $-1$ \end{example} Эти тире называются так: \texttt{-} \wi{дефис}, \texttt{-{}-} \wi{короткое тире}, \texttt{-{}-{}-} \wi{длинное тире} и \verb|$-$| \wi{знак минуса}.\index{тире!короткое}\index{тире!длинное} \subsection{Тильда ($\sim$)} \index{www}\index{URL}\index{тильда} Тильда часто встречается в WWW-адресах. Для генерации ее в \LaTeX{} можно использоват \verb|\~|, но результат (\~) будет не тем, что вам нужен. Взамен попробуйте вот что: \begin{example} http://www.rich.edu/\~{}bush \\ http://www.clever.edu/$\sim$demo \end{example} \subsection{Знак градуса ($\circ$)} Как напечатать \wi{знак градуса} в \LaTeX{}? \begin{example} Температура уже $-30\,^{\circ}\mathrm{C}$. Скоро наступит сверхпроводимость. \end{example} %\subsection{Символ Евро \texorpdfstring{(\EUR)}{}} \subsection{Символ Евро \texorpdfstring{(\texteuro)}{}} В наше время, говоря о валюте, вам понадобится символ евровалюты. Многие современные шрифты содержат символ Евро. После загрузки пакета \pai{textcomp} в преамбуле документа \begin{lscommand} \ci{usepackage}\verb|{textcomp}| \end{lscommand} \noindent вы можете пользоваться командой \begin{lscommand} \ci{texteuro} \end{lscommand} \noindent для доступа к этому символу. Если ваш шрифт не имеет собственного символа Евро, или вам не нравится, как он выглядит, у вас есть еще два выхода. Первый~--- использование пакета \pai{eurosym}. Он предоставляет официальный символ Евро: \begin{lscommand} \ci{usepackage}\verb|[|\emph{official}\verb|]{eurosym}| \end{lscommand} Если вы предпочитаете официальному символ Евро, соответствующий вашему шрифту, вместо опции \texttt{official} используйте опцию \texttt{gen}. Пакет \pai{marvosym} включает множество разных символов, в том числе и Евро, доступный таким образом: \begin{lscommand} \ci{EUR} \end{lscommand} \begin{example} Символы \texteuro{}, \euro{} и \EUR{} все выглядят по-разному. \end{example} \subsection{Многоточие ( \ldots )} На пишущей машинке \wi{точка} или \wi{запятая} занимают то же пространство, что и любая другая буква. Напечатанные в книге, эти символы занимают очень мало места и верстаются очень близко к предшествующей букве. Поэтому вы не можете ввести \wi{многоточие} просто напечатав три точки, так как расстояние между ними будет неправильным. Кроме того, для многоточия есть специальная команда, называющаяся \begin{lscommand} \ci{ldots} \end{lscommand} \index{...@\ldots} \begin{example} Не так ... а вот так:\\ Нью-Йорк, Токио, Будапешт, \ldots \end{example} \subsection{Лигатуры} Некоторые комбинации букв верстаются не просто набором разных букв друг за другом, а с использованием специальных символов.\trfootnote{Лигатуры широко используются при верстке текстов на английском языке. Насколько мне известно, при верстке на русском языке лигатур не используется. Однако, механизм лигатур \TeX{} используется для генерации, например, кавычек и тире.} \begin{code} {\large ff fi fl ffi\ldots}\quad вместо\quad {\large f{}f f{}i f{}l f{}f{}i \ldots} \end{code} Эти так называемые \index{лигатура}лигатуры могут быть запрещены вставкой \ci{mbox}\verb|{}| между двумя соответствующими буквами. Это может быть необходимо для слов, образованных из двух частей. \begin{example} \Large Не ``shelfful''\\ а ``shelf\mbox{}ful'' \end{example} \subsection{Акценты и специальные символы} \LaTeX{} поддерживает использование \index{акценты}акцентов и специальных символов\index{специальные символы} из многих языков. Таблица~\ref{accents} показывает всевозможные акценты в применении к букве о. Понятно, что ее месте могут быть и другие буквы. Чтобы поместить знак акцента над буквами i или j, точки над ними должны быть удалены. Это достигается набором \verb|\i| и \verb|\j|. \begin{example} H\^otel, na\"\i ve, \'el\`eve,\\ sm\o rrebr\o d, !`Se\~norita!,\\ Sch\"onbrunner Schlo\ss{} Stra\ss e \end{example} \begin{table}[!hbp] \caption{Акценты и специальные символы} \label{accents} \begin{lined}{10cm} \begin{tabular}{*4{cl}} \A{\`o} & \A{\'o} & \A{\^o} & \A{\~o} \\ \A{\=o} & \A{\.o} & \A{\"o} & \B{\c}{c}\\[6pt] \B{\u}{o} & \B{\v}{o} & \B{\H}{o} & \B{\c}{o} \\ \B{\d}{o} & \B{\b}{o} & \B{\t}{oo} \\[6pt] \A{\oe} & \A{\OE} & \A{\ae} & \A{\AE} \\ \A{\aa} & \A{\AA} \\[6pt] \A{\o} & \A{\O} & \A{\l} & \A{\L} \\ \A{\i} & \cm{\j} & \verb|\j| & \cm{!`} & \verb|!`| & \cm{?`} & \verb|?`| \end{tabular} \index{i и j без точек@\cm{\i} и \cm{\j} без точек}\index{буквы!европейские} \index{ae@\ae}\index{акценты!umlaut}\index{акценты!grave}\index{акценты!acute} \index{oe@\oe} \bigskip \end{lined} \end{table} \section{Поддержка иностранных языков} \index{другие языки}Если вам нужно писать документы на отличных от английского языках, то \LaTeX{} должен быть соответствующим образом сконфигурирован в двух пунктах: \begin{enumerate} \item Все генерируемые автоматически текстовые строки\footnote{Содержание, Список иллюстраций, Библиография \ldots} должны быть переведены на другой язык. Для многих языков эти изменения достигаются использованием пакета \pai{babel} (автор Johannes Braams). \item \LaTeX{} должен знать \wi{правила переноса} для нового языка. Подключение правил переноса к \LaTeX{} более сложно. Оно включает перестроение форматного файла с другими разрешенными образцами переноса. Ваш \guide{} должен содержать больше информации об этом. \item Специфичные для языка типографские правила. Скажем, для французского перед каждым символом двоеточия (:) должен стоять пробел. \end{enumerate} Если ваша система уже соответствующим образом сконфигурирована, вы можете активизировать пакет \pai{babel} добавлением команды \begin{lscommand} \ci{usepackage}\verb|[|\emph{язык}\verb|]{babel}| \end{lscommand} \noindent после команды \verb|\documentclass|. Какие \emph{язык}и поддерживает ваша система, также может быть указано в \guide{}. \texttt{Babel} автоматически активизирует правильные правила переноса для выбираемых вами языков. Если форматный файл вашего \LaTeX{} не поддерживает переносов для выбранного языка, \texttt{babel} будет работать, но запретит переносы, что негативно скажется на внешнем виде документа. Для некоторых языков \pai{babel} вводит новые команды, упрощающие ввод специальных символов. Например, \wi{немецкий язык} содержит множество диакритических знаков (\"a\"o\"u). С использованием \pai{babel} вы можете вводить \"o, печатая \verb|"o| вместо~\verb|\"o|. Если вы вызываете \pai{babel}, указывая несколько языков, \begin{lscommand} \ci{usepackage}\verb|[|\emph{язык1}\verb|,|\emph{язык2}\verb|]{babel}| \end{lscommand} \noindent то для выбора текущего языка используйте команду \begin{lscommand} \ci{selectlanguage}\verb|{|\emph{язык1}\verb|}| \end{lscommand} %Input Encoding \newcommand{\ieih}[1]{% \index{кодировка!входная!#1@\texttt{#1}}% \index{входная кодировка!#1@\texttt{#1}}% \index{#1@\texttt{#1}}} \newcommand{\iei}[1]{% \ieih{#1}\texttt{#1}} %Font Encoding \newcommand{\feih}[1]{% \index{кодировка!шрифта!#1@\texttt{#1}}% \index{кодировка шрифта!#1@\texttt{#1}}% \index{#1@\texttt{#1}}} \newcommand{\fei}[1]{% \feih{#1}\texttt{#1}} Большинство современных компьютерных систем позволяет вам вводить специальные символы прямо с клавиатуры. \LaTeX{} может обрабатывать такие символы при помощи пакета \pai{inputenc}: \begin{lscommand} \ci{usepackage}\verb|[|\emph{кодировка}\verb|]{inputenc}| \end{lscommand} При использовании этого пакета вы должны понимать, что другие могут неправильно видеть ваши входные файлы на своем компьютере из-за использования другой кодировки. Например, немецкий акцент \"a в системе IBM~OS/2 кодируется как 132, а на некоторых Unix системах, использующих кодировку ISO-LATIN~1,~--- как 228. Поэтому используйте эту возможность с осторожностью. В зависимости от вашей системы, могут использоваться, например, следующие кодировки: \begin{center} \begin{tabular}{l | r} Операционная система & Кодировка\\ \hline Mac & \texttt{applemac} \\ Unix & \texttt{latin1} \\ Windows & \texttt{ansinew} \\ DOS, OS/2 & \texttt{cp850} \end{tabular} \end{center} Если вы пишете многоязычный документ с конфликтующими входными кодировками, можно переключиться на Unicode при помощи пакета \pai{ucs}: \begin{lscommand} \ci{usepackage}\verb|{ucs}|\\ \ci{usepackage}\verb|[|\iei{utf8}\verb|]{inputenc}| \end{lscommand} Это позволит вам генерировать файлы \LaTeX{} в \iei{utf8}, многобайтовой кодировке, где каждый символ кодируют от одного до четырех байт. Иной случай~--- с кодировкой шрифта. Она определяет, в какой позиции в пределах шрифта \TeX{} находится каждая буква. Множество входных кодировок можно отобразить на одну кодировку шрифта, что уменьшает число необходимых наборов шрифтов. Кодировки шрифтов обрабатываются пакетом \pai{fontent}:\label{fontenc} \begin{lscommand} \ci{usepackage}\verb|[|\emph{кодировка}\verb|]{fontenc}| \index{кодировка шрифта} \end{lscommand} \noindent где \emph{кодировка}~--- требуемая кодировка шрифта. Можно одновременно загружать несколько кодировок. Кодировка \LaTeX{} по умолчанию~--- \fei{OT1}, кодировка оригинального шрифта \TeX{} Computer Modern. Она содержит только 128 символов 7-битного набора символов ASCII. Когда требуются акцентированные символы, \TeX{} создает их, комбинируя нормальный символ с акцентом. Несмотря на то, что результирующая верстка выглядит прекрасно, этот подход не дает автоматическим переносам работать внутри слов, использующих акцентированные символы. Кроме того, некоторые знаки латинских языков не получается создать таким образом, не говоря уже о буквах не-латинских алфавитов, скажем, греческого или кириллицы. Для борьбы с этими ограничениями было создано несколько 8-битных наборов шрифтов, похожих на CM. \emph{Extended Cork} (EC) шрифты в кодировке \fei{T1} содержат специальные символы для большинства акцентированных букв, используемых в европейских языках, основанных на латинице. Набор шрифтов LH содержит символы языков, основанных на кириллице. Ввиду большого числа кириллических знаков, они организованы в четыре кодировки шрифтов: \fei{T2A}, \fei{T2B}, \fei{T2C} и \fei{X2}.\footnote{Перечень языков, поддерживаемых каждой из этих кодировок можно найти в \cite{cyrguide}.} Пакет CB содержит шрифты в кодировке \fei{LGR} для набора греческих текстов. Используя эти шрифты, вы можете улучшить или вообще сделать возможными переносы в не-английских документах. Еще одно преимущество использования новых CM-подобных шрифтов~--- в том, что они предоставляют шрифты семейства CM во всех яркостях, формах и оптически масштабированных размерах шрифта. \subsection{Поддержка португальского} \secby{Demerson Andre Polli}{polli@linux.ime.usp.br} Для включения переносов и смены автоматически генерируемого текста на португальский\index{Португальский}, пользуйтесь командой \begin{lscommand} \verb|\usepackage[portuguese]{babel}| \end{lscommand} Или, для работы с бразильскими текстами, ставьте в качестве языка \texttt{brazilian}\index{Бразильский}. Поскольку в португальском множество акцентированных букв, вам может быть удобно использовать \begin{lscommand} \verb|\usepackage[latin1]{inputenc}| \end{lscommand} для того, чтобы корректно их вводить. Для работы переносов задайте \begin{lscommand} \verb|\usepackage[T1]{fontenc}| \end{lscommand} Преамбулу, необходимую для работы с португальским языком, смотрите в таблице~\ref{portuguese}. Заметьте, что мы здесь используем кодировку latin1, так что эта преамбула не будет работать на Mac или в DOS. Просто подставьте кодировку, правильную для вашей системы. \begin{table}[btp] \caption{Преамбула для португальских документов} \label{portuguese} \begin{lined}{5cm} \begin{verbatim} \usepackage[portugese]{babel} \usepackage[latin1]{inputenc} \usepackage[T1]{fontenc} \end{verbatim} \bigskip \end{lined} \end{table} \subsection{Поддержка французского} \secby{Daniel Flipo}{daniel.flipo@univ-lille1.fr} Несколько советов для создания в \LaTeX{} французских\index{Французский} документов. Загрузите поддержку французского языка командой \begin{lscommand} \verb|\usepackage[frenchb]{babel}| \end{lscommand} Заметьте, что по историческим причинам название опции \pai{babel} для французского языка~--- \emph{frenchb} или \emph{francais}, а не \emph{french}. Это включит французские переносы, если ваша \LaTeX{}-система правильно настроена. Кроме того, весь автоматический текст будет тоже французским: \verb+\chapter+ печатает Chapitre, \verb+\today+ печатает текущую дату по-французски, и так далее. Становится доступным набор новых команд, позволяющих легче набирать французские тексты. Для пояснения смотрите таблицу~\ref{cmd-french}. \begin{table}[!htbp] \caption{Специальные команды для французского языка} \label{cmd-french} \begin{lined}{9cm} %%\selectlanguage{french} \begin{tabular}{ll} \verb+\og guillemets \fg{}+ \quad &\og guillemets \fg \\[1ex] \verb+M\up{me}, D\up{r}+ \quad &M\up{me}, D\up{r} \\[1ex] \verb+1\ier{}, 1\iere{}, 1\ieres{}+ \quad &1\ier{}, 1\iere{}, 1\ieres{}\\[1ex] \verb+2\ieme{} 4\iemes{}+ \quad &2\ieme{} 4\iemes{}\\[1ex] \verb+\No 1, \no 2+ \quad &\No 1, \no 2 \\[1ex] \verb+20~\degres C, 45\degres+ \quad &20~\degres C, 45\degres \\[1ex] \verb+\bsc{M. Durand}+ \quad &\bsc{M.~Durand} \\[1ex] \verb+\nombre{1234,56789}+ \quad &\nombre{1234,56789} \end{tabular} %%\selectlanguage{english} \bigskip \end{lined} \end{table} Вы также заметите изменение вида списков. Чтобы полностью изучить изменения, вносимые \pai{babel} при работе с французским, прогоните через \LaTeX{} файл \texttt{frenchb.dtx} и прочтите полученный \texttt{frenchb.dvi}. \subsection{Поддержка немецкого} Несколько советов тем, кому нужно создавать в \LaTeX{} немецкие\index{Немецкий} документы. Загрузите поддержку немецкого языка командой \begin{lscommand} \verb|\usepackage[german]{babel}| \end{lscommand} Это включит немецкие переносы, если ваша \LaTeX{}-система правильно настроена. Кроме того, автоматически генерируемый текст станет немецким, например, ``Chapter'' станет ``Kapitel''. Включается набор новых команд, ускоряющих набор немецкого текста, даже если не используется пакет \pai{inputenc}. Для пояснения смотрите таблицу~\ref{german}. С использованием inputenc все это становится не нужным, но ваш текст сможет использовать только одну кодировку. \begin{table}[!htbp] \caption{Специальные символы немецкого языка} \label{german} \begin{lined}{8cm} %%\selectlanguage{german} \begin{tabular}{*2{ll}} \verb|"a| & "a \hspace*{1ex} & \verb|"s| & "s \\[1ex] \verb|"`| & "` & \verb|"'| & "' \\[1ex] \verb|"<| or \ci{flqq} & "< & \verb|">| or \ci{frqq} & "> \\[1ex] \ci{flq} & \flq & \ci{frq} & \frq \\[1ex] \ci{dq} & " \\ \end{tabular} %%\selectlanguage{english} \bigskip \end{lined} \end{table} В немецких книгах часто встречаются французские знаки кавычек (\flqq{}guillemets\frqq). Немецкие типографы, однако, используют их по-другому. Цитата в немецкой книге обычно выглядит \frqq{}так\flqq. В немецкоговорящей части Швейцарии типографы используют \flqq{}guillemets\frqq так же, как и во Франции. Большая проблема связана с командами типа \verb+\flq+: в шрифтах OT1 (а они включаются по умолчанию) эти кавычки выглядят как математический символ ``$\ll$'', от чего у типографов будет истерика. Шрифты в кодировке T1, с другой стороны, имеют требуемые символы. Так что, если вам нужны такие кавычки, убедитесь, что включили кодировку T1 (\verb|\usepackage[T1]{fontenc}|). \subsection[Поддержка корейского]{Поддержка корейского\footnotemark}\label{support_korean}% \footnotetext{% Рассматриваются несколько моментов, касающихся корейских пользователей \LaTeX{}. Этот раздел написал Karnes Kim от имени корейской команды переводчиков lshort. Раздел переведен на английский Shun Jungshik и сокращен Tobi Oetiker.} Используя \LaTeX{} для набора корейского языка\index{Корейский}, нам нужно разрешить три проблемы: \begin{enumerate} \item Нужно научиться редактировать входные файлы на корейском. Они должны быть в формате плоского текста, но, поскольку символы корейского языка не входят в набор US-ASCII, они будут странно выглядеть в стандартных редакторах ASCII. Две самых популярных кодировки корейских текстовых файлов~--- EUK-KR и ее совместимое расширение, используемое в корейской системе MS Windows, CP949/Windows-949/UHC. Эти кодировки включают ASCII как подмножество, аналогично кодировкам ISO-8859-\textit{x}, EUC-JP, Shift\_JIS и Big5. С другой стороны, слоги Hangul, знаки Hanjas (используемые в Корее китайские символы), Hangul Jamos, хиракана, катакана, греческие, кириллица и прочие символы из KS~X~1001 представляются двумя байтами. Первый байт имеет установленным старший бит. До середины 90-х годов установка корейского окружения в нелокализованной ОС требовала значительных усилий и времени. Вы можете просмотреть сильно устаревший \url{http://jshin.net/faq}, чтобы получить представление об этиъ усилиях. В наше время все три основные операционные системы (Mac OS, Unix, Windows) включают вполне приличную многоязыковую поддержку и возможности интернационализации, так что редактирование корейских текстов уже не является проблемой, даже в нелокализованной системе. \item \TeX{} и \LaTeX{} были изначально созданы для письменностей, имеющих в алфавите не более 256 символов. Для того, чтобы они работали с языками, где гораздо больше символов, например, корейским\footnote{Корейский алфавит Hangul~--- буквенная письменность с 14 основными согласными и 10 основными гласными (Jamos). В отличие от латиницы или кириллицы, отдельные символы должны быть размещены в прямоугольных блоках примерно такого же размера, как и китайские. Каждый блок представляет слог. Из этого небольшого количества гласных и согласных можно сформировать бесконечное число слогов. Однако, современные орфографические стандарты (как в Южной Корее, так и в Северной) налагают некоторые ограничения на формирование этих блоков. Следовательно, существует конечное число орфографически правильных слогов. Корейские кодировки символов определяют индивидуальные коды для каждого из этих слогов (KS~X~1001:1998 и KS~X~1002:1992). Таким образом, Hangul, будучи буквенным, трактуется, тем не менее, так же, как письменности Китая и Японии, с тысячами идеографических знаков. Стандарт ISO~10646/Unicode предлагает оба способа представления Hangul, использумых в \emph{современной} Корее, кодируя, в дополнение ко всем орфографически разрешенным слогам Hangul (\url{http://www.unicode.org/charts/PDF/UAC00.pdf}), еще и Conjoining Hangul Jamos (алфавит: \url{http://www.unicode.org/charts/PDF/U1100.pdf}). Одна из самых устрашающих задач в наборе корейского текста в \LaTeX{} и аналогичных системых~--- поддержка средневековых корейских (а, возможно, и будущих корейских) слогов, которые можно представить только комбинацией знаков Jamos в Unicode. Есть надежда, что будущие варианты \TeX, например, $\Omega$ и $\Lambda$ в конце концов предоставят решение для этой задачи, так что корейские лингвисты и историки смогут сбежать из MS Word, где уже есть довольно неплохая поддержка средневекового корейского.} и китайским, был разработан механизм подшрифтов. Он делит единый шрифт CJK с тысячами или десятками тысяч знаков на набор подшрифтов с 256 знаками в каждом. Для корейского языка есть три широко используемых пакета: \wi{H\LaTeX} (автор Un~Koanghi), \wi{h\LaTeX{}p} (автор Cha~Jaechoon) и \wi{пакет CJK} (автор Werner~Lemberg).\footnote{% Их можно получить по адресам \CTANref|language/korean/HLaTeX/|\\ \CTANref|language/korean/CJK/| и \texttt{http://knot.kaist.ac.kr/htex/}} H\LaTeX{} и h\LaTeX{}p специфичны для корейского языка и предлагают корейскую локализацию, помимо шрифтовой поддержки. Оба они обрабатывают входные файлы в кодировке EUK-KR. H\LaTeX{} может обрабатывать файлы в кодировках CP949/Windows-949/UHC и UTF-8, если используется вместе с $\Lambda$, $\Omega$. Пакет CJK не специфичен для корейского языка. Он обрабатывает входные файлы в UTF-8, а также в различных кодировках CJK, включая EUK-KR и CP949/Windows-949/UHC. Его можно использовать для набора документов с многоязычным содержанием (особенно китайским, японским и корейским). Пакет CJK не содержит корейской локализации, аналогичной той, что есть в H\LaTeX{}, и также не содержит такого множества специальных корейских шрифтов. \item Конечная цель использования программ набора, включая \TeX{},~--- получить документы, сверстанные <<эстетически>> удовлетворительно. Можно утверждать, что наиболее важный элемент верстки~--- это набор хорошо спроектированных шрифтов. Дистрибутив H\LaTeX{} включает \index{корейский шрифт!UHC шрифт}UHC \PSi{} шрифты десяти различных семейств и TrueType шрифты Munhwabu\footnote{Министерство культуры Кореи} пяти различных семейств. Пакет CJK работает с набором шрифтов, использовавшихся в старых версиях H\LaTeX{}, а также может использовать TrueType шрифт cyberbit компании Bitstream. \end{enumerate} Для загрузки пакета H\LaTeX{} поместите в преамбуле следующее: \begin{lscommand} \verb+\usepackage{hangul}+ \end{lscommand} Эта команда включает корейскую локализацию. Заголовки глав, разделов, подразделов, оглавления и перечня иллюстраций будут переведены на корейский, и форматирование документа изменится так, чтобы следовать принятым в Корее правилам. Пакет также предоставляет автоматический <<выбор частиц>>. В корейском языке существуют пары постфиксных частиц, грамматически эквивалентных, но отличных по форме. Какая частица из пары корректна, зависит от того, заканчивается ли предыдущий слог на гласную или согласную. (На самом деле, правило чуть сложнее, но общая идея такова.) Корейцам не составляет никакого труда выбирать правильную частицу, однако невозможно заранее определить, какую частицу использовать в ссылках и других местах с автоматически генерируемым текстом, меняющимся при редактировании документа. Вставлять при каждом изменении текста правильную частицу везде вручную~--- решение совершенно ужасное. H\LaTeX{} автоматизирует этот процесс. Если вам не нужна корейская локализация, а вы просто хотите набрать корейский текст, поместите взамен в преамбулу следующее: \begin{lscommand} \verb+\usepackage{hfont}+ \end{lscommand} Полная и подробная информация о верстке корейского текста при помощи H\LaTeX{} приведена в \emph{Руководстве по H\LaTeX}. Смотрите веб-сайт группы корейских пользователей \TeX{} (KTUG) по адресу \url{http://www.ktug.or.kr/}. Существует также корейский перевод настоящего документа. \subsection{Поддержка кириллицы} \secby{Maksym Polyakov}{polyama@myrealbox.com} Пакет \pai{babel}, начиная с версии~3.7, включает поддержку кодировок~\fei{T2*} и поддержку верстки болгарских, русских и украинских текстов с использованием кириллических символов.\index{Болгарский}\index{Русский}\index{Украинский} Поддержка кириллицы основана на стандартных механизмах \LaTeX{}: пакетах \pai{fontenc} и \pai{inputenc}. Но, если вам нужно использовать кириллицу в математическом режиме, загрузите до пакета \pai{fontenc} пакет \pai{mathtext}:\footnote{Если вы пользуетесь пакетами \AmS-\LaTeX{}, загружайте их также до пакетов \pai{fontenc} и \pai{babel}.} \begin{lscommand} \verb+\usepackage{mathtext}+\\ \verb+\usepackage[+\fei{T1}\verb+,+\fei{T2A}\verb+]{fontenc}+\\ \verb+\usepackage[+\iei{koi8-r}\verb+]{inputenc}+\\ \verb+\usepackage[english,bulgarian,russian,ukranian]{babel}+ \end{lscommand} Вообще говоря, \pai{babel} автоматически выберет кодировку шрифтов по умолчанию. Для трех перечисленных языков это будет \fei{T2A}. Однако, документы не ограничены только одной кодировкой шрифта. Для многоязыковых документов, использующих языки, базирующиеся на кириллице и латинице, имеет смысл явно подключить латинскую кодировку шрифтов. \pai{babel} позаботится о переключении на правильную кодировку, когда вы меняете язык в документе. В дополнение ко включению переносов, трансляции автоматически генерируемых строк и активации некоторых специфичных для языка типографских правил (например, \ci{frenchspacing}), \pai{babel} предоставляет несколько команд для верстки в соответствии со стандартами болгарского, русского или украинского языков. Для всех трех языков предоставляется специфическая пунктуация: кириллическое тире для теста (оно слегка \'уже латинского тире и окружено крошечными пробелами), тире для прямой речи, кавычки и команды управления переносами. Смотрите таблицу~\ref{Cyrillic}. % Table borrowed from Ukrainian.dtx \begin{table}[htb] \begin{center} \index{""-@\texttt{""}\texttt{-}} \index{""---@\texttt{""}\texttt{-}\texttt{-}\texttt{-}} \index{""=@\texttt{""}\texttt{=}} \index{""`@\texttt{""}\texttt{`}} \index{""'@\texttt{""}\texttt{'}} \index{"">@\texttt{""}\texttt{>}} \index{""<@\texttt{""}\texttt{<}} \caption[Болгарский, русский и украинский]{Дополнительные определения, вводимые опциями \pai{babel} для болгарского, русского и украинского языков}\label{Cyrillic} \begin{tabular}{@{}p{.1\hsize}@{}p{.9\hsize}@{}} \hline \verb="|= & запрещает лигатуру в этой позиции. \\ \verb|"-| & дефис, разрешающий переносить остаток слова. \\ \verb|"---| & кириллическое тире в обычном тексте. \\ \verb|"--~| & кириллическое тире в составных фамилиях. \\ \verb|"--*| & кириллическое тире для обозначения прямой речи. \\ \verb|""| & как |"-|, но не генерирует знака дефиса (для составных слов с дефисом, например, |x-""y|.\\ \verb|"~| & отмечает составное слово без разрыва. \\ \verb|"=| & отмечает составное слово с разрывом, разрешая перенос в словах-компонентах. \\ \verb|",| & пробел для инициалов с разрешением переноса в следующей за ними фамилии. \\ \verb|"`| & немецкая левая двойная кавычка (выглядит так: ,\kern-0.08em,). \\ \verb|"'| & немецкая правая двойная кавычка (выглядит так: ``). \\%'' \verb|"<| & французская левая двойная кавычка (выглядит так: $<\!\!<$). \\ \verb|">| & французская правая двойная кавычка (выглядит так: $>\!\!>$). \\ \hline \end{tabular} \end{center} \end{table} Русская и украинская опции пакета \pai{babel} вводят команды \ci{Asbuk} и \ci{asbuk}, которые работают аналогично командам \ci{Alph} и \ci{alph}, но генерируют прописные и строчные буквы русского или украинского алфавитов (в зависимости от текущего языка документа). Болгарская опция \pai{babel} вводит команды \ci{enumBul} и \ci{enumLat} (\ci{enumEng}), которые заставляют \ci{Alph} и \ci{alph} генерировать буквы либо болгарского, либо латинского (английского) алфавитов. По умолчанию генерируются болгарские буквы. %Finally, math alphabets are redefined and as well as the commands for math %operators according to Cyrillic typesetting traditions. \section{Пробелы между словами} Для получения ровного правого края вывода \LaTeX{} вставляет различные интервалы между словами. В конце предложения он вставляет слегка больший интервал, делая текст более читабельным.\trfootnote{В соответствии с традициями верстки, принятыми в английском языке.} \LaTeX{} предполагает, что предложения заканчиваются точками, вопросительными или восклицательными знаками. Если точка следует за буквой в верхнем регистре, она не считается концом предложения, так как точки после букв верхнего регистра обычно используются для сокращений. Любое исключение из этих предположений должно быть явно оговорено автором. Знак~<<\verb|\|>> перед пробелом дает в результате пробел, который не будет увеличен. Знак~<<\verb|~|>> дает пробел, который не может увеличиться и который, кроме того, запрещает разрыв строки. Команда \verb|\@| перед точкой указывает, что эта точка заканчивает предложение, несмотря на то, что стоит за буквой верхнего регистра. \cih{"@} \index{~@ \verb.~.} \index{тильда@тильда (\verb.~.)} \index{точка, пробел после} \begin{example} Mr.~Smith was happy to see her\\ cf.~Fig.~5\\ I like BASIC\@. What about you? \end{example} Дополнительный пробел после точек можно запретить командой \begin{lscommand} \ci{frenchspacing} \end{lscommand} \noindent которая указывает \LaTeX{} \emph{не} вставлять пробела после точки более, чем после обычных символов. Это обычно для языков, отличных от английского, за исключением библиографий. Если вы используете \ci{frenchspacing}, команда \verb|\@| не нужна. \section{Заголовки, главы и разделы} Чтобы помочь читателю ориентироваться в вашей работе, вы должны разделять ее на главы, разделы и подразделы. \LaTeX{} поддерживает это специальными командами, принимающими в качестве аргумента заголовок раздела. Ваше дело~--- использовать их в надлежащем порядке. Класс \texttt{article} включает следующие команды секционирования: \begin{code} \ci{section}\verb|{...} |\ci{paragraph}\verb|{...}|\\ \ci{subsection}\verb|{...} |\ci{subparagraph}\verb|{...} |\\ \ci{subsubsection}\verb|{...}| \end{code} В классах \texttt{report} и \texttt{book} вы можете использовать дополнительную команду \ci{chapter}\verb|{...}|. Если вы хотите разбить ваш документ на части без изменения нумерации разделов/глав, используйте команду \ci{part}\verb|{...}|. Так как глав (chapters) в классе \texttt{article} нет, то статьи довольно легко добавлять в книгу в качестве глав. Интервалы между разделами, нумерация и размер шрифта заголовков устанавливаются \LaTeX{} автоматически. Две из команд секционирования~--- особенные: \begin{itemize} \item Команда \ci{part} не влияет на последовательность нумерования глав. \item Команда \ci{appendix} аргумента не имеет. Она просто начинает нумеровать главы буквами вместо цифр.\footnote{В классе \texttt{article} меняется нумерация разделов.} \end{itemize} \LaTeX{} создает оглавление, беря заголовки разделов и номера страниц из предыдущего цикла компиляции документа. Команда \begin{lscommand} \ci{tableofcontents} \end{lscommand} \noindent вставляет оглавление в то место, где она вызвана. Чтобы получить правильное \wi{оглавление}, новый документ должен быть обработан \LaTeX{} дважды. В особых случаях может быть необходим и третий проход. Когда это потребуется, \LaTeX{} вас предупредит. Все вышеперечисленные команды секционирования существуют также в вариантах со звездочкой. Такой вариант получается добавлением \verb|*| к имени команды. Они генерируют заголовки разделов, которые не нумеруются и не включаются в оглавление. Например, команда \verb|\section{Справка}| становится \verb|\section*{Справка}|.\sloppypar Обычно заголовки разделов появляются в оглавлении точно в том же виде, в каком они вводятся в тексте. Иногда это невозможно из-за того, что заголовок слишком длинен для оглавления. Элемент оглавления может в этом случае указываться необязательным аргументом перед собственно заголовком. \begin{code} \verb|\chapter[Заголовок для оглавления]{Это~--- длинный,|\\ \verb| длинный и очень нудный заголовок, появляющийся в тексте}| \end{code} Титульный лист \index{лист!титульный}\index{титульный лист} документа в целом генерируется при помощи команды \begin{lscommand} \ci{maketitle} \end{lscommand} \noindent Его содержимое должно быть определено командами \begin{lscommand} \ci{title}\verb|{...}|, \ci{author}\verb|{...}| и \ci{date}\verb|{...}| \end{lscommand} \noindent до момента вызова \verb|\maketitle|. Аргумент команды \ci{author} может содержать несколько имен, разделенных командами \ci{and}. Пример некоторых из упомянутых команд может быть найден на иллюстрации~\ref{document} на странице~\pageref{document}. Помимо описанных выше команд секционирования, \LaTeXe{} вводит три дополнительных команды для использования с классом \texttt{book}. Они полезны для деления вашей публикации. Команды изменяют заголовки глав и нумерацию страниц так, как это ожидается от книги: \begin{description} \item[\ci{frontmatter}] должна быть самой первой командой после \verb|\begin{document}|. Она переключает нумерацию страниц на использование римских цифр. Для вводной части часто используют команды секционирования со звездочками (например, \verb|\chapter*{Предисловие}|), чтобы \LaTeX{} не нумеровал эти разделы. \item[\ci{mainmatter}] указывается сразу перед первой главой книги. Она включает нумерацию страниц цифрами и сбрасывает счетчик страниц. \item[\ci{appendix}] отмечает начало дополнительного материала в вашей книге. После этой команды главы будут нумероваться буквами. \item[\ci{backmatter}] указыватеся перед самыми последними частями книги, например, перед библиографией и предметным указателем. В стандартных классах документов видимого эффекта она не имеет. \end{description} \section{Перекрестные ссылки} В книгах, отчетах и статьях часто встречаются \wi{перекрестные ссылки} на иллюстрации, таблицы и отдельные части текста. Для этого \LaTeX{} предоставляет следующие команды: \begin{lscommand} \ci{label}\verb|{|\emph{метка}\verb|}|, \ci{ref}\verb|{|\emph{метка}\verb|}| и \ci{pageref}\verb|{|\emph{метка}\verb|}| \end{lscommand} \noindent где \emph{метка}~--- выбранный пользователем идентификатор. \LaTeX{} заменяет \verb|\ref| номером раздела, подраздела, иллюстрации, таблицы или уравнения, где была использована соответствующая команда \verb|\label|. \verb|\pageref| печатает номер страницы, соответствующей команде \verb|\label|.\footnote{Заметьте, что эти команды не знают, на что именно они ссылаются. \ci{label} просто сохраняет последний автоматически генерируемый номер.} Так же, как и в случае с заголовками разделов, здесь также используются номера из предыдущего прохода. \begin{example} Ссылка на этот раздел~\label{sec:this} выглядит так: <<см. раздел~\ref{sec:this} на стр.~\pageref{sec:this}.>> \end{example} \section{Сноски} Команда \begin{lscommand} \ci{footnote}\verb|{|\emph{текст сноски}\verb|}| \end{lscommand} \noindent печатает сноску внизу текущей страницы. Сноски всегда должны помещаться после слова или предложения, к которым они относятся. В русском языке сноски, относящиеся к предолжению, должны ставиться сразу перед точкой или запятой\footnote{Заметьте, что сноски отвлекают читателя от основного текста документа. Все всегда читают сноски, потому что мы~--- любопытные создания. Поэтому старайтесь включать все, что вы хотите сказать, в основной текст документа.}. %не понял юмора. BT. \begin{example} Пользователи \LaTeX{} часто употребляют сноски.\footnote{% Это~--- сноска.} \end{example} \section{Выделенные слова} В рукописи, напечатанной на машинке, \texttt{важные слова выделяются \underline{подчеркиванием}}: \begin{lscommand} \ci{underline}\verb|{|\emph{текст}\verb|}| \end{lscommand} В печатных изданиях, однако, эти слова выделяются \emph{курсивом}. Команда для переключения на шрифт \emph{выделения} называется \begin{lscommand} \ci{emph}\verb|{|\emph{текст}\verb|}| \end{lscommand} \noindent Ее аргументом является текст для выделения\index{выделение}. Что на самом деле делает эта команда, зависит от контекста: \begin{example} Если вы используете \emph{выделение в уже выделенном тексте, то \LaTeX{} использует \emph{прямой} шрифт.} \end{example} Отметьте отличие между командами \emph{выделения} и смены \emph{шрифта}: \begin{example} \textit{Вы можете также \emph{выделить} текст, набрав его курсивом,} \textsf{шрифтом без \emph{засечек}} \texttt{или в стиле \emph{пишущей машинки}.} \end{example} \section{Окружения} \label{env} Для верстки специальных видов текста \LaTeX{} определяет множество \index{окружение}окружений для разных типов форматирования: \begin{lscommand} \ci{begin}\verb|{|\emph{название}\verb|}|\quad \emph{текст}\quad \ci{end}\verb|{|\emph{название}\verb|}| \end{lscommand} \noindent где \emph{название} определяет окружение. Окружения можно вызывать внутри окружений, соблюдая порядок вызова и возврата: \begin{code} \verb|\begin{aaa}...\begin{bbb}...\end{bbb}...\end{aaa}| \end{code} \noindent В следующих разделах рассказывается обо всех важных окружениях. \subsection{Список, перечисление и описание} Окружение \ei{itemize} подходит для простых списков, окружение \ei{enumerate}~--- для нумерованных списков, а окружение \ei{description}~--- для описаний. \cih{item} \begin{example} \flushleft \begin{enumerate} \item Вы можете как угодно смешивать окружения списков: \begin{itemize} \item Но это может смотреться глупо. \item[-] С минусом. \end{itemize} \item Поэтому помните: \begin{description} \item[Глупые] вещи не станут умнее от помещения в список. \item[Умные] вещи, однако, вполне можно представить списком. \end{description} \end{enumerate} \end{example} \subsection{Выравнивание влево, вправо и по центру} Окружения \ei{flushleft} и \ei{flushright} форматируют абзацы, выровненные влево или вправо.\index{выравнивание!вправо или влево} Окружение \ei{center} дает центрированный текст. Если вы не используете \ci{\bs} для указания разрывов строк, \LaTeX{} определит их автоматически. \begin{example} \begin{flushleft} Этот текст\\ выровнен влево. \LaTeX{} не старается сделать все строки одинаковой длины. \end{flushleft} \end{example} \begin{example} \begin{flushright} Этот текст\\ выровнен вправо. \LaTeX{} не старается сделать все строки одинаковой длины. \end{flushright} \end{example} \begin{example} \begin{center} В центре\\Земли \end{center} \end{example} \subsection{Цитаты и стихи} Окружение \ei{quote} полезно для цитат, важных фраз и примеров. \begin{example} Типографское правило для длины строки: \begin{quote} Обычно строки должны содержать не больше 66~символов. \end{quote} Поэтому \LaTeX{} делает такими широкими поля страниц. Поэтому в газетах часто применяют набор в несколько колонок. \end{example} Существуют еще два похожих окружения: \ei{quotation} и \ei{verse}. Окружение \texttt{quotation} полезно для более длинных цитат, охватывающих несколько абзацев, потому что оно начинает абзацы с красной строки. Окружение \texttt{verse} используют для стихов, где важны разрывы строк. Строки разделяются при помощи \ci{\bs} в конце строки и пустой строки после каждой строфы. \begin{example} Я знаю только одно английское стихотворение наизусть: про Шалтая-Болтая: \begin{flushleft} \begin{verse} Humpty Dumpty sat on a wall:\\ Humpty Dumpty had a great fall.\\ All the King's horses and all the King's men\\ Couldn't put Humpty together again. \end{verse} \end{flushleft} \end{example} \subsection{Буквальное воспроизведение} Текст, заключенные между \verb|\begin{|\ei{verbatim}\verb|}| и \verb|\end{verbatim}| будет напрямую напечатан, как набранный на пишущей машинке, со всеми пробелами и возвратами каретки, без выполнения каких бы то ни было команд \LaTeX{}. Внутри абзаца аналогичную функцию выполняет команда \begin{lscommand} \ci{verb}\verb|+|\emph{текст}\verb|+| \end{lscommand} \noindent Здесь <<\verb|+|>>~--- это только пример символа-ограничителя. Вы можете использовать любой символ, кроме букв, <<\verb|*|>> или пробела. Многие примеры на \LaTeX{} в этом буклете набраны этой командой. \begin{example} Команда \verb|\ldots| \ldots \begin{verbatim} 10 PRINT "HELLO WORLD "; 20 GOTO 10 \end{verbatim} \end{example} \begin{example} \begin{verbatim*} вариант окружения verbatim со звездочкой выделяет пробелы в тексте \end{verbatim*} \end{example} Команду \ci{verb} тоже можно использовать аналогичным образом со звездочкой: \begin{example} \verb*|вот так :-) | \end{example} Окружение \texttt{verbatim} и команду \verb|\verb| нельзя использовать внутри параметров других команд. \subsection{Таблицы} Окружение \ei{tabular} используют для верстки таблиц, возможно, с горизонтальными и вертикальными линиями. \LaTeX{} автоматически определяет ширину столбцов. Аргумент \emph{спецификация} команды \begin{lscommand} \verb|\begin{tabular}[|\emph{позиция}\verb|]{|\emph{спецификация}\verb|}| \end{lscommand} \noindent определяет формат таблицы. Используйте \texttt{l} для столбца текста, выровненного влево, \texttt{r} для текста, выровненного вправо и \texttt{c} для центрированного текста, \verb|p{|\emph{ширина}\verb|}| для столбца, содержащего выровненный текст с переносом строк, и \verb.|. для вертикальной линии. \emph{Позиция} определяет вертикальное положение всего табличного окружения: \texttt{t}, \texttt{b} и \texttt{c} означают выравнивание по верхнему краю, нижнему краю или по центру окружения. Внутри окружения \texttt{tabular} знак~<<\verb|&|>> переходит к следующему столбцу, команда~\ci{\bs} начинает новую строку, а \ci{hline} вставляет горизонтальную линию.\index{"|@\verb."|.} Вы можете добавлять неполные линии при помощи команды \ci{cline}\verb|{j-i}|, где \texttt{j} и \texttt{i}~--- номера столбцов, над которыми должна проходить линия. \begin{example} \begin{tabular}{|r|l|} \hline 7C0 & шестнадцатеричное \\ 3700 & восьмеричное \\ \cline{2-2} 11111000000 & двоичное \\ \hline \hline 1984 & десятичное \\ \hline \end{tabular} \end{example} \begin{example} \begin{tabular}{|p{4.7cm}|} \hline Добро пожаловать в абзац в рамочке. Надеемся, вам всем тут понравится.\\ \hline \end{tabular} \end{example} Разделитель столбцов можно задать конструкцией \verb|@{...}|. Эта команда удаляет пробел между столбцами и заменяет его на то, что включено в фигурные скобки. Одно из частых использований этой команды показано ниже, при рассказе о проблеме выравнивания по десятичной точке. Другое возможно использование~--- для подавления ведущего пробела в таблице при помощи \verb|@{}|: \begin{example} \begin{tabular}{@{} l @{}} \hline нет ведущего пробела\\ \hline \end{tabular} \end{example} \begin{example} \begin{tabular}{l} \hline ведущий пробел слева и справа\\ \hline \end{tabular} \end{example} % % This part by Mike Ressler % \index{выравнивание!по десятичной точке} Поскольку встроенный способ выровнять числовые столбцы по десятичной точке отсутствует,\footnote{Если на вашей системе установлен комплект `tools', обратите внимание на пакет \pai{dcolumn}.} мы можем <<обмануть>> \TeX{} и добиться этого при помощи двух столбцов: выровненной вправо целой части и выровненной влево дробной. Команда \verb|@{.}| в строке \verb|\begin{tabular}| заменяет нормальный пробел между столбцами просто на <<.>>, давая эффект одного столбца, выровненного по десятичной точке. Не забудьте заменить в ваших числах точку на разделитель столбцов (\verb|&|)! Метку столбца можно поместить над нашим числовым <<столбцом>> командой \ci{multicolumn}: \begin{example} \begin{tabular}{c r @{.} l} Выражение с $\pi$ & \multicolumn{2}{c}{Значение} \\ \hline $\pi$ & 3&1416 \\ $\pi^{\pi}$ & 36&46 \\ $(\pi^{\pi})^{\pi}$ & 80662&7 \\ \end{tabular} \end{example} \begin{example} \begin{tabular}{|c|c|} \hline \multicolumn{2}{|c|}{Ene} \\ \hline Mene & Muh! \\ \hline \end{tabular} \end{example} Материал, набираемый в окружении \texttt{tabular}, всегда верстается на одной странице. Если вам нужно набирать длинные таблицы, используйте окружения \pai{supertabular} или \pai{longtable}. \section{Плавающие объекты} Большинство публикаций в наши дни содержат множество иллюстраций и таблиц. Эти элементы нуждаются в специальном обращении с ними, так как они не могут быть разбиты между страницами. Одним из выходов было бы начинать новую страницу каждый раз, когда встречается иллюстрация или таблица, слишком большая, чтобы поместиться на текущей странице. Этот подход привел бы к тому, что страницы оставались бы частично пустыми, что смотрится очень плохо. Для решения этой проблемы любая иллюстрация или таблица, не умещающаяся на текущей странице, может `плавать', перемещаясь на следующую страницу в процессе заполнения текстом текущей. \LaTeX{} предлагает для плавающих объектов\index{плавающие объекты} два окружения, одно для таблиц и одно для иллюстраций. Чтобы полностью использовать их преимущества, важно примерно представлять, как \LaTeX{} обрабатывает плавающие объекты. Иначе они могут стать источником разочарования из-за того, что \LaTeX{} помещает их не туда, куда вы хотите. Давайте вначале рассмотрим команды, предоставляемые \LaTeX{} для плавающих объектов. Любой материал, включенный в окружения \ei{figure} или \ei{table}, трактуется как плавающий. Оба окружения имеют необязательный параметр \begin{lscommand} \verb|\begin{figure}[|\emph{спецификация размещения}\verb|]| или\\ \verb|\begin{table}[|\emph{спецификация размещения}\verb|]| \end{lscommand} \noindent называемый \emph{спецификацией размещения}. Этот параметр используется для указания \LaTeX{}, куда можно перемещать плавающий объект. \emph{Спецификация размещения} конструируется путем собирания в строчку \emph{ключей размещения плавающего объекта}. См. таблицу~\ref{tab:permiss}. \begin{table}[!bp] \caption{Ключи размещения плавающего объекта}\label{tab:permiss} \noindent \begin{minipage}{\textwidth} \medskip \begin{center} \begin{tabular}{@{}cp{10cm}@{}} Ключ&Разрешает помещать объект \ldots\\ \hline \rule{0pt}{1.05em}\texttt{h} & \emph{здесь же}, в том самом месте текста, где он появился. Обычно используется для маленьких объектов.\\[0.3ex] \texttt{t} & \emph{наверху} страницы\\[0.3ex] \texttt{b} & \emph{внизу} страницы\\[0.3ex] \texttt{p} & на \emph{специальной странице}, содержащей только плавающие объекты.\\[0.3ex] \texttt{!} & не рассматривать большинство внутренних параметров,\footnote{Таких, как максимальное число плавающих объектов, разрешенных на одной странице} которые могут предотвратить размещение этого объекта. \end{tabular} \end{center} \end{minipage} \end{table} Замечание: \texttt{0pt} и \texttt{1.05em}~--- единицы измерения длин \TeX{}. Подробности о единицах и размерностях смотрите в таблице~\ref{units} на странице~\pageref{units}. Например, таблицу можно начать следующей строкой: \begin{code} \verb|\begin{table}[!hbp]| \end{code} \noindent Спецификация размещения \index{спецификация размещения} \verb|[!hbp]| позволяет \LaTeX{} разместить таблицу прямо по месту (\texttt{h}), или внизу той же страницы (\texttt{b}), или на выделенной странице (\texttt{p}), и все это~--- даже если это будет смотреться не так уж хорошо (\texttt{!}). Если никакой спецификации размещения не задано, стандартные классы предполагают \verb|[tbp]|. \LaTeX{} размещает каждый встреченный плавающий объект в соответствии с заданной автором спецификацией. Если объект нельзя поместить на текущей странице, он откладывается, помещаясь в очередь иллюстраций\index{иллюстрации} или в очередь таблиц.\index{таблицы}\footnote{Эти очереди подчиняются дисциплине \emph{fifo}: `первым вошел~--- первым вышел'.} Когда начинается новая страница, \LaTeX{} проверяет, можно ли заполнить специальную страницу плавающими объектами из очередей. Если нет, то первый объект из каждой очереди считается только что встретившимся в тексте: \LaTeX{} снова пытается разместить их в соответствии с их спецификациями (за исключением `h', что уже невозможно). Новые встреченные в тексте плавающие объекты помещаются в соответствующие очереди. \LaTeX{} сохраняет порядок, в котором встретились плавающие объекты соответствующего типа. Поэтому иллюстрация, которую не удается разместить, отталкивает все дальнейшие иллюстрации к концу документа. Следовательно: \begin{quote} Если \LaTeX{} не размещает плавающие объекты, как вы этого ожидаете, то часто это только один объект устроил затор в одной из очередей. \end{quote} Хотя и возможно задавать в \LaTeX{} конкретную спецификацию размещения плавающего объекта, это может вызвать проблемы. Если объект не помещается в указанном месте, он <<застревает>>, блокируя последующие плавающие объекты. В частности, никогда не используйте ключ \texttt{[h]}; это настолько плохо, что в современных версиях \LaTeX{}, он автоматически заменяется \texttt{[ht]}. \bigskip \noindent После объяснения этих механизмов остается еще несколько замечания про окружения \ei{table} и \ei{figure}. Командой \begin{lscommand} \ci{caption}\verb|{|\emph{текст заголовка}\verb|}| \end{lscommand} \noindent вы можете задать заголовок для объекта. Увеличивающийся номер и строка <<Рисунок>> или <<Таблица>> добавляются \LaTeX{}. Две команды \begin{lscommand} \ci{listoffigures} и \ci{listoftables} \end{lscommand} \noindent работают аналогично команде \verb|\tableofcontents|, печатая список иллюстраций или таблиц, соответственно. В этих списках заголовки повторяются целиком. Если вы используете длинные заголовки, то вы должны предоставить их краткий вариант для включения в списки. Это делается помещением краткого варианта в квадратные скобки после команды \verb|\caption|. \begin{code} \verb|\caption[Короткий]{Дддддллллллиииинннннныыыыыыыыыыыыыыййй}| \end{code} При помощи \verb|\label| и \verb|\ref| можно делать ссылки из вашего текста на плавающий объект. Следующий пример рисует квадрат и вставляет его в документ. Подобную технику можно использовать, чтобы оставить в документе место под изображения, которые вы вставите позже. \begin{code} \begin{Verbatim} Рисунок~\ref{white} является примером Поп-Арта. \begin{figure}[!hbp] \makebox[\textwidth]{\framebox[5cm]{\rule{0pt}{5cm}}} \caption{Пять на пять сантиметров} \label{white} \end{figure} \\\end{Verbatim} \end{code} \noindent В этом примере \LaTeX{} будет \emph{очень сильно}~(\texttt{!}) стараться разместить иллюстрацию прямо \emph{по месту}~(\texttt{h}).\footnote{Предполагая, что очередь иллюстраций пуста} Если это невозможно, он попытается разместить ее \emph{внизу страницы}~(\texttt{b}). Если ему не удастся поместить иллюстрацию на текущей странице, он выяснит, можно ли создать страницу плавающих объектов, содержащую эту иллюстрацию и, возможно, некоторые таблицы из очереди таблиц. Если для отдельной страницы материала еще не накопилось, \LaTeX{} начинает новую страницу и снова рассматривает иллюстрацию, как если бы она только что появилась в тексте. В определенных случаях может быть необходимо использовать команду \begin{lscommand} \ci{clearpage} или даже \ci{cleardoublepage} \end{lscommand} \noindent Она указывает \LaTeX{} немедленно разместить все плавающие объекты, остававшиеся в очередях, и затем начать новую страницу. \ci{cleardoublepage}, помимо этого, начинает новую правостороннюю страницу. Позже вы узнаете, как включать в ваши документы \LaTeX{} рисунки в формате \textsc{PostScript}. \section{Защита хрупких команд} Текст, заданный в аргументах команд наподобие \ci{caption} или \ci{section}, появляется в документе больше одного раза (например, в оглавлении, в колонтитулах и в теле документа). Некоторые команды не работают, будучи использованы в аргументах команд типа \ci{section}. Их называют хрупкими командами\index{команды!хрупкие}. В частности, хрупкими являются команды \ci{footnote} или \ci{phantom}. Для того, чтобы они работали как предполагается, необходимо перед ними поставить команду \ci{protect}. Команда \ci{protect} относится только к команде, непосредственно следующей за ней; даже не к ее аргументам. В большинстве случаев лишняя команда \ci{protect} не повредит. \begin{code} \verb|\section{Я внимателен|\\ \verb| \protect\footnote{и защищаю свои сноски}}| \end{code} %%% Local Variables: %%% mode: latex %%% TeX-master: "lshort" %%% End: