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

LXF85:LaTeX

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

ЧАСТЬ 3: Успешно пройдя две ступени посвящения, вы готовы двинуться в путь к вершинам мастерства. Вашим проводником в этом нелегком деле будет Евгений Балдин.

Содержание

Компьютерные Teхнологии: Учимся использовать культовую систему вёрстки LaTeX

Полиграфисты относят математические работы к каторжным… Д. Э. Кнут. Математическая типография.

Набор математики: снова в школу

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

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

LaTeX — не единственная программная среда, использующая TeXнотацию. Эта же нотация рекомендуется при наборе всех сколько-нибудь сложных формул на страницах Википедии (http://ru.wikipedia.org статья «Википедия:Формулы»).

Становлению TeX как стандарта для набора формул в значительной степени поспособствовало Американское математическое сообщество (The American Mathematical Society — AMS), которое субсидировало разработку расширения TeX, известного как AMSTeX, в начале восьмидесятых годов прошлого столетия. В 1987 году наработки AMSTeX были добавлены в LaTeX в виде пакета amsmath. Вместе с amsmath в LaTeX было добавлено множество улучшений, позволяющих набирать действительно изощрённую математику. Поэтому при использовании в тексте математики в шапке документа следует в обязательном порядке загружать пакет amsmath:

\usepackage{amsmath}

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

Набор формул

При формировании текста формулы подразделяются на строчные и выносные. Строчные формулы набираются внутри абзаца вместе текстом. По описанию формулы LaTeX создаёт бокс, который обрабатывается наравне с обычными текстовыми боксами. Как правило, строковые формулы это небольшие вставки, вроде E=mc2. Выносные или выключенные формулы выводятся за пределы абзаца.

Строчная формула в тексте ограничивается[1] с помощью символа доллара $«формула»$ или с помощью команд-скобок \(«формула»\). При наборе предпочтительнее использовать второй вариант оформления, так как он позволяет легко определить, где начинается, а где кончается формула. «Долларовое» ($) окружение лучше тем, что оно чуть-чуть короче, кроме этого, команда $ крепкая[2], в отличие от команд-скобок.

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

\begin{equation}
  \label{eq:math:ex1}
  \int\limits_{-\infty}^{\infty}
      e^{-x^2/2}dx=\sqrt{2\pi}
\end{equation}
<math>\int\limits_{-\infty}^{\infty}e^{-x^2/2}dx=\sqrt{2\pi}</math>

Нумерация формул удобна для того, чтобы позже в тексте на неё можно было легко сослаться с помощью команды \eqref{eq:math:1}[3]. Если же формул немного и не хочется никакой нумерации, то можно воспользоваться окружением equation*[4]. При создании выключенной формулы размер шрифта для улучшения читаемости немного увеличивается. LaTeX имеет несколько стилей для оформления математических формул. При желании можно выбрать необходимый стиль вручную:

  • \displaystyle — стиль, используемый для выносных формул,
  • \textstyle — стиль строчных формул,
  • \scriptstyle — в этом стиле набираются индексы,
  • \scriptscriptstyle — индексы второго уровня.

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

\begin{equation*}
  \frac{1}{1+
  \frac{1}{1+
  \frac{1}{1+
  \frac{1}{2}}}}
\end{equation*}
<math>\frac{1}{1+\frac{1}{1+\frac{1}{1+\frac{1}{2}}}}</math>
и
\begin{equation*}
  \frac{1}{\displaystyle 1+
  \frac{1}{\displaystyle 1+
  \frac{1}{\displaystyle 1+
  \frac{\displaystyle 1}
  {\displaystyle 2}}}}
\end{equation*}
<math>\frac{1}{\displaystyle 1+\frac{1}{\displaystyle 1+\frac{1}{\displaystyle 1+\frac{\displaystyle 1}{\displaystyle 2}}}}</math>

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

Кириллица в формулах

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

Стиль mathtext (пакет t2), позволяет использовать кириллицу в формулах без дополнительных ухищрений. Стиль может быть подключён с опцией warn — в этом случае он сообщает обо всех случаях использования кириллических букв в формулах. mathtext следует загружать до babel и/или fontenc.

\usepackage[warn]{mathtext}

Здесь для создания выключенной формулы используется команда \["формула"\] — краткий аналог окружения equation*. В отличие от латиницы, русские буквы в формулах печатаются прямым шрифтом — это было сделано специально. Чтобы изменить это поведение, в преамбуле следует добавить команду для переопределения шрифта:

\DeсlareSуmbolFont{T2Aletters}{T2A}{cmr}{m}{it}

Стиль amstext (загружается автоматически при загрузке amsmath) определяет команду \text, которая позволяет вставлять в формулу обычный текст. Он может быть и русским. Преимущество такого подхода заключается в том, что внутри команды \text пробелы воспринимаются как нормальные символы и слова не сливаются. Использование \text предпочтительно и для целей переносимости.

Школьная математика

Математика в школе — это явление, через которое проходит каждый. Именно поэтому фактически любой вменяемый россиянин умеет обращаться с дробями, знает теорему Пифагора, с лёгкостью решает квадратные уравнения и что-то слышал про интеграл и производную. Разберёмся со всем этим поподробнее.

Индексы

Букв в латинском алфавите не так уж и много, а научных понятий — без числа. Один из способов отличать обозначения друг от друга — это индексы, как верхние, так и нижние:

\[A_{\text{lower index}}\quad
 B^{\text{upper index}}\quad
 C_n^k\]
<math>A_{\text{lower index}}\quad B^{\text{upper index}}\quad C_n^k</math>

Обратите внимание, что если в индексе ровно один знак, то фигурные скобки вокруг него можно и нужно опустить. Теперь мы можем записать теорему Пифагора: \(a²+b²=c²\) <math>a^2+b^2=c^2</math>

Математические символы

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

\begin{itemize}
   \item \(ABCD\) "--- обычной,
   \item \(\mathbf{ABCD}\) "--- жирной,
   \item \(\mathbb{ABCD}\) "--- ажурной,
   \item \(\mathcal{ABCD}\) "---прописной.
 \end{itemize}
  • <math>ABCD</math>
  • <math>\mathbf{ABCD}</math>
  • <math>\mathbb{ABCD}</math>
  • <math>\mathcal{ABCD}</math>

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

Греческие символы
Буква Команда Буква Команда Буква Команда
<math>\Alpha~\alpha</math> \Alpha \alpha <math>\Iota~\iota</math> \Iota \iota <math>\Sigma~\sigma</math> \Sigma \sigma
<math>\Beta~\beta</math> \Beta \beta <math>\Kappa~\kappa</math> \Kappa \kappa <math>~\varsigma</math> \varsigma
<math>\Gamma~\gamma</math> \Gamma \gamma <math>\Lambda~\lambda</math> \Lambda \lambda <math>\Tau~\tau</math> \Tau \tau
<math>\Delta~\delta</math> \Delta \delta <math>\Mu~\mu</math> \Mu \mu <math>\Upsilon~\upsilon</math> \Upsilon \upsilon
<math>\Epsilon~\epsilon</math> \Epsilon \epsilon <math>\Nu~\nu</math> \Nu \nu <math>\Phi~\phi</math> \Phi \phi
<math>~\varepsilon</math> \varepsilon <math>\Xi~\xi</math> \Xi \xi <math>\varphi</math> \varphi
<math>\Zeta~\zeta</math> \Zeta \zeta <math>\Pi~\pi</math> \Pi \pi <math>\Chi~\chi</math> \Chi \chi
<math>\Eta~\eta</math> \Eta \eta <math>\varpi</math> \varpi <math>\Psi~\psi</math> \Psi \psi
<math>\Theta~\theta</math> \Theta \theta <math>\Rho~\rho</math> \Rho \rho <math>\Omega~\omega</math> \Omega \omega
<math>\vartheta</math> \vartheta <math>\varrho</math> \varrho

В LaTeX присутствует полный набор и, за исключением трёх букв, начертание вполне привычное. Для исправления непривычных начертаний эти буквы были переопределены с помощью пакета amssymb:

%Переопределение kappa epsilon phi на русский лад
\renewcommand{\kappa}{\varkappa}
\renewcommand{\epsilon}{\varepsilon}
\renewcommand{\phi}{\varphi}

Спецсимволов в LaTeX великое множество. В стандартной поставке TeX Live идёт «Всеобъемлющий список сиволов LaTeX» (The Comprehensive LaTeX Symbols List — файл symbols-a4.pdf) в котором перечислено 5000 распространённых символов, применяемых пользователями LaTeX. Почти наверняка любой операнд, который вам нужен, там уже есть. Ниже будет перечислена только та часть символов, которая, с моей точки зрения, может пригодиться в наборе школьной математики. Пакет amssymb для использования обязателен.


«Школьные» символы
<math>\hat{a}</math> \hat{a} <math>\bar{a}</math> \bar{a} <math>\vec{a}</math> \vec{a} <math>\dot{a}</math> \dot{a} <math>\tilde{a}</math> \tilde{a}
<math>\pm</math> \pm <math>\mp</math> \mp <math>\times</math> \times <math>\cdot</math> \cdot <math>\div</math> \div
<math>\lor</math> \lor <math>\land</math> \land <math>\neg</math> \neg <math>\forall</math> \forall <math>\exists</math> \exists
<math>\le</math> \le <math>\ge</math> \ge <math>\ll</math> \ll <math>\gg</math> \gg <math>\neq</math> \neq
<math>\equiv</math> \equiv <math>\sim</math> \sim <math>\simeq</math> \simeq <math>\approx</math> \approx <math>\propto</math> \propto
<math>\parallel</math> \parallel <math>\perp</math> \perp <math>\angle</math> \angle <math>\triangle</math> \triangle <math>\sphericalangle</math> \sphericalangle
<math>\infty</math> \infty <math>\ell</math> \ell <math>\sum</math> \sum <math>\prod</math> \prod <math>\varnothing</math> \varnothing

Для соответствия русским традициям 2 символа были переопределены:

%Переопределение le ge на русский лад
\renewcommand{\le}{\leqslant}
\renewcommand{\ge}{\geqslant}

Дроби

Дроби формируются с помощью команды \frac[5]:

 \[
   fraction=\frac{numerator}{denominator}
 \]
<math>fraction=\frac{numerator}{denominator}</math>

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

Корни

Для рисования знака корня используется команда

\sqrt[степень]{«подкоренное выражение»}

Степень можно упустить. В этом случае рисуется обычный квадратный корень.

\overline{
  \underline{\Large
    \sqrt[3]{a}+\sqrt[2]{b}+\sqrt[99]{g}
  }
}
<math>\overline{\underline{\sqrt[3]{a}+\sqrt[2]{b}+\sqrt[99]{g}}}</math>

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

Для выравнивания по высоте используется команда \mathstrut[6]. В результате её применения вставляется невидимый символ нулевой толщины и высоты, в точности равной высоте круглой скобки:

\[\Large
  \sqrt[3]{\mathstrut a}+
  \sqrt[2]{\mathstrut b}+
  \sqrt[99]{\mathstrut g}
\]
<math>\sqrt[3]{a}+\sqrt[2]{b}+\sqrt[99]{g}</math>

Квадратное уравнение

И, наконец, вершина школьной математики — это решение квадратного уравнения ax²+bx+c=0:

\[
  x_{1,2}=\frac{-b\pm\sqrt{b^2-4ac}}{2a}
\]
<math>x_{1,2}=\frac{-b\pm\sqrt{b^2-4ac}}{2a}</math>

Теперь можно смело садиться за написание методичек.

Функции

Все символы в математической моде печатаются курсивом, поэтому названия функций, для выделения, печатаются прямым шрифтом. Кроме смены шрифта, функции с обоих сторон должны правильно «отбиваться» пробелами, иначе будет некрасиво. При загрузке русского языка с помощью пакета babel кроме стандартных имён функций доопределяется несколько сокращений, применяемых в русскоязычной литературе. Среди часто употребляемых функций можно упомянуть: cos, arccos, sin, arcsin, tg, arctg, ctg, arcctg, sh, ch, th, cth, exp, ln, log, lim, min и max. В математической моде эти функции можно использовать в качестве команд:

\begin{equation*}
  \begin{split}
  &\log_2 10=\ln10/\ln2\simeq3.32 \\
  &\lim_{x\to0}\frac{\sin x}{x}=1\\
  &(a+b)^n=\sum_{k=1}^n C^k_n a^kb^{n-k}
 \end{split}
\end{equation*}
<math>\log_2 10=\ln10/\ln2\simeq3.32 \lim_{x\to0}\frac{\sin x}{x}=1 (a+b)^n=\sum_{k=1}^n C^k_n a^kb^{n-k}</math>

Обратите внимание на обработку индексов для функции log (логарифм) и lim (предел). Для доопределения новых функций правильнее всего воспользоваться в преамбуле командой DeclareMathOperator:

%В преамбуле — определение новых функций
\DeclareMathOperator{\log-like}{log-like}
\DeclareMathOperator*{\lim-like}{lim-like}

В зависимости от варианта команды индексы отображаются как для логарифма (команда без звёздочки) или как для предела (команда со звёздочкой).

Производная и интеграл

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

Производная обычно отмечается штрихом. В физике, производная по времени выделяется точкой, для того чтобы отличать её от производной по координате. Можно честно написать \frac{d F(x)}{dx}. Для частной производной вместо буквы d используется спецсимвол \partial:

\[ f'\quad f''\quad
\dot{f}\quad \ddot{f} \quad
\frac{d f}{d x}\quad
\frac{\partial f}{\partial x} \]
<math>f'\quad f\quad \dot{f}\quad \ddot{f} \quad \frac{d f}{d x}\quad \frac{\partial f}{\partial x}</math>

Взятие производной есть обратная операция по отношению к интегрированию:

\[
  \frac{d}{dx}\int F(x) dx=F(x)
\]
<math>\frac{d}{dx}\int F(x) dx=F(x)</math>

Приглядевшись к этому примеру, можно отметить, что, вопреки русским математическим традициям, представленный здесь интеграл не прямой, а наклонный. Это можно исправить, например, загрузив пакет wasysym с опцией integrals. К сожалению, получающиеся интегралы «не смотрятся», поэтому пока лучше использовать начертания по умолчанию в надежде, что в будущем ситуация изменится к лучшему.

Неопределённый интеграл — это хорошо, а определённый — лучше. Качественное оформление пределов интегрирования важно для восприятия формулы.

\[
  \int_0^{\infty}\quad
  \int\limits_0^{\infty}\quad
  \sum_{i=1}^n\quad
  \sum\nolimits_{i=1}^n\quad
\]
<math>\int_0^{\infty}\quad \int\limits_0^{\infty}\quad \sum_{i=1}^n\quad \sum\nolimits_{i=1}^n\quad</math>

По умолчанию пределы размещаются справа от интеграла. Ситуацию можно поправить с помощью команды \limits. Команда \nolimits делает всё ровно наоборот.

Скобки

Для визуальной группировки символов внутри формулы скобки — вещь незаменимая. Особенно здорово, если скобки автоматически подгоняют свой размер под выражение, которое они окружают. Парные команды \left и \right включают режим подобной подстройки:

\[\left(
 \left[
  \left\langle
   \left\{
    \left\uparrow
     \left\lceil
      \left|
       \left\lfloor
        \text{text}^{10}
       \right\rfloor^9
      \right|^8
     \right\rceil^7
    \right\downarrow^6
   \right\}^5
  \right\rangle^4
 \right]^3
\right)^2\]
\left\lfloor\text{text}^{10}\right\rfloor^9\right|^8\right\rceil^7\right\downarrow^6\right\}^5\right\rangle^4\right]^3\right)^2</math>

