Найти в Дзене
Блокнот математика

Про LaTeX

Этот материал я давно хотел написать, но не писал, ибо одни и так знают про ТеХ, кое-кто даже лучше меня разбирается, а другие всё равно не примут к сведению. Но теперь я обещал написать введение, ну и открываю его Городу и Миру. Итак, LaTeX (читается "латèх") или просто ТеХ ("тех", здесь "х" потому, что это греческие буквы тау, эпсилон, хи) — это система создания текстовых документов. В основном, математических; но не только. Есть пакеты для шахматных диаграмм, схем для игры го, нот и чего только не. В отличие от WYSIWYG-инструментов, в которых вы видите, что у вас получается, тех работает в UNIX-стиле, когда вы объясняете системе, что хотите получить, и получаете. Если кто не знает, то WYSIWYG означает "What You See Is What You Get", то есть "что видишь, то и получишь". Разница в подходах примерно такая, как когда вы стоите над душой у повара, покрикивая на него (режь мясо! не такими кусочками, побольше! поменьше! не это мясо!), или когда вы даете ему распоряжение типа "приготовить

Этот материал я давно хотел написать, но не писал, ибо одни и так знают про ТеХ, кое-кто даже лучше меня разбирается, а другие всё равно не примут к сведению. Но теперь я обещал написать введение, ну и открываю его Городу и Миру.

Итак, LaTeX (читается "латèх") или просто ТеХ ("тех", здесь "х" потому, что это греческие буквы тау, эпсилон, хи) — это система создания текстовых документов. В основном, математических; но не только. Есть пакеты для шахматных диаграмм, схем для игры го, нот и чего только не.

В отличие от WYSIWYG-инструментов, в которых вы видите, что у вас получается, тех работает в UNIX-стиле, когда вы объясняете системе, что хотите получить, и получаете.

Если кто не знает, то WYSIWYG означает "What You See Is What You Get", то есть "что видишь, то и получишь".

Разница в подходах примерно такая, как когда вы стоите над душой у повара, покрикивая на него (режь мясо! не такими кусочками, побольше! поменьше! не это мясо!), или когда вы даете ему распоряжение типа "приготовить фрикасе из перепелов по-неаполитански со спагетти аль-денте", и получаете просимое. Да, порой сначала придется пообъясняться, но потом всё будет удобно и приятно.

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

В подготовке документов всё наоборот. Это вам дают ГОСТ про отчёты и просят сделать "как написано", и вместо сути вы две недели бьетесь башкой о монитор, пытаясь сделать так. И всё равно потом сто раз приходится переделать, потому что ГОСТ это да, но кто-то решил добавить на титульный лист ещё что-нибудь, ибо.

Тех является языком разметки. Иными словами, в текст вставляются команды (они, как правило, начинаются со слеша \), которые трактуются так или иначе. Ещё отдельно трактуются символы $, между которыми действует "математический режим". Там команды имеют другой смысл, другие шрифты и так далее: всё для формул.

Скобки могут менять размер в зависимости от содержимого.
Скобки могут менять размер в зависимости от содержимого.

Есть еще некоторые символы, которые имеют особый смысл. Так, тильда ~ означает неразрывный пробел, а крышечка и подчерк используются в формулах (верхний и нижний индексы) и в тексте не допускаются. Их надо экранировать слешем. Ну и -- и --- превращаются в – и —, соответственно. А знак процента % начинает комментарий, поэтому сам символ надо экранировать слешем, иначе всё до конца строки просто пропадет. Ошибка новичка: скопировать что-то вроде "Рост на 5% в год является большим." и получить в итоге "Рост на 5".

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

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

Важно, что пустая строка (пробелы на ней могут быть) считается для ТеХ разделителем абзацев. Точнее, любое число пустых строк подряд. Есть и команда \par, но логичнее и красивее разделять абзацы пустыми строками. В сгенерированном тексте абзацы будут разделены так, как им полагается выбранным стилем. В Тех есть команды менять отступ между абзацами и другие интервалы, превозмогая стиль — полезно, если надо, но злоупотреблять не следует.

Функциональность Тех можно усиливать пакетами. Их очень много в поставке, и ещё больше можно доставить потом или скачать и установить (есть официальный архив пакетов CTAN). Там есть какие угодно символы, даже те, которых нет в Юникоде, там можно всё, что угодно сверстать (хотя не всё одинаково просто). Есть пакеты со шрифтами и командами для символов, есть пакеты для таблиц, графиков, рисунков, цветного текста. Есть пакеты для диаграмм игры го или шахмат, бриджа и нот, создания презентаций и словарей.

