Для оформления текстов существует несколько популярных инструментов такие как Microsoft Office, Libre Office и т. п. Их часто используют и для написания ВКР. В целом это удобные редакторы, которые привлекают свой простотой, но когда дело касается большого количества формул с автоматической нумерацией, рисунков, схем и таблиц, то оформление превращается в ту ещё задачу. Возможно, на текущий момент ситуация с оформлением формул поменялось, но раньше некоторым стандартом считался MathType для набора формул. В Microsoft Office и Libre Office можно работать на основе стилей и получить какую-то автоматизацию по нумерации, стилевому оформлению, но этим часто пренебрегают. В качестве альтернативы всегда был TeX, LaTeX, XeTeX, XeLaTeX и т. п. Стиль оформления текстов в этих системах непривычный по сравнению  с визуальными редакторами. Для тех кто не знаком текст создаётся в виде специальной разметки. Из ближайших аналогово это похоже на создание HTML страниц. Для того чтобы получить читаемый документ с визуальным оформление нужно его скомпилировать. Компиляция обычно проходит как цепочка вызова команд. Наиболее популярный результат на выходе это PDF-документ. Рассматривать будем XeLaTeX т. к. в нём просто выбирать разные шрифты и есть поддержка Unicode. В некоторых местах всегда будет упоминаться XeLaTeX, хотя функциональность изначально существовала в TeX или LaTeX. Все примеры из статьи взяты в основном из готового класса документа и примера на GitHub. Рассмотрим установку дистрибутива и выбор редактора для создания документов. Есть два варианта: Установить всё локально. Работать в облачных сервисах. Например, в OverLeaf. Рассмотрим вариант локальной установки т. к. он более универсальный и даст возможность понять процесс получения финального PDF-документа из текста разметки. Локально не будет никаких ограничений по времени компиляции документа, установки дополнительных пакетов и т. п. Облачные сервисы могут иметь различные ограничения в зависимости от тарифа. Есть два популярных дистрибутива: TeX Live. MikTex. Актуальный список доступных дистрибутивов под разные платформы. На момент создания ВКР автор использовал и до сих пор использует MikTex под Windows. Было небольшой опыт работы с TeX Live под Linux. Также проблемы особых не возникало. После установки у вас должна быть доступна команда: Разметку можно набирать в любом текстовом редакторе, но намного удобнее, особенно без большого опыта, иметь более специализированный редактор для XeLaTeX. Тут тоже есть несколько вариантов: Texmaker. Расширение для VS Code. TeXstudio Дополнительно можно поискать расширения, плагины под свой любимый редактор. Дополнительно будет полезным на старте сервис по распознаванию символов. В нём можно нарисовать символ и получить команду для его воспроизведения. Также можно заранее установить автоматическое форматирование файлов для XeLaTeX. Например, расширение для VS Code автоматически вызывает эту программу, когда вызывается команда форматирования. После того как всё настроено можно приступить к первому примеру. Создадим документ hello_xelatex.tex и скомпилируем его: В разметке документа идёт подключение внешнего пакета polyglossia, установки языков, некоторых опций и выбора шрифтов. Предполагается, что в системе доступен один из шрифтов, указанных в тексте. Например, Times New Roman или FreeSerif. Если это не так, то нужно либо установить соответствущие шрифты, либо поменять на те которые установлены в системе. Обычно заранее выставляются требования к шрифтам, поэтому нужно выбирать тот который требуется. Как правило, Times New Roman достаточно популярный для оформления ВКР. В итоге получится PDF-документ как на рис. ниже (изображение можно увеличить), который можно открыть и посмотреть. Вместо явного вызова команды xelatex можно использовать latexmk. Это некоторый аналог make. При составлении сложного документа одного запуска бывает недостаточно, чтобы получить всю необходимую информацию для оформления документа. latexmk упрощает процесс. В документе будет показано базовое форматирование, некоторые особенности и проблемы. Например, хотя явно нигде переносы слов не стоят в документе они есть. Это всё благодаря тому что polyglossia знает некоторую информацию о том как расставлять переносы. С другой стороны есть часть текста, которая выходит за пределы допустимой области. Такие места будут отображаться в логах как Overfull. Бороться с тим можно разными способами. Например, вставить \sloppy после абзаца.  Основная проблема всех кто начинает использовать XeLaTeX это как теперь сделать нужное форматирование различных элементов и что-то поменять. Тут есть несколько вариантов: Использовать подходящий documentclass c нужными настройками. Использовать внешние пакеты, которые позволяют настраивать различные аспекты форматирования. Переопределять, дополнять встроенные команды. Синтаксис для определения класса документа и то что обычно используется в разметке текста немного отличается. Например, команда для использования пакета в разметки документа будет \usepackage{...}, в классе же документа это будет \RequirePackage{...}. В тексе статьи будут встречаться команды из разных мест, но логически они одинаковые. В таблице ниже приведены соответствия команда, которые используются в статье: Команда в тексте разметке Команда в классе документа \usepackage{...} \RequirePackage{...} \documentclass{...} \LoadClass{...} Если правила форматирования известны заранее и по ним нужно создавать много документов, то самый простой способ это сделать свой documentclass и вынести туда все основные настройки форматирования. Будут рассмотрены только основные моменты. Более детально информацию можно получить в документации соответствующих пакетов. Более подробно про создание своих классов документа можно прочитать в материалах Overleaf. Начнём по порядку. Оформление формул пропустим т. к. примеров в интернете достаточно много по этой теме. Как настроить разные шрифты было в начале этого примера. Допустим требования на размер такие, чтобы он был 14pt. Это делается просто передачей аргумента в базовый класс на основе которого будет основан создаваемый класс: Если нужен произвольный размер текста. Например, 24pt или 36pt, то с этим возникнут проблемы т. к. в опциях extarticle допустимы только определённые размеры. В своё время общего решения найти не удалось. По умолчанию в стандартных классах документа отступ для первого абзаца не делается из-за сформированных традиций типографии в разных странах. Как правило, требуется отступ для все абзацев. Это делается опцией indentfirst=true. Ещё вариант использовать отдельный пакет indentfirst. Размер красной строки настраивается через модификацию значения \parindent: Размер отступа между строк можно настроить через пакет setspace. Например, отступ размером 1,5 устанавливается через \onehalfspacing. Обычно нужен формат A4 с заданными отступами от разных краёв страницы. Требования к номеру следующие: Начинался с 2. Первая страница будет титульным листом. Он готовится отдельно. Всегда находился в верхнем правом углу. С 2 номер и так будет начинаться т. к. есть ещё стандартная титульная страница, которую можно не указывать в разметке. Настройка положения номер страницы можно сделать с помощью пакета fancyhdr. Ниже пример того как этого добиться: Другое форматирование верхних и нижних колонтитулов также можно настроить через этот пакет. Отступы страницы можно настроить через пакет geometry: Существует полезный пакет layout, которы позволяет визуализировать различные отступы на странице и какие для них определены команды. По умолчанию заголовки будет отформатированы так как было приведено в примере. Часто бывает нужно не ставить точку в конце номера и другое форматирование. Точку после номера можно отключить через опцию forceheadingpunctuation: Настройка форматирования заголовка можно сделать через пакет titlesec. Например, так настраивается формат для \section{...}: Выравнивание по центру, размера \normalsize. Добавляется номер \thesection и отступ, равный 1ex. Это размер высота символа x в текущем шрифте. Возможности задания размера достаточно разнообразны и рекомендуется ознакомиться с ними. Такие сочетаний часто могут встречаться в разных советах на форумах или пакетах. Для целей оформления ВКР команда \subparagraph была выбрана для оформления заголовка приложений. Она редко используется в основном тексте и больше вероятность того что в других пакетах это команда также учтена. По сути \subparagraph логически становится на уровне команды \section в тексте. Это потребует некоторых модификаций в нескольких местах, чтобы правильно отображалось визуальное форматирование. В текстовых редакторах для такой команды уже есть автоматическая поддержка отображения в панели навигации. Это упрощает поиск нужного места в большом документе. Для удобства навигации часто нужно составлять оглавление в документе. Оглавление можно настраивать с помощью пакета tocloft. Например, с помощью такой команды можно изменить отступ перед названиями \subparagraph в оглавлении. Так эта команда была выбрана для обозначения приложений и необходимо, чтобы визуально названия были выровнены с названиями \section в оглавлении. Просмотр документов в электронном виде позволяет быстро переходить к конкретным местам с помощью гиперссылок. Если вы когда-то просматривали PDF-документ и замечали наличие гиперссылок на разные места в документе по номеру формулы, списка источников или рисунка, то скорее всего документ был сделан с помощью LaTeX/XeLaTeX и замечательного пакета hyperref. С помощью него можно настроить различные аспекты поведения гиперссылок: Если к стартовому примеру добавить использование пакета и генерацию оглавления: Тут важный момент с повторной компиляцией. Если скомпилировать с помощью команды xelatex документ один раз, то оглавление не будет сформировано, а вместо него почти пустая страница: После повторного запуска будет сгенерировано оглавление с ожидаемой информацией: Всё из-за того что для формирования оглавления требуется два прохода компиляции. После первого прохода формируется служебная информация для оглавления, которая используется во втором проходе. В PDF-докмуенте по области, в красной рамке, можно кликнуть и перейти к нужному месту. latexmk же сам запустить несколько раз компиляцию и будет документ с готовым оглавлением. В этом плане проще начать использовать эту команду уже с самого начала вместо xelatex: Есть замечательные пакеты PGFPlots и PGF/Tikz. По использованию PGFPLots уже была статься с описанием основных возможностей (здесь описан процесс построения графиков по табличным данным). Далее будут рассмотрены только основные моменты. Обычно возникает вопрос со вставкой рисунков и настройки подписей к ним. Для настройки подписей можно использовать пакет caption. Такая команда позволяет изменять формат подписей, логику нумерации к рисункам и таблицам: Рисунки обычно оформляются в окружении figure: Тут стоит обратить внимание на опцию  из пакета float. По умолчанию из-за алгоритмов TeX рисунки и таблицы могут быть размещены не в том месте, где они определены в разметке. Это сделано для того чтобы их размещение было более удобным для чтения. Рисунок может не помещаться в оставшуюся часть страницы. Часто такое поведение не нужно и необходимо разместить рисунок или таблицу именно так как определено в разметке даже если останется пустое пространство. С другой стороны использование динамического позиционирования с подсказками как хотелось бы чтобы было тоже возможно. Для этого есть дополнительные модификаторы. \label используется в тех случаях, если есть необходимость где-то ссылаться в тексте на рисунок. В организации ссылок может помочь пакет cleveref. Одно из требований оформления ВКР было указание общего числа рисунков. Сделать это можно следующим образом с помощью пакета totcount: Создать новый счётчик: \newtotcounter{totfigures}. Создать новое окружение gostfigure в котором каждый раз к счётчику добавляется 1 \newenvironment{gostfigure}{\stepcounter{totfigures}}{}. Вариант не единственный и могут существовать другие решения. С определением нового окружения сделано специально, чтобы обозначения того что нужно считать было более явным.  Можно сделать просто команду или попытаться дополнить логику стандартного окружения figure. В том месте где нужно вывести общее количество достаточно написать \total{totfigures}. Возможности XeLaTeX достаточно богаты в плане программирования, поэтом рассмотрим некоторые примеры того как можно получить рисунки, которые можно менять динамически. Например, динамическая генерация точек на половине сетки заданного размера: Пример на рис. ниже (можно увеличить): \total можно поменять на другое значение и получится обновлённый график. Здесь используется standalone класс документа. Его можно использовать для случаев когда таких рисунков много и проводить все вычисления заново не нужно. Один раз создаётся рисунок и сохраняется в формате PDF. Далее он подключается в основной документ через \includegraphics. Дополнительно можно указать свой класс документа на основе которого создаётся основной документ \documentclass[class=<свой_класс_документа>,tikz]{standalone}. Это помогает избежать визуального отличия в шрифтах или размерах. Обычно при работе над ВКР или каким-то исследованием в области ближе к экспериментальной науке работа идёт итеративно. Сначала идёт этап изучения материала, проведения экспериментов, получения результатов и их оформление. Необходимость оформлять результаты может возникать довольно часто. Возможность строить графики по табличным данным или менять динамически в зависимости от параметров позволяет упростить и автоматизировать эту работу. В случае каких-то уточнений достаточно поменять параметры или данные и заново скомпилировать документ. Рисунки в виде изображений можно вставлять через \includegraphics. Более подробно об этом. Некоторые концепции по оформлению таблиц совпадают с рисунками. Вместо окружения figure используется table. Позиционирование может быть такое же, как и для рисунков. Подсчёт общего количества реализуется также. Таблицы можно создать вручную как в примере ниже: Либо создать из файла. Этот вариант рассмотрим более подробно т. к. про первый довольно много разных примеров. Возвращаясь к циклу проведения экспериментов. Кроме визуализации данных в виде графиков иногда необходимо оформить их в виде таблицы. Вручную переносить не самый оптимальный вариант т. к. данные могут часто меняться и таблиц может быть много. Есть пакет PGFplotsTable, которые помогает в решении задачи. С помощью него можно загружать таблицы из файлов в формате значений, разделённых каким-то символом из определённого списка. Например, csv формат вполне подойдёт. Для примера рассмотрим таблицу: Дата Показатель Количество Значение 2022-03-15 a1 2 10.91238343 2022-04-22 a2 10 5.1219291293 2022-05-11 a2 1 15.10211201232 2022-06-20 a2 5 10.627932758025 2022-07-25 b2 10 8.0238721875392 2022-08-30 c1 2 7.199821676210851 2022-09-26 c1 1 9.129023840252350 2022-10-27 c1 3 12.62898129824398 2022-12-05 b2 1 13.37192878735851 2023-01-30 b3 4 6.92389073515 Если таблица может поменяться в любой момент, то будет достаточно только заменит файл и заново скомпилировать документ. C помощью pgfplotstable можно нарисовать всю таблицу или её подмножество разными вариантами. В \pgfplotstableset выставляются глобальные настройки для всех таблиц. Явно прописываются типы всех столбцов и названия, которые будут отображаться в документе. Настройки можно прописать индивидуально для каждой таблицы \pgfplotstabletypesetfile. Обычно удобно общие настройки прописать сразу. Далее таблица загружается по имени data: \pgfplotstableread{...}\data. Для удобства содержимое таблицы вставлено сразу в разметку документа. Содержание можно заменить на путь к файлу. Несколько раз эта таблица отображается в разных вариантах с разным подмножеством данных. По умолчанию таблицы будут без линий вокруг ячеек как на рис. ниже (изображение можно увеличить): Стоит обратить внимание на несколько моментов: Дата отображается не так как файле. Изменён порядок с YYYY-MM-DD на DD-MM-YYYY. Строки отсортированы по имени. Значения с плавающей запятой выровнены относительно символа , и дополнены 0 до одинакового числа цифр после запятой. В итоге таблица выглядит не так как хранится в файле, если просто его прочитать. Выравнивание чисел относительно , придаёт визуально более приятный вид таблице. Таких вариантов как можно менять представление много. Линии вокруг ячеек необходимо можно добавить модификацией глобальных или локальных настроек следующим образом: Тут стоит обратить внимание на конструкцию columns/value/.append style={dec sep align={c|}, column type/.add={|}{|}}. Из-за особенностей того как в итоге формируется представление таблиц в XeLaTeX столбец value будет без вертикальных линий. Они отдельно добавляются командой column type/.add={|}{|} и выравнивание теперь происходит относительно dec sep align={c|}. В итоге вертикальные линии с выравниванием относительно , будут сохранены. Последний пример с отображением длинной таблицы на несколько страниц. Нужно использовать пакет longtable и cleveref: Под \loadedtable может быть любая ранее загруженная таблица (пример есть в репозитории с кодом для этой статьи), либо имя файла со столбцами: id, num, text. Единственное неудобство это необходимость вручную менять номера столбцов, которые должны быть на каждой странице col 1 & col 2 & col 3\\, при изменении их общего количества. Этот момент зависит от требований форматирования. На момент создания этого примера в ВКР необходимо было нумеровать столбцы в длинных таблицах. Хотя для XeLaTeX разработан стандартный способ добавлять и хранить список источников через BibTeX, Biber. Автору проще всего было вставлять такой список через стандартное окружение: В BibTeX сложно бороться с нужным оформлением ссылок и там были определённые проблемы с unicode из-за чего какая-нибудь точка пропадал, неправильная сортировка и т. п. Biber более современный в этом плане. Возможно, на текущий момент все проблемы решены и этими системами можно пользоваться. По умолчанию номер будет в формате . Его можно переопределить с помощью команд: #1 это номер источника. В требованиях к ВКР был и подсчёт общего числа источников, то можно слегка модифицировать поведение команды \bibitem: Здесь добавляется дополнительная логика перед каждым вызовом команды \bibitem, а именно увеличение общего счётчика числа источников. С thebibliography процесс простой. Вставляется текст с нужным порядком символов и добавляется идентификатор \bibitem, который используется в тексте при цитировании. Для этого удобно использовать внешние системы. Неудобство будет только в том что придётся правильно сортировать порядок записей при добавлении или удалении новых источников в зависимости от конечных требований. Это дополнительные возможности XeLaTeX, которые можно использовать в различных целях. В требованиях к ВКР необходимо было указать общее число рисунков, таблиц и т. п. в реферате. Выше уже были примеры того как считать это количество, но остаётся вопрос как это напечатать в тексте. Проблема здесь в склонении слов. Например, 1 рисунок, 2 рисунка, 5 рисунков. Форма слова меняется в зависимости от количества. Решить такую задачу можно с помощью следующих команд из пакета etoolbox. Алгоритм был основна на этой статье. Подробно разбирать сам пример не будем т. к. это уже более продвинутый уровень и по мере использования XeLaTex некоторые конструкции станут более понятными. Если кратко, то принцип работы такой: Определяются команды для печати нужных слов в разных формах: \figoneendian, \figfourendian, \figfiveendian. Проверяется определено ли значения для счётчика общего числа. Если нет, то выводится ??. Определяется цифра на которую оканчивается число и выбирается соответсвующее окончание. Команда \printtotfig используется в тех случаях когда нужно вывести соответсвующую информацию. В этой статье рассмотрели с чего можно начать использование XeLaTeX. Какие инструменты упростят знакомство и работу. Как настроить форматирование основных элементов текста, а также некоторые полезные пакеты для работы с рисунками и таблицами. Немного про различные аспекты автоматизации. Если XeLaTeX будет выбран в качестве основного инструмента, то по мере возникновения проблем и их решения у вас появится больше знаний о том как ещё можно упростить себе процесс создания текстов различной сложности и как всё работает внутри. Для дальнейшего изучения можно посмотреть в сторону koma-script. Это более современные аналоги популярных классов документов в которых уже многие аспекты форматирования учтены в опциях. Инженер-исследователь