Вопросы о компиляции субфайлов

Oct 05 2020

Допустим, у меня есть документ:

% Preamble
\usepackage{subfiles}
% Preamble
\begin{document}
    \maketitle
    \subfile{FileA}
    \subfile{FileB}
    \subfile{FileC}
\end{document}

Некоторые вопросы:

  1. Предположим, что файл еще не скомпилирован, и я компилирую, скажем, FileA. Появится ли когда-нибудь заголовок или мне нужно будет запустить основной файл, чтобы заголовок появился?
  2. Насколько я понимаю, подфайлы компилируются независимо от остальных подфайлов, т.е. компилируется только этот раздел, в то время как компиляция основного файла такая же, как если бы я использовал \inputили просто имел весь код TeX из подфайлов. Есть ли способ скомпилировать некоторые подфайлы одновременно, оставив другие подфайлы нетронутыми (например, результаты из подфайлов не меняются, а не отображаются в pdf)?
  3. Если я компилирую подфайл, и результаты нескольких подфайлов находятся на той же странице, что и этот подфайл, будут ли результаты из последующих подфайлов «перезаписаны» теми из-за компиляции этого подфайла?
  4. Я только что скомпилировал подфайл, по какой-то причине время компиляции такое же, как и при компиляции основного файла. Это должно случиться?
  5. Отредактируйте до 4: я просто закрыл основной файл и запустил подфайл, оказалось, что результатом является компиляция всего файла, а не только подфайла, что кажется противоречащим тому, что подфайлы «компилируются сами по себе». Может кто-нибудь уточнить?

Кстати, я использую TeXStudio.

Ответы

1 gernot Oct 06 2020 at 18:18

Слишком долго для комментариев.

По вопросу 1: Заголовок появляется в документе, содержащем \maketitleкоманду. Если он находится в основном файле, и вы компилируете какой-либо подфайл, то заголовок не появится, потому что подфайл берет только преамбулу из основного файла и игнорирует остальные.

По вопросу 2: Этот вопрос не относится к конкретному subfiles, и в основном ответ - «нет». Насколько мне известно, ни один из процессоров TeX не выполняет кеширование и набор только тех частей, которые были изменены. Некоторые пакеты предоставляют возможность кэшировать результат интенсивных вычислений для следующего запуска (например, экстернализация в pgfplots). В большем масштабе вы можете использовать инструменты для создания проекта, например make, antи многое другое, чтобы компилировать только те части проекта, которые были изменены. Но для файлов TeX он все равно будет вызывать текстовый процессор, который набирает весь файл.

По вопросу 3: я думаю, что это неправильное представление о том, что делает TeX и пакет subfiles. При наборе основного документа он загрузит texисходники подфайлов, игнорируя любые pdf. Таким образом, набор любого из подфайлов создаст новые pdfs для подфайлов, но оставит pdf основного файла нетронутым. TeXStudio может скрыть тот факт, что вы редактируете texфайлы, которые на лету набираются pdfдля просмотра.

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

По вопросу 5: Вероятно, это проблема TeXStudio и / или использования. TeXStudio, вероятно, всегда набирает файл, установленный как «текущий», и, вероятно, не знал, что вы хотите, чтобы он набирал только подфайл.

Общая рекомендация: начните с одного tex-файла. Если он становится слишком большим, структурируйте его, используя \inputили \include. Только если вам действительно нужно иметь возможность самостоятельно набирать часть документа, начните экспериментировать с такими пакетами, как subfiles.