Введение

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

В качестве альтернативы всегда был TeX, LaTeX, XeTeX, XeLaTeX и т. п. Стиль оформления текстов в этих системах непривычный по сравнению с визуальными редакторами. Для тех кто не знаком текст создаётся в виде специальной разметки. Из ближайших аналогово это похоже на создание HTML страниц. Для того чтобы получить читаемый документ с визуальным оформление нужно его скомпилировать. Компиляция обычно проходит как цепочка вызова команд. Наиболее популярный результат на выходе это PDF-документ.

Рассматривать будем XeLaTeX т. к. в нём просто выбирать разные шрифты и есть поддержка Unicode. В некоторых местах всегда будет упоминаться XeLaTeX, хотя функциональность изначально существовала в TeX или LaTeX.

Все примеры из статьи взяты в основном из готового класса документа и примера на GitHub.

Настройка окружения

Рассмотрим установку дистрибутива и выбор редактора для создания документов.

Установка дистрибутива

Есть два варианта:

  1. Установить всё локально.

  2. Работать в облачных сервисах. Например, в OverLeaf.

Рассмотрим вариант локальной установки т. к. он более универсальный и даст возможность понять процесс получения финального PDF-документа из текста разметки. Локально не будет никаких ограничений по времени компиляции документа, установки дополнительных пакетов и т. п. Облачные сервисы могут иметь различные ограничения в зависимости от тарифа.

Есть два популярных дистрибутива:

  1. TeX Live.

  2. MikTex.

Актуальный список доступных дистрибутивов под разные платформы. На момент создания ВКР автор использовал и до сих пор использует MikTex под Windows. Было небольшой опыт работы с TeX Live под Linux. Также проблемы особых не возникало.

После установки у вас должна быть доступна команда:

xelatex -version

Установка редактора

Разметку можно набирать в любом текстовом редакторе, но намного удобнее, особенно без большого опыта, иметь более специализированный редактор для XeLaTeX. Тут тоже есть несколько вариантов:

  1. Texmaker.

  2. Расширение для VS Code.

  3. TeXstudio

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

Также можно заранее установить автоматическое форматирование файлов для XeLaTeX. Например, расширение для VS Code автоматически вызывает эту программу, когда вызывается команда форматирования.

Создание первого документа

После того как всё настроено можно приступить к первому примеру. Создадим документ hello_xelatex.tex и скомпилируем его:

xelatex -halt-on-error -enable-installer ./hello_xelatex.tex
hello_xelatex.tex
\documentclass[12pt, oneside]{extarticle}

\usepackage{polyglossia}
\setdefaultlanguage[indentfirst=true,forceheadingpunctuation=false]{russian}
\setotherlanguages{english}

\IfFontExistsTF{Times New Roman}
{\setmainfont{Times New Roman}
\newfontfamily\cyrillicfont{Times New Roman}[Script=Cyrillic]}
{\setmainfont[Script=Cyrillic]{FreeSerif}}

\IfFontExistsTF{Courier New}
{\setmonofont{Courier New}
\newfontfamily\cyrillicfonttt{Courier New}[Script=Cyrillic]
}
{\setmonofont[Script=Cyrillic]{FreeMono}}

\IfFontExistsTF{Arial}
{\setsansfont{Arial}
\newfontfamily\cyrillicfontsf{Arial}[Script=Cyrillic]
}
{\setsansfont[Script=Cyrillic]{FreeSans}}

\title{Привет XeLaTeX}
\author{Автор}
\date{\today}

\begin{document}

\maketitle

\section{Введение}

\subsection{Сгенерированный текст языковой моделью (пунктуация и орфография оригинальная)}

Latex - это система компьютерной вёрстки, разработанная для создания технической и научной документации, а также других видов печатной продукции. Она широко используется в академических кругах, научно-исследовательских институтах и промышленных предприятиях для создания различных документов, включая научные статьи, учебники, технические отчёты и т.д. Latex предоставляет набор инструментов и команд для форматирования текста, составления математических формул, графиков, таблиц и других элементов документа. Одной из главных особенностей Latex является его расширяемость и возможность создания собственных команд и стилей.
\end{document}

