Сборка большого документа из нескольких файлов (input и include)

Зачем делить большой проект на отдельные файлы

Дипломная работа, магистерская диссертация или монография содержит от 60 до 200+ страниц, сотни формул, рисунков и таблиц. Вести такой объем в одном файле main.tex неудобно: поиск нужного абзаца превращается в бесконечный скроллинг, а случайная ошибка в одном месте ломает компиляцию всей работы.

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

Разница между командами \input и \include

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

  • \input{путь/к/файлу} — буквально вставляет содержимое файла в текущее место документа «как есть». Не создает разрывов страниц. Идеально для преамбулы (\input{preamble.tex}), таблиц или фрагментов текста внутри раздела.
  • \include{путь/к/файлу} — вставляет файл, всегда предваряя и завершая его командой \clearpage (начиная новую страницу). Создает собственный вспомогательный файл .aux, что позволяет использовать механизм выборочной компиляции. Идеально для крупных глав (chapter).

Разбить диплом на несколько файлов latex: эталонная иерархия папок

Вот проверенная академическая структура проекта (разбить диплом на несколько файлов latex), рекомендованная при оформлении диплома по ГОСТ в LaTeX:

Структура файлов
my-diploma/
├── main.tex             % Главный файл со сборкой
├── preamble.tex         % Все пакеты и настройки ГОСТ
├── biblio.tex           % Список литературы (thebibliography)
├── chapters/            % Папка с главами работы
│   ├── 00-intro.tex     % Введение
│   ├── 01-analysis.tex  % Глава 1: Анализ предметной области
│   ├── 02-design.tex    % Глава 2: Проектирование системы
│   ├── 03-impl.tex      % Глава 3: Реализация и тестирование
│   └── 04-concl.tex     % Заключение
└── appendices/          % Приложения с кодом
    └── app-a-code.tex

В главном файле main.tex сборка выглядит компактно и наглядно:

main.tex
\documentclass[a4paper,14pt]{extreport}
\input{preamble} % Подключаем преамбулу

\begin{document}
\include{chapters/00-intro}
\include{chapters/01-analysis}
\include{chapters/02-design}
\include{chapters/03-impl}
\include{chapters/04-concl}

\input{biblio} % Список литературы: окружение thebibliography
\end{document}

Класс extreport нужен для кегля 14 пт: стандартный report эту опцию игнорирует. Список литературы лежит в biblio.tex в виде окружения thebibliography: BibTeX и Biber в Labkeeper пока не запускаются, а gost-numeric — стиль biblatex, а не BibTeX, поэтому связка \bibliographystyle{gost-numeric} и \bibliography{biblio} не сработает даже локально.

Команда include latex и выборочная компиляция через includeonly

Когда вы работаете над конкретной главой, нет смысла каждый раз перекомпилировать весь стостраничный документ. Команда include latex поддерживает волшебную директиву \includeonly в преамбуле:

LaTeX
% Компилировать только главу 2: номера и ссылки других глав
% берутся из .aux-файлов прошлой полной сборки
\includeonly{chapters/02-design}

Благодаря отдельным .aux-файлам LaTeX сохранит верные перекрестные ссылки и сквозные номера из других глав, если перед этим документ собирался целиком, а сборка станет заметно быстрее. В Labkeeper служебные файлы между сборками сохраняются не всегда, поэтому перед финальной сборкой уберите \includeonly и соберите документ целиком.

Продвинутый подход: пакет subfiles для автономной компиляции глав

Пакет subfiles позволяет компилировать каждую главу как автономный независимый документ, так и в составе единого проекта main.tex без изменения кода. Автономная сборка главы работает при локальной установке LaTeX: в Labkeeper собирается весь проект целиком, отдельный файл собрать нельзя.

Практические советы

1

Не указывайте расширение .tex

При вызове \include{chapters/intro} не дописывайте расширение .tex: LaTeX подставит его автоматически.

2

Запрет вложенных include

Внутри файла, подключенного через \include, нельзя вызывать другой \include. Для вложенных подфайлов используйте команду \input.

Попробуйте прямо сейчас

Организуйте структуру ВКР в Labkeeper

Онлайн-редактор с поддержкой многофайловых проектов LaTeX, быстрым переключением глав и сборкой PDF по кнопке «Выполнить».

Другие статьи