Есть пакет disser для создания диссертаций с авторефератом и всем прочим, причем вы пишете всякие ритуальные секции один раз (актуальность, новизна, апробация и всё прочее). Оно само вставляется куда следует и в автореферат, и в диссерт. Все поля, библиография, заголовки, точки, интервалы и колонтитулы сделаны по ГОСТу, и у вас об этом голова болеть не должна.

Разница между именно ТеХ (его называют PlainTeX) и LaTeX вот в чем: ТеХ изначально является языком для описания текста. Это аналогично обычному языку, скажем, русскому. На нем всё можно, но не всё одинаково удобно. Как и по-русски: вы всё можете изложить, но кое-что может быть сложно. Надо выработать специальную терминологию, жаргон/сленг, договориться о соглашениях, как что понимать. Обычно на базе теха формировались макропакеты: наборы определений и заготовленных схем для верстки того, что нужно чаще всего. Один из таких пакетов и есть Латех, который стал весьма популярным. Был еще AMSTeX, который развивался параллельно, но потом влился в Латех и теперь пакеты AMS входят в поставку. На чистом Техе никто не пишет, кроме авторов новых пакетов.

Вы можете завести бесплатный аккаунт на Overleaf и поиграться. Там можно и совместно работать над документом, что бесценно. Недостаток: кодировка только utf8. Но это не очень большой недостаток; он серьезен только в том случае, если журнал требует статью в LaTeX и кодировке только cp1251, и со своим стилем библиографии, так что вам придется использовать BiBTeX. Но это не так часто бывает.

Освоить Латех можно по книгам и пособиям, в том числе онлайн. Очень хороша книга С. М. Львовский. Набор и вёрстка в системе LATEX. Она, конечно, относительно старая (хотя переиздания вполне актуальны), но зато, по заявлению автора, в открытом доступе. Для освоения базы она годится, там ничего не изменилось. Сейчас проще с рисунками, есть новые, более продвинутые пакеты — но это всё вы потом в Сети найдете. В Сети есть ответы на большинство вопросов: "как в латех увеличить отступ?" и получаете просимое.

Итак , документ на Латех состоит из преамбулы, в которой вы определяете параметры документа (тип — статья, книга, отчет, презентация, письмо и т.п.; размер бумаги; кегль шрифта и т.д.) и подключаете пакеты. Типичная преамбула выглядит так:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amssymb}

Первая строчка задает тип документа, всё остальное по умолчанию. Вторая указывает кодировку, это Юникодная utf8. Может быть windows-кодировка cp1251 или ещё что-то. Далее подключены два пакета, которые обычно подключают: там символы, кое-какие окружения вроде теорем и всё в таком роде. Если пишете по-русски, надо включить пакет babel (но и для английского это полезно, переносы и прочее):

\usepackage[russian,english]{babel}

Далее всё зависит от пакета. Можно задать в предусмотренных местах автора, заглавие и сгенерировать титульный лист автоматически. В пакетах типа disser это очень развито и стандартные разделы генерируются сами: вы пишете только суть.

В простейшем случае у вас просто белый лист и вперед.

Документ располагается между \begin{document} и \end{document}

Попробуйте вставить в пустой документ эту преамбулу, эти две команды и между ними любой текст. В Оверлифе нажмите кнопочку, а если вы в командной строке, то сохраните файл как test.tex и дайте команду pdflatex test.tex

Из Вим можно :!pdflatatx %

Если ошибок не возникло, у вас должен появиться pdf с вашим текстом. Полюбуйтесь. Попробуйте вставить формулы.

Формулы в пределах строки — между знаками $. Двойные знаки $$ создают формулу на отдельной строке. Для этой цели лучше использовать окружения (с \begin и \end): equation (с номером), equation* (без номера), gather (из нескольких строк) и множество других.

