March 14, 2022

LaTeX: мотивация.

"Даже путь в тысячу ли начинается с первого шага." — Лао-цзы. Глава 64, строка 12 книги Дао дэ цзин

TL;DR.

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

Проблемы

Рано или поздно каждый сталкивается с необходимостью создать текстовый документ, который должен отвечать некоторым требованиям форматирования и/или мультимедийности. У многих людей с созданием таких документов связана значительная часть работы, а для некоторых - это основная деятельность. Я, как и многие другие люди, не задумывался об используемом инструментарии и "как и все" просто открывал первый попавшийся MS Word, MS WordPad, Apple Pages, LibreOffice Writer (давайте я дальше буду их для краткости называть "офисом"), писал то, что мне было нужно, закрывал и забывал.

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

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

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

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

Поиски решения

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

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

Решить проблему командной работы не удалось вовсе. Даже гуру офисной работы, создавая документ признают, что просто копипастят фрагменты документа в один, и тратят несколько часов на увлекательное приведение к единому формату, например, по ГОСТ.

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

Возможное решение

Устав от попыток решить эти скучные проблемы я решил подумать головой. Этот непривычный процесс привёл к поразительному результату: мои проблемы возникали в разное время не у меня одного, и люди уже давно придумали решение. Конечно, решение не без оговорок, именно поэтому я озаглавил его как возможное. Системы компьютерной вёрстки.

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

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

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

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

Первый документ

Как и везде, в изучении нового инструмента есть два пути, сложный и простой. Мы, для начала, пойдём простым. Только лишь потому, что в LaTeX и без того достаточно много вещей, которые могут отпугнуть простого пользователя, не будем добавлять к ним ещё и вопросы настроек инструментария. Спасибо создателям сервиса https://www.overleaf.com/ за их труд, они действительно, как это заявлено на стартовой странице, LaTeX,Evolved: The easy to use, online, collaborative LaTeX editor. То есть, улучшили процесс редактирования LaTeX документов настолько, насколько это вообще было возможно. Пройдя несложную регистрацию, мы видим (пока что) пустой список наших проектов. Создадим новый проект и Overleaf создаст для нас шаблон пустого документа, в котором будут прописаны минималистичные настройки. То есть, документ уже как-то выглядит и если к нему не предъявляются дополнительные требования, может быть отредактирован и отправлен куда нужно, для этого мы нажимаем кнопку "Download PDF" и наслаждаемся полученным документом.

Но внимательный читатель (привет тебе, зануда, на таких как ты держится земля), который сразу пошёл проверять, так ли это, заметил проблему. Не отображается кириллица. Всё в документе есть, а кириллических символов нет. Раз и навсегда решим эту проблему в два шага:
1. Menu - Settings - Compiler - XeLaTeX;
2. вторую строку \usepackage[utf8]{inputenc} нужно стереть и заменить на четыре:

\usepackage[russian]{babel}
\babelfont{rm}{PT Astra Serif}
\babelfont{sf}{PT Astra Serif}
\babelfont{tt}{Courier}

где вместо PT Astra Serif и Courier нужно вставить названия любых шрифтов, которые Вы считаете хорошими. Мелким шрифтом, стоит оговорить, что всеми любимый Times New Roman является запрещённым на территории России шрифтом, а Astra Serif является его легальным бесплатным аналогом. Но, если очень сильно хочется именно его, то можно решить проблему (в том числе) так:

\usepackage{fontspec} 
\setmainfont{Times New Roman}

Эти строки заменяют те сложные четыре из второго пункта. Решать задачи можно по-разному, и это прекрасно.

Что дальше?

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