Сборка большого документа из нескольких файлов (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 сборка выглядит компактно и
наглядно:
\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 в преамбуле:
% Компилировать только главу 2: номера и ссылки других глав
% берутся из .aux-файлов прошлой полной сборки
\includeonly{chapters/02-design}
Благодаря отдельным .aux-файлам LaTeX сохранит верные
перекрестные ссылки и сквозные номера из других глав, если перед этим документ собирался
целиком, а сборка станет заметно быстрее. В Labkeeper служебные файлы между сборками сохраняются
не всегда, поэтому перед финальной сборкой уберите \includeonly и соберите документ
целиком.
Продвинутый подход: пакет subfiles для автономной компиляции глав
Пакет subfiles позволяет компилировать каждую главу
как автономный независимый документ, так и в составе единого проекта
main.tex без изменения кода. Автономная сборка главы работает при локальной
установке LaTeX: в Labkeeper собирается весь проект целиком, отдельный файл собрать нельзя.
Практические советы
Не указывайте расширение .tex
При вызове \include{chapters/intro} не дописывайте расширение .tex:
LaTeX подставит его автоматически.
Запрет вложенных include
Внутри файла, подключенного через \include, нельзя вызывать другой
\include. Для вложенных подфайлов используйте команду \input.