Для формул надо знать вот что. Крышечка и подчерк обозначают индексы, то есть \tau_1^2 даст τ₁² (только степень будет прямо над нижним индексом). Греческие буквы и многое другое задается вот такими командами: \alpha, \beta, \aleph, \Zeta, \Omega. Интеграл и сумма — это \int и \sum (и \sum создает не тот же символ, что \Sigma), при этом можно указать пределы через те же _ и ^, а команда \limits поместит их "где надо". Очень важны фигурные скобки: они группируют часть формулы, которая считается одним символом. Так, \sum\limits_{i=1}^\infty правильно, а без скобок будет совсем не то: i под знаком суммы и потом =1 в степени бесконечность. Знак корня это \sqrt (и он меняет размеры в зависимости от того, что под ним), \frac это дробь, два символа после нее считаются числителем и знаменателем, используйте фигурные скобки: \frac12 это ½ (но дробь обычная, двухэтажная), а вот \frac{x-1}{x+1} надо задавать со скобками (иначе получите x наверху, минус внизу, а остальное после дроби). Есть команды типа \sin, которые создают имя функции прямым шрифтом (в формулах курсив, так что не путайте sin и sin). Можно всё, что угодно написать прямым шрифтом при помощи \mathrm{}. Скобки переменного размера задают \left( и \right), только они должны идти в паре. Если пары нет, ставьте \right. в качестве пары. Наконец, любой текст можно вставить в формулу через \text{}.

Есть современный xelatex, работающий с Юникодом и любыми системными шрифтами. Возможно, имеет смысл изначально осваивать его, а не классический Латех. Я о нем отдельно напишу.

Несколько ловушек и подводных камней.

Следите за кодировкой, особенно в проекте со многими файлами.

Следите за символом конца строки, особенно при переносе файлов между Линукс и Windows.

Символ % начинает комментарий. В тексте сам символ надо экранировать \%, иначе вся строка после него просто пропадёт.

Буквы с диакритикой доступны даже в тексте: \"a, например, дает ä, а \'a даёт á. Это полезно для правильного написания имён (Vásárosnaményi báró Eötvös Loránd Ágoston) или иностранных слов (crème brûlée). В формулах диакритика тоже есть, но там у нее другой смысл и она может иначе выглядеть. Буква "а" с двумя точками — это вторая производная, и команда для нее \ddot a. И таких команд сотни, для любых мыслимых символов.

Символ конца строки трактуется как пробел. Иногда это естественно , когда вы пишете что-то вроде

... найдется
такой $x$, что...

В полученном документе между "найдется" и "такой" будет пробел. Иногда это не нужно, например, если вы вздумали точку перенести. Она окажется отделена пробелом. Но можно поставить на конце строки %, и тогда символ конца строки окажется "закомментирован". Только злоупотреблять этим не стоит.

После команды пробелы игнорируются. Так что после \AA (символ ангстрема, вроде Å) пробела не будет, а иногда хотелось бы. По общему правилу, раз символ "пробел" трактуется особо (игнорируется), то его надо экранировать слешем, чтобы он трактовался как пробел: "\AA\ есть ни что иное, как ангстрем".

Команда не может кончаться числом. Поэтому \frac12 это то же, что и \frac 1 2. А вот \fracxy нельзя, надо \frac x y или, лучше, \frac{x}{y}.

Ищите естественный способ сделать то, что вы хотите. Не надо ставить две формулы подряд через $$...$$, чтобы устроить систему уравнений или длинную формулу с переносом. Для этого есть специальные окружения, в данном случае gather и multline. Не надо выделять самому заголовки, для этого есть специальные команды \section и прочее. Не вздумайте вручную нумеровать формулы! Для этого есть \label и \ref, \eqref и \pageref. Не меняйте без необходимости пробелы и промежутки командами. Тех лучше знает, что нужно делать. Не ленитесь погуглить или почитать документацию к пакету. Это окупается.

Последнее: переносы. При подключенном babel переносы делаются в целом правильно, но иногда Тех не справляется, и нужно ему помочь. Если вы увидели торчащее вправо слово, укажите места переносов явно: син\-хро\-фа\-зо\-трон. Можно это сделать один раз в начале документа, если такие слова у вас часто. Можно по месту поправить косяк, хотя это "ломает" проверку орфографии: данное слово она не опознает. Аналогично можно исправить косяк, если ваши правила переносов не совпадают с теми, что вложены в пакет. Или вам просто не нравится перенос одного слога, это бывает.

Я думаю, этого введения, упорства и любопытства достаточно, чтобы написать свою курсовую, статью или отчет.

Удачи.

Научно-популярные каналы на Дзене: путеводитель
Новости популярной науки12 марта 2022