В разметке документа идёт подключение внешнего пакета 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. Это делается просто передачей аргумента в базовый класс на основе которого будет основан создаваемый класс:

\LoadClass[14pt, oneside]{extarticle}

Если нужен произвольный размер текста. Например, 24pt или 36pt, то с этим возникнут проблемы т. к. в опциях extarticle допустимы только определённые размеры. В своё время общего решения найти не удалось.

По умолчанию в стандартных классах документа отступ для первого абзаца не делается из-за сформированных традиций типографии в разных странах. Как правило, требуется отступ для все абзацев. Это делается опцией indentfirst=true. Ещё вариант использовать отдельный пакет indentfirst.

\setdefaultlanguage[indentfirst=true,forceheadingpunctuation=false]{russian}

Размер красной строки настраивается через модификацию значения \parindent:

\setlength{\parindent}{1cm}

Размер отступа между строк можно настроить через пакет setspace. Например, отступ размером 1,5 устанавливается через \onehalfspacing.

Нумерация страниц и отступы вокруг страницы

Обычно нужен формат A4 с заданными отступами от разных краёв страницы.

Требования к номеру следующие:

  • Начинался с 2. Первая страница будет титульным листом. Он готовится отдельно.

  • Всегда находился в верхнем правом углу.

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

\RequirePackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\rhead{\thepage}
\setlength{\headheight}{1.5em}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}
\fancypagestyle{plain}{%
    \fancyhf{}%
    \rhead{\thepage}}

Другое форматирование верхних и нижних колонтитулов также можно настроить через этот пакет.

Отступы страницы можно настроить через пакет geometry:

\RequirePackage[a4paper, headsep = 0.5 \headsep, left=2.5cm, right=2.1cm, top=2cm, bottom=2.1cm]{geometry}

Существует полезный пакет layout, которы позволяет визуализировать различные отступы на странице и какие для них определены команды.

Заголовки

По умолчанию заголовки будет отформатированы так как было приведено в примере. Часто бывает нужно не ставить точку в конце номера и другое форматирование. Точку после номера можно отключить через опцию forceheadingpunctuation:

\setdefaultlanguage[indentfirst=true,forceheadingpunctuation=false]{russian}

Настройка форматирования заголовка можно сделать через пакет titlesec. Например, так настраивается формат для \section{...}:

\titleformat{\section}
    {\filcenter\normalsize}
    {\thesection}
    {1ex}{#1}

Выравнивание по центру, размера \normalsize. Добавляется номер \thesection и отступ, равный 1ex. Это размер высота символа x в текущем шрифте. Возможности задания размера достаточно разнообразны и рекомендуется ознакомиться с ними. Такие сочетаний часто могут встречаться в разных советах на форумах или пакетах.

Для целей оформления ВКР команда \subparagraph была выбрана для оформления заголовка приложений. Она редко используется в основном тексте и больше вероятность того что в других пакетах это команда также учтена. По сути \subparagraph логически становится на уровне команды \section в тексте. Это потребует некоторых модификаций в нескольких местах, чтобы правильно отображалось визуальное форматирование. В текстовых редакторах для такой команды уже есть автоматическая поддержка отображения в панели навигации. Это упрощает поиск нужного места в большом документе.

Оглавление и гиперссылки

Для удобства навигации часто нужно составлять оглавление в документе. Оглавление можно настраивать с помощью пакета tocloft. Например, с помощью такой команды можно изменить отступ перед названиями \subparagraph в оглавлении. Так эта команда была выбрана для обозначения приложений и необходимо, чтобы визуально названия были выровнены с названиями \section в оглавлении.

\cftsetindents{subparagraph}{\cftsubsecindent}{0pt}

Просмотр документов в электронном виде позволяет быстро переходить к конкретным местам с помощью гиперссылок. Если вы когда-то просматривали PDF-документ и замечали наличие гиперссылок на разные места в документе по номеру формулы, списка источников или рисунка, то скорее всего документ был сделан с помощью LaTeX/XeLaTeX и замечательного пакета hyperref. С помощью него можно настроить различные аспекты поведения гиперссылок:

\RequirePackage{hyperref}%
\hypersetup{%
    bookmarksnumbered,     % номера section, subsection и т. д. попадали в название закладок в pdf документе. Если эту опцию отключить, то pdf закладки, для приложений, будут с пустым текстом.
    unicode=true,          % русские буквы в закладках PDF
    linktoc=all,           % ссылки на названиях и номерах страниц в toc
    bookmarksdepth=3       % глубина закладок в pdf файле
}%

Если к стартовому примеру добавить использование пакета и генерацию оглавления:

hello_xelatex_toc.tex
\documentclass[12pt, oneside]{extarticle}

\usepackage{polyglossia}
\setdefaultlanguage[indentfirst=true,forceheadingpunctuation=false]{russian}
\setotherlanguages{english}

\IfFontExistsTF{Times New Roman}
{\setmainfont{Times New Roman}
\newfontfamily\cyrillicfont{Times New Roman}[Script=Cyrillic]}
{\setmainfont[Script=Cyrillic]{FreeSerif}}

\IfFontExistsTF{Courier New}
{\setmonofont{Courier New}
\newfontfamily\cyrillicfonttt{Courier New}[Script=Cyrillic]
}
{\setmonofont[Script=Cyrillic]{FreeMono}}

\IfFontExistsTF{Arial}
{\setsansfont{Arial}
\newfontfamily\cyrillicfontsf{Arial}[Script=Cyrillic]
}
{\setsansfont[Script=Cyrillic]{FreeSans}}

\usepackage{hyperref}

\title{Привет XeLaTeX}
\author{Автор}
\date{\today}

\begin{document}

\maketitle

\clearpage

\tableofcontents

\clearpage

\section{Введение}
\subsection{Сгенерированный текст языковой моделью (пунктуация и орфография оригинальная)}

Latex - это система компьютерной вёрстки, разработанная для создания технической и научной документации, а также других видов печатной продукции. Она широко используется в академических кругах, научно-исследовательских институтах и промышленных предприятиях для создания различных документов, включая научные статьи, учебники, технические отчёты и т.д. Latex предоставляет набор инструментов и команд для форматирования текста, составления математических формул, графиков, таблиц и других элементов документа. Одной из главных особенностей Latex является его расширяемость и возможность создания собственных команд и стилей.
{\sloppy

}
\end{document}

Тут важный момент с повторной компиляцией. Если скомпилировать с помощью команды xelatex документ один раз, то оглавление не будет сформировано, а вместо него почти пустая страница:

После повторного запуска будет сгенерировано оглавление с ожидаемой информацией:

Всё из-за того что для формирования оглавления требуется два прохода компиляции. После первого прохода формируется служебная информация для оглавления, которая используется во втором проходе. В PDF-докмуенте по области, в красной рамке, можно кликнуть и перейти к нужному месту.

latexmk же сам запустить несколько раз компиляцию и будет документ с готовым оглавлением. В этом плане проще начать использовать эту команду уже с самого начала вместо xelatex:

latexmk -synctex=1 -latexoption='-halt-on-error -enable-etex' -xelatex  ./hello_xelatex_toc.tex

Оформление рисунков

Есть замечательные пакеты PGFPlots и PGF/Tikz. По использованию PGFPLots уже была статься с описанием основных возможностей (здесь описан процесс построения графиков по табличным данным). Далее будут рассмотрены только основные моменты.

Обычно возникает вопрос со вставкой рисунков и настройки подписей к ним. Для настройки подписей можно использовать пакет caption. Такая команда позволяет изменять формат подписей, логику нумерации к рисункам и таблицам:

% Настройка вида подписи: [ Рис. номер ]. Нумерация рисунков и таблиц в пределах section.
\captionsetup{labelsep=space, hypcap=false, figurewithin=section, tablewithin=section}

Рисунки обычно оформляются в окружении figure:

\begin{figure}[H]
\centering
    ...
\caption{Подпись}
\label{метка для ссылок}
\end{figure}

Тут стоит обратить внимание на опцию [H] из пакета float. По умолчанию из-за алгоритмов TeX рисунки и таблицы могут быть размещены не в том месте, где они определены в разметке. Это сделано для того чтобы их размещение было более удобным для чтения. Рисунок может не помещаться в оставшуюся часть страницы. Часто такое поведение не нужно и необходимо разместить рисунок или таблицу именно так как определено в разметке даже если останется пустое пространство. С другой стороны использование динамического позиционирования с подсказками как хотелось бы чтобы было тоже возможно. Для этого есть дополнительные модификаторы. \label используется в тех случаях, если есть необходимость где-то ссылаться в тексте на рисунок. В организации ссылок может помочь пакет cleveref.

Одно из требований оформления ВКР было указание общего числа рисунков. Сделать это можно следующим образом с помощью пакета totcount:

  1. Создать новый счётчик: \newtotcounter{totfigures}.

  2. Создать новое окружение gostfigure в котором каждый раз к счётчику добавляется 1 \newenvironment{gostfigure}{\stepcounter{totfigures}}{}.

Вариант не единственный и могут существовать другие решения. С определением нового окружения сделано специально, чтобы обозначения того что нужно считать было более явным.  Можно сделать просто команду или попытаться дополнить логику стандартного окружения figure. В том месте где нужно вывести общее количество достаточно написать \total{totfigures}.

Возможности XeLaTeX достаточно богаты в плане программирования, поэтом рассмотрим некоторые примеры того как можно получить рисунки, которые можно менять динамически. Например, динамическая генерация точек на половине сетки заданного размера:

fig1.tex
\documentclass[tikz]{standalone}

\usepackage{tikz}
\usetikzlibrary{math}

\begin{document}
    \begin{tikzpicture}
        \tikzmath { \total = 6; }
        \draw [help lines] (0,0) grid (\total, \total);
        \foreach \row  in {1,2,...,\total}
        \foreach \x in {1,...,\row} {
            \filldraw (\x,\row) circle [radius=0.25];
        }
\end{tikzpicture}
\end{document}

Пример на рис. ниже (можно увеличить):

\total можно поменять на другое значение и получится обновлённый график. Здесь используется standalone класс документа. Его можно использовать для случаев когда таких рисунков много и проводить все вычисления заново не нужно. Один раз создаётся рисунок и сохраняется в формате PDF. Далее он подключается в основной документ через \includegraphics. Дополнительно можно указать свой класс документа на основе которого создаётся основной документ \documentclass[class=<свой_класс_документа>,tikz]{standalone}. Это помогает избежать визуального отличия в шрифтах или размерах.

Обычно при работе над ВКР или каким-то исследованием в области ближе к экспериментальной науке работа идёт итеративно. Сначала идёт этап изучения материала, проведения экспериментов, получения результатов и их оформление. Необходимость оформлять результаты может возникать довольно часто. Возможность строить графики по табличным данным или менять динамически в зависимости от параметров позволяет упростить и автоматизировать эту работу. В случае каких-то уточнений достаточно поменять параметры или данные и заново скомпилировать документ.

Рисунки в виде изображений можно вставлять через \includegraphics. Более подробно об этом.

Оформление таблиц

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

\begin{table}[H]
\centering
\begin{tabular}{|c|c|c|}
\hline
67 & 67 & 7 \\
\hline
\end{tabular}
\end{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 можно нарисовать всю таблицу или её подмножество разными вариантами.

table.tex
\documentclass[14pt, oneside]{extarticle}

\usepackage{polyglossia}
\setdefaultlanguage[indentfirst=true,forceheadingpunctuation=false]{russian}
\setotherlanguages{english}

\IfFontExistsTF{Times New Roman}
{\setmainfont{Times New Roman}
\newfontfamily\cyrillicfont{Times New Roman}[Script=Cyrillic]}
{\setmainfont[Script=Cyrillic]{FreeSerif}}

\IfFontExistsTF{Courier New}
{\setmonofont{Courier New}
\newfontfamily\cyrillicfonttt{Courier New}[Script=Cyrillic]
}
{\setmonofont[Script=Cyrillic]{FreeMono}}

\IfFontExistsTF{Arial}
{\setsansfont{Arial}
\newfontfamily\cyrillicfontsf{Arial}[Script=Cyrillic]
}
{\setsansfont[Script=Cyrillic]{FreeSans}}

\usepackage{float}
\usepackage{pgfplots}
\usepackage{pgfcalendar}
\usepackage{pgfplotstable}

\pgfplotsset{compat=newest}

\pgfplotstableset{use comma,
col sep=comma,
sort,
sort key=name,
sort cmp={string <},
columns/date/.style={column name={Дата}, date type={\day-\month-\year}},
columns/name/.style={string type, column name={Имя}},
columns/value/.style={fixed, zerofill, column name={Значение}, dec sep align},
header=true,
columns/quantity/.style={int detect, column name={Количество}}
}

\begin{document}

\section{Оформление таблиц}

\pgfplotstableread{%
date,name,quantity,value
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
}\data

\begin{table}[H]
\centering
\caption{Пример таблицы с двумя столбцами}
\pgfplotstabletypeset[columns={name,value}]\data
\end{table}

\begin{table}[H]
\centering
\caption{Вся таблица}
\pgfplotstabletypeset\data
\end{table}


\pgfplotstableset{
columns/value/.append style={dec sep align={c|}, column type/.add={|}{|}},
every head row/.style={before row=\hline, after row=\hline},
every even row/.style={after row=\hline},
every odd row/.style={after row=\hline},
every column/.style={column type/.add={|}{}},
every last column/.style={column type/.add={}{|}},
}

\begin{table}[H]
\centering
\caption{Вся таблица с границами}
\pgfplotstabletypeset\data
\end{table}
\end{document}

В \pgfplotstableset выставляются глобальные настройки для всех таблиц. Явно прописываются типы всех столбцов и названия, которые будут отображаться в документе. Настройки можно прописать индивидуально для каждой таблицы \pgfplotstabletypesetfile. Обычно удобно общие настройки прописать сразу. Далее таблица загружается по имени data: \pgfplotstableread{...}\data. Для удобства содержимое таблицы вставлено сразу в разметку документа. Содержание можно заменить на путь к файлу. Несколько раз эта таблица отображается в разных вариантах с разным подмножеством данных. По умолчанию таблицы будут без линий вокруг ячеек как на рис. ниже (изображение можно увеличить):

Стоит обратить внимание на несколько моментов:

  • Дата отображается не так как файле. Изменён порядок с YYYY-MM-DD на DD-MM-YYYY.

  • Строки отсортированы по имени.

  • Значения с плавающей запятой выровнены относительно символа , и дополнены 0 до одинакового числа цифр после запятой.

В итоге таблица выглядит не так как хранится в файле, если просто его прочитать. Выравнивание чисел относительно , придаёт визуально более приятный вид таблице. Таких вариантов как можно менять представление много.

Линии вокруг ячеек необходимо можно добавить модификацией глобальных или локальных настроек следующим образом:

\pgfplotstableset{
columns/value/.append style={dec sep align={c|}, column type/.add={|}{|}},
every head row/.style={before row=\hline, after row=\hline},
every even row/.style={after row=\hline},
every odd row/.style={after row=\hline},
every column/.style={column type/.add={|}{}},
every last column/.style={column type/.add={}{|}},
}

Тут стоит обратить внимание на конструкцию columns/value/.append style={dec sep align={c|}, column type/.add={|}{|}}. Из-за особенностей того как в итоге формируется представление таблиц в XeLaTeX столбец value будет без вертикальных линий. Они отдельно добавляются командой column type/.add={|}{|} и выравнивание теперь происходит относительно dec sep align={c|}. В итоге вертикальные линии с выравниванием относительно , будут сохранены.

Последний пример с отображением длинной таблицы на несколько страниц. Нужно использовать пакет longtable и cleveref:

  \pgfplotstabletypeset[font=\small
  ,begin table = \begin{longtable}
  ,end table = \end{longtable}
  ,every head row/.append style={before  row={%
  \caption{Таблица с разрывом}
  \label{tab:long_table}\\
  \hline
  \endfirsthead
  \caption*{Продолжение таблицы~\cref{tab:long_table}}\\
  \hline
  col 1 & col 2 & col 3\\
  \hline
  \endhead
  }
  }
  ,every first row/.append style={before row ={
    col 1 & col 2 & col 3\\
  \hline
  }
  }
  , columns={id,num,text}
  ]{\loadedtable}

Под \loadedtable может быть любая ранее загруженная таблица (пример есть в репозитории с кодом для этой статьи), либо имя файла со столбцами: id, num, text. Единственное неудобство это необходимость вручную менять номера столбцов, которые должны быть на каждой странице col 1 & col 2 & col 3\\, при изменении их общего количества. Этот момент зависит от требований форматирования. На момент создания этого примера в ВКР необходимо было нумеровать столбцы в длинных таблицах.

Оформление списка источников

Хотя для XeLaTeX разработан стандартный способ добавлять и хранить список источников через BibTeX, Biber. Автору проще всего было вставлять такой список через стандартное окружение:

\begin{thebibliography}{11}
\bibitem{Bard} Бард Й. Нелинейное оценивание параметров / Й. Бард, Москва: Статистика, 1979. 349 c.
\end{thebibliography}

В BibTeX сложно бороться с нужным оформлением ссылок и там были определённые проблемы с unicode из-за чего какая-нибудь точка пропадал, неправильная сортировка и т. п. Biber более современный в этом плане. Возможно, на текущий момент все проблемы решены и этими системами можно пользоваться. По умолчанию номер будет в формате [1]. Его можно переопределить с помощью команд:

\makeatletter
\renewcommand\@biblabel[1]{#1.}
\makeatother

#1 это номер источника. В требованиях к ВКР был и подсчёт общего числа источников, то можно слегка модифицировать поведение команды \bibitem:

\pretocmd{\bibitem}{\stepcounter{totreferences}}{}{}

Здесь добавляется дополнительная логика перед каждым вызовом команды \bibitem, а именно увеличение общего счётчика числа источников.

С thebibliography процесс простой. Вставляется текст с нужным порядком символов и добавляется идентификатор \bibitem, который используется в тексте при цитировании. Для этого удобно использовать внешние системы.

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

Программирование в XeLaTeX

Это дополнительные возможности XeLaTeX, которые можно использовать в различных целях. В требованиях к ВКР необходимо было указать общее число рисунков, таблиц и т. п. в реферате. Выше уже были примеры того как считать это количество, но остаётся вопрос как это напечатать в тексте. Проблема здесь в склонении слов. Например, 1 рисунок, 2 рисунка, 5 рисунков. Форма слова меняется в зависимости от количества.

Решить такую задачу можно с помощью следующих команд из пакета etoolbox. Алгоритм был основна на этой статье.

Определение окончаний
\newcommand*{\figoneendian}{\total{totfigures}~рисунок}
\newcommand*{\figfourendian}{\total{totfigures}~рисунка}
\newcommand*{\figfiveendian}{\total{totfigures}~рисунков}

% Расчёт значений для общего числа рисунков
\newcommand*{\printtotfig}[1][,]{%
\boolfalse{less11Q}%
\boolfalse{greater19Q}%
\setcounter{Ptempnumexpr}{0}%
\addtocounter{Ptempnumexpr}{\numexpr\totvalue{totfigures}-100*(\totvalue{totfigures}/100)}%
\ifnumequal{\totvalue{totfigures}}{-1}%
{??#1}%
{\ifnumequal{\totvalue{totfigures}}{0}{}%
    {\ifnumless{\value{Ptempnumexpr}}{11}{\booltrue{less11Q}}{}%
        \ifnumgreater{\value{Ptempnumexpr}}{19}{\booltrue{greater19Q}}{}%
        \ifboolexpr{bool {less11Q} or bool {greater19Q}}%
        {\setcounter{Pwordindex}{0}%
            \addtocounter{Pwordindex}{\numexpr\value{Ptempnumexpr}-10*(\value{Ptempnumexpr}/10)}%
            \ifnumequal{\value{Pwordindex}}{1}% Окончание для 1
            {\figoneendian#1\ }%
            {\ifnumequal{\value{Pwordindex}}{2}% Окончание для 4
                {\figfourendian#1\ }%
                {\ifnumequal{\value{Pwordindex}}{3}%
                    {\figfourendian#1\ }%
                    {\ifnumequal{\value{Pwordindex}}{4}%
                        {\figfourendian#1\ }%
                        {\figfiveendian#1\ }% Окончание для 5
                    }%
                }%
            }%
        }%
        {\figfiveendian#1\ }% Окончане для 5
    }%
}%
}

Подробно разбирать сам пример не будем т. к. это уже более продвинутый уровень и по мере использования XeLaTex некоторые конструкции станут более понятными. Если кратко, то принцип работы такой:

  1. Определяются команды для печати нужных слов в разных формах: \figoneendian, \figfourendian, \figfiveendian.

  2. Проверяется определено ли значения для счётчика общего числа. Если нет, то выводится ??.

  3. Определяется цифра на которую оканчивается число и выбирается соответсвующее окончание.

Команда \printtotfig используется в тех случаях когда нужно вывести соответсвующую информацию.

Выводы

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

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

Для дальнейшего изучения можно посмотреть в сторону koma-script. Это более современные аналоги популярных классов документов в которых уже многие аспекты форматирования учтены в опциях.

Комментарии (31)


  1. dyadyaSerezha
    30.09.2023 18:11
    +1

    но когда дело касается большого количества формул с автоматической нумерацией, рисунков, схем и таблиц, то оформление превращается в ту ещё задачу

    Вот интересно, на каком же количестве рисунков, схем и таблиц Word ломается или глючит?


    1. Al_A Автор
      30.09.2023 18:11
      +3

      Я думаю зависит от версии и конфигурации компьютера.


      1. v0br23
        30.09.2023 18:11
        +1

        Мне кажется Word дает все что нужно начиная с 2013. По крайней мере дает то, на что Вы акцентируете внимание в своей статье.


    1. Aquahawk
      30.09.2023 18:11

      как только в середину из 50 нумерованных утверждений вам нужно добавить ещё одно, соответственно 25 шт сдвинуть по нумерации, и во всех ссылках на них тоже поменять нумерацию


      1. MikalaiR
        30.09.2023 18:11
        +1

        В Word вполне ссылаться на конкретный абзац (в т.ч. элемент нумерованного списка), и ссылки обновляются без проблем автоматически.


        1. joshhhab
          30.09.2023 18:11

          StarOffice, OpenOffice это делал без проблем ещё 20 лет назад и продолжает делать также и LibreOffice сейчас. Сам пользовался этим ещё тогда и работало всё отлично


      1. dyadyaSerezha
        30.09.2023 18:11
        +1

        Хмм, удивляюсь, как же мы году в 92 в Ворде 5 или 6, на DOS с 1 MB (!) памяти делали документы с десятками нумерованных картинок со ссылками и прочим, по 200 страниц, и все это прекрасно работало.


    1. gpin
      30.09.2023 18:11
      +1

      Не ломается, но просто тормозит (i7-7700HQ, 20гб RAM, файлик на ~65 страниц с большим числом стилей, иллюстраций, внутренними ссылками, ссылками в Zotero)


  1. mobi
    30.09.2023 18:11
    +2

    А почему XeTeX, а не LuaTeX? Вроде бы последний сейчас гораздо чаще используется, обладает бОльшим количеством возможностей и поддерживает почти всё, что умеет XeTeX?


    1. Al_A Автор
      30.09.2023 18:11
      +1

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


  1. MikalaiR
    30.09.2023 18:11

    XeLaTeX это ведь всего лишь реализация LaTeX. Все эти примеры (за исключением, пожалуй, шрифтов), будут работать так же и LuaLaTeX и в pdfLatex.


    1. Al_A Автор
      30.09.2023 18:11
      +1

      Один из основных вопросов при написании текста это простой способ менять шрифт. В своё время было найдено, что в XeLaTeX это реализовано.


      1. PereslavlFoto
        30.09.2023 18:11
        +2

        Это во всех латехах реализовано — через шрифтовые пакеты со свободными шрифтами.


        1. Al_A Автор
          30.09.2023 18:11

          Иногда бывает нужно конкретный шрифт использовать, если от нас не зависит его выбор. А шрифт может быть несвободный.


          1. PereslavlFoto
            30.09.2023 18:11
            -1

            Да как же его использовать, если он несвободный? Закон запрещает использовать такие шрифты без покупки права на его использование.


            1. erogov
              30.09.2023 18:11

              Не поверите, купить.


              1. PereslavlFoto
                30.09.2023 18:11
                -1

                Покупать лицензию для свободного использования такого шрифта окажется слишком дорого.


  1. Kerrigan
    30.09.2023 18:11
    +1

    Я бы порекомендовал попробовать tectonic (https://tectonic-typesetting.github.io/) он делает всё то же самое, но не надо устанавливать целый дистрибутив, всего лишь 1 бинарник, который докачает все нужные пакеты сам


    1. lazy_val
      30.09.2023 18:11

      Вот это надо попробовать кстати, texlive-full 6+ гигов это нечто


  1. vk6677
    30.09.2023 18:11
    +2

    Проблема всех *TeX это что бы коллеги по работе их освоили. Когда работаешь не один с документацией.


  1. lz961
    30.09.2023 18:11

    *TeX -- системы компьютерной верстки. Поэтому актуален вопрос, какие издательства и издания используют XeLaTeX и принимают от авторов рукописи в XeLaTeX-формате?


    1. Al_A Автор
      30.09.2023 18:11

      По-разному бывает. Иногда в журналах есть свои шаблонах и нужно использовать только его. Больше всего свободы, когда нужен PDF, а как он получен не важно.


      1. lz961
        30.09.2023 18:11

        Вот только в том и дело, что шаблоны, в основном в LaTeX, но не XeLaTeX. Получается, что фактический удел XeLaTeX -- научный самыздат (рукописи), в т.ч. диссертации?


        1. PereslavlFoto
          30.09.2023 18:11

          Неужели хелатех уже не может обработать команды латеха?


          Удивительно. Раньше было иначе.


          1. lz961
            30.09.2023 18:11

            Какая разница, если редакция сама компилирует присланный файл и использует для этого LaTeX?


            1. PereslavlFoto
              30.09.2023 18:11

              Не вижу проблемы. Если вы хотите использовать какую-то специальную команду, которая доступна только в хелатехе, то для журнальной публикации надо избегать такой команды, вот и всё.


        1. Al_A Автор
          30.09.2023 18:11

          Скорее XeLaTeX нужно использовать когда вам нужен простой выбор шрифтов и поддержка разных языков. Можно создавать любые тексты.


          1. PereslavlFoto
            30.09.2023 18:11

            Поддержку разных языков обеспечивает любой латех с самых давних времён.


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


    1. PereslavlFoto
      30.09.2023 18:11

      Многие академические журналы так поступают.


      1. lz961
        30.09.2023 18:11

        Я сталкивался только с такой альтернативой: LaTeX (но не XeLaTeX) с заранее приготовленным стилевым файлом, либо шаблон в MS Word.


  1. lz961
    30.09.2023 18:11

    del