суботу, 8 вересня 2007 р.

Підготовка наукових публікацій у LaTeX

LaTeX (http://www.latex-project.org/) вже 20 років як є найпотужнішою з усіх відомих систем для верстання наукової документації. Його розробив програміст Леслі Лемпорт у 1985 році на базі розробленої ще у 1979 році Дональдом Кнутом системи TeX. LaTeX є надбудовою над TeX, використовуючи останнього для відображення змісту він додає новий підхід до створення документів де оформлення і зміст існують окремо.

Незаслужено мало відома у наших краях система в усьому іншому світі широко використовується науковцями, а особливо спеціалістами з фундаментальних наук. Всі серйозні математичні журнали у світі приймають статті до публікації виключно у форматі LaTeX. Якщо потрібно підготувати наприклад книжку або звіт на декілька сотень сторінок з купою математичних формул, малюнків, таблиць, з безліччю перехресних посилань та об'ємним списком бібліографії, то LaTeX заткне за пояс будь-який текстовий процесор як би він не називався. При цьому він абсолютно вільно розповсюджується і має реалізації для Linux/Unix, MacOS, Windows та навіть DOS. Таким чином величезні документи насичені формулами можна створювати навіть користуючись архаїчною "четвіркою".

Встановлюється наступним чином:
sudo apt-get install tetex-base tetex-bin tetex-common tetex-extra

Я використовую дистрибутив teTeX бо з ним менше проблем, хоча рекомендують використовувати TeXLive, він встановлюється аналогічно, але там є деякі проблеми з українською мовою. З teTeX жодних проблем не виникає.

Основна особливість LaTeX, яка робить його настільки потужною системою - це те, що насправді він являє собою спеціалізовану мову розмітки. Приблизно як HTML використовується для побудови веб-сайтів, так LaTeX використовується для створення наукових текстів. Щоб зрозуміти як це все працює я наведу приклад.

Документ LaTeX можна створювати у будь-якому текстовому редакторі, який тільки може створювати звичайні текстові файли. В Ubuntu вже є gedit, він цілком підходить, тим більше, що він вміє ще й виділяти синтаксис кольором. Ну от наприклад простенький текстовий документ (щойно набрав дивлячись у довідник Бронштейна-Семендяєва):

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage[ukrainian]{babel}
\usepackage{indentfirst}
\usepackage{amsmath}

\begin{document}

\section{Теорія Ейлера-Лагранжа}

\emph{Задачею Лагранжа} у варіаційному численні називають описану раніше задачу знаходження екстремуму для функціоналу
\begin{equation}
J(y)=\int\limits^{x_1}_{x_0} f(x,y,y') dx
\end{equation}
При цьому необхідно, щоб функції $y(x)$, що шукаються відповідали б граничним умовам
$$
y(x_0)=y_0, \quad y(x_1)=y_1.
$$
Якщо немає обумовлено іншого, то вважаємо, що $y(x)$ має неперервну похідну $y'(x)$.

\section{Приклад ще однієї формули}

Вирахуємо $F'(\varepsilon)$:
\begin{multline*}
F'(\varepsilon) = \int\limits^{x_1}_{x_0}\frac{df}{d\varepsilon}dx=\ int\limits^{x_1}_{x_0}(f'_yh(x)+f'_y(x))dx=\\
=\int\limits^{x_1}_{x_0}\left[f'_yh(x)-\frac{d}{dx}(f'_{y'})h(x)\right]dx+\left. h(x)f'_{y'}\right|^{x_1}_{x_0}=\\
=\int\limits^{x_1}_{x_0}h(x)\left(f'_y-\frac{d}{dx}(f'_{y'})\right)dx.
\end{multline*}
\end{document}


Тепер достатньо зберегти цей файл наприклад як euler.tex і дати команду:
pdflatex euler.tex

У результаті у цьому ж каталозі з'явиться новий файл euler.pdf, якщо ми його відкриємо, то побачимо наступне:


Спробую тепер трохи пояснити. У випадку з LaTeX ви просто набираєте текст розбавляючи його де потрібно командами, а вже компілятор перетворює його у готовий документ придатний до друку. Команди починаються з символу оберненого слешу ( \ ). Компілятор розрізняє малі та великі літери, тому майте на увазі, що \lambda та \Lambda - це дві різні команди. Якщо команда має параметри, то вони задаються у фігурних дужках. Деякі команди можуть мати ще додаткові необов'язкові параметри які задаються у квадратних дужках. Формула в тексті відокремлюється з обох боків символом $, я якщо потрібно вставити виключну формулу, то використовують $$. Пара команд \begin{...}...\end{...} вводять середовища.

Вхідний файл чітко розмежовується на дві частини. Спочатку йде так звана преамбула:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[ukrainian]{babel}
\usepackage{indentfirst}
\usepackage{amsmath}


Тут вказується клас документу (у даному випадку - стаття). Клас - це спеціальний .cls файл який містить у собі відомості про оформлення документу. Серед стандартних класів присутні - article, report, book, letter та ін. Такий підхід є чимось схожим на використання каскадних таблиць стилів при створенні веб-сторінок, коли оформлення і власне текст є відокремленими. Це дуже зручно, бо повністю змінити оформлення можна заміною лише однієї команди. Команда \usepackage служить для підключення додаткових пакетів які можна порівняти з бібліотеками у мовах програмування. У даному випадку ми вказуємо кодування файлу (inputenc), включаємо автоматичні переноси (babel), активуємо відступ у першому абзаці (indentfirst) та підключаємо пакет з додатковими математичними командами (amsmath) від AMS (American Mathematical Society).

Далі між командами \begin{document} та \end{document} пишемо основний текст. Команда \section вводить нову главу. Абзаци відділяються пустим рядком. Декілька пробілів сприймаються як один, символ переводу рядка сприймається як пробіл.

Середовище \begin{equation}... \end{equation} створює виключну формулу і автоматично проставляє її номер. У математичних середовищах діють додаткові команди. Наприклад \int - інтеграл, \limits - ліміти, символ апострофу вказує на похідну, ^ вводить верхній індекс, а _ відповідно нижній. Якщо потрібно наприклад прописати у індекс декілька символів, то вони обмежуються фігурними дужками. \quad - вводить широкий пробіл, щоб відокремити дві формули якщо вони в одному рядку, \varepsilon - грецька буква ε, \frac - вводить дріб. Якщо потрібно щоб дужки автоматично підганяли свої розміри під їх вміст, то пишуть таким чином - \left( ... \right). Оскільки LaTeX контролює закриття/відкриття дужок, то щоб все зпрацювало коректно, а наприклад праву дужку не показувати, замість неї пишуть \right. (саме так, з крапкою).

Середовище \begin{multline*} ... \end{multline*} вводить формулу на декілька рядків. Зірочка означає, що формулу не потрібно нумерувати. Рядки відокремлюються символом \ . При цьому перший рядок автоматично вирівнюється по лівому краю, а останній по правому, проміжні рядки вирівнюються по центру.

Ось так працює LaTeX. Завдяки своїй природі він є не лише дуже гнучким, адже всі WYSIWYG текстові процесори мають певні обмеження, але й дозволяє суттєво збільшити швидкість набору тексту. Адже наприклад набрати не відриваючись від клавіатури $y=\int x^2 dx$ набагато швидше ніж вставляти формулу і тикаючи мишкаю по кнопкам редактора формул вставляти інтеграл та верхній індекс. Звісно такий підхід потребує певних базових знань, бо по суті ви текст програмуєте, але потративши декілька годин на вивчення основних команд можна вже приступати до роботи. Для зручності можна додатково встановити ще якийсь спеціалізований редактор який би спрощував процес набору, про це я розповім трохи пізніше.

Потрібно ще раз згадати, що величезним плюсом LaTeX є велика кількість доступних в Інтернеті та й просто у дистрибутивах пакетів. Те, що у математичних формулах можна використовувати такі символи про які MS Word навіть не підозрює це одне, але LaTeX підходить не лише для набору математичних текстів. Для прикладу я щойно створив документ у який додано ноти (за це відповідає пакет musixtex).

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[ukrainian]{babel}
\usepackage{musixtex}
\begin{document}
\LaTeX вміє набирати ноти

\hsize=120mm
\generalmeter{\meterfrac24}%
\parindent 0pt
\setsign1{-3}
\startpiece\bigaccid
\NOtes\qu{ce}\enotes
\bar
\NOtes\qu{gh}\enotes
\bar
\NOtes\qu{=b}\enotes
\Notes\ds\cu g\enotes
\bar
\NOtes\qu{^f=f}\enotes
\NOtes\qu{=e}\itied0e\qu{_e}\enotes
\bar
\Notes\ttie0\Qqbu ed{_d}c\enotes
\bar
\Notes\ibu0b{-2}\qb0{=b}\enotes
\notes\nbbu0\qb0{=a}\tqh0N\enotes
\Notes\Dqbu cf\enotes
\NOtes\uptext{\it tr}\qu e\uptext{\it tr}\qu d\enotes
\bar
\NOtes\qu c\qp\enotes
\setdoubleBAR
\stoppiece
\bigskip
\end{document}


У результаті ми отримаємо наступне:


Те, що я показав це лише маленька частинка всього того, що може LaTeX. За допомогою інших пакетів можна розписувати шахові партії (з зображенням дошки і фігур), можна малювати всякі діаграми, можна будувати структурні хімічні формули та ін. Можливості даної системи просто безмежні. Оскільки в Інтернеті можна знайти величезну кількість літератури по даному питанню, то розібратися з LaTeX більш глибоко не становить серйозної проблеми.

5 коментарів:

  1. Підкажіть, будь-ласка )
    Спочатку встановив TeXLive - техт не розпізнає кирилицю-юнікод
    Потім встановив tetex (крім пакету tetex-common, бо "E: Не можу знайти пакунок tetex-common")
    Те саме. тобто
    ! Package inputenc Error: Unicode char \u8:м not set up for use with LaTeX.

    що варто зробить, щоб виправити ситуацію? ))

    ВідповістиВидалити
  2. Потрібно встановити пакунок texlive-lang-cyrillic

    ВідповістиВидалити