Эстеты, в зависимости от ситуации, могут добавить в конце команды модификатор позиционирования разделителя как левого — l (отбивка как для \left), правого — r (отбивка как для \right) и среднего — m.

Перенос формул

В русскоязычной литературе принято, что при переносе строчной формулы на другую строку знак, по которому разрывается формула, дублируется на следующей строке. Например:

a + b =
= c

Однако, по умолчанию этого не происходит. Проще всего решить проблему с помощью следующего макроса[7], который необходимо определить в преамбуле:

%перенос формул в тексте
\newcommand*{\hm}[1]{#1\nobreak\discretionary{}%
 {\hbox{$\mathsurround=0pt #1$}}{}}

Здесь определена команда \hm, которую следует добавлять в местах потенциального переноса формулы, примерно, так: \(a + b \hm{=} c\). Сделать это можно во время окончательной доводки текста. В любом случае, для полировки рукописи ручная работа необходима.

Формулы для Вики

Файл:LXF85-Latex-1.png
Сделайте так, чтобы Ваш форум или Вики заговорили на языке LaTeX.

«Движок», который использует Википедия для отображения формул, называется WikiTeX. Основной сайт проекта, естественно, представляет из себя вики и расположен по адресу http://wikisophia.org/ Используя это программное обеспечение в связке с LaTeX, можно не только сносно отображать математические формулы на WWW без особых ухищрений, но и отрисовывать шахматные партии, химические формулы, фейнмановские диаграммы, нотные записи и многое другое. TeX разрабатывался как программа, которая может формировать изображения для разных устройств, даже для тех, о которых на момент создания этого текстового процессора профессору Д. Э. Кнуту ничего не было известно. Поэтому TeX обретается в самых неожиданных местах.

Заключение

Изложенных правил и приёмов вполне хватит для набора текстов в рамках школьной математики. Для более изощрённых формул требуются более продвинутые приёмы и конструкции. Всё это будет, но чуть позже.

Примечания

  1. Есть более формальное оформление строчной формулы как окружения: \begin{math} «формула» \end{math}. Но, в силу понятных причин, никто подобное описание не использует.
  2. Начав изучать команды LaTeX, довольно быстро сталкиваешься с понятиями «хрупкости»/«крепкости». «Крепкие» команды, в отличие от «хрупких», можно использовать в качестве аргументов других команд. С другой стороны, хрупкие команды тоже можно использовать как параметры, защитив их с помощью команды \protect. Эти понятия в большинстве своём пережитки прошлого и их постепенно изживают, но пока следует иметь их в виду.
  3. Метка выставляется с помощью команды \label.
  4. К equation добавляется звёздочка. Подобный приём в создании команд применяется достаточно часто. Команда со * обычно не нумеруется и не отображается ни в каких автоматически составляемых списках.
  5. От слова fraction — «дробь».
  6. От английского strut — «подпорка» или «страта».
  7. Рецепт от Евгения Миньковского из fido7.ru.tex
Персональные инструменты
купить
подписаться
Яндекс.Метрика