Частичные команды/среда компиляции?

Частичные команды/среда компиляции?

В целях ускорения времени компиляции больших документов я заинтересовался частичной компиляцией. (Я уже знаю о «предварительной компиляции» fmtфайлов формата преамбулы и собираюсь использовать и ее).

Первая проблема заключается в том, что я унаследовал скелет файлов, в которых \inputвместо \includes используются (вложенные) s, поэтому я не могу использовать \includeonly.

Чтобы продемонстрировать, чего я хочу, рассмотрим следующую модель MWE — для простоты «плоскую»/одинарную test.tex:

\documentclass[11pt]{book}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{lipsum}

% https://tex.stackexchange.com/questions/4139/how-to-change-font-size-mid-document
% only 10, 11 and 12
\def\changeBaseFontSize#1{%
  \let\orignewcommand\newcommand
  \let\newcommand\renewcommand
  \makeatletter
  \input{bk#1.clo}%
  \makeatother
  \let\newcommand\orignewcommand
}

\usepackage{lastpage}
% page number override for book class:
\makeatletter
\def\@evenhead{\thepage\ of\ \pageref{LastPage}\hfil\slshape\leftmark}%
\def\@oddhead{{\slshape\rightmark}\hfil\thepage\ of\ \pageref{LastPage}}%
\makeatother
% \usepackage{fancyhdr}
% \pagestyle{plain}
% \lhead[\thepage\ of \pageref{LastPage}]{}
% \rhead[]{\thepage\ of \pageref{LastPage}}


\begin{document}
\frontmatter
\clearpage
\mainmatter

\chapter{Some chapter}
\section{Section One}
\lipsum[1-145]

Changing the FONT here... \changeBaseFontSize{12}

\lipsum[20]
\lipsum[23]


\section{Section Two}
\lipsum[35]

Changing the FONT here... \changeBaseFontSize{11}

\lipsum[38]


\section{Section Three}
\lipsum[1-145]


\end{document}

В результате получается документ объемом 65 страниц; предположим, я пишу раздел два, который оказывается на 33-й странице и выглядит вот так, за исключением полей (кликните для просмотра в полном размере):

тест.png

Мне бы хотелось «обернуть» интересующую меня область в команды окружения, например, так:

...
\lipsum[23]


\begin{PartialPreview} % PSEUDO
\section{Section Two}
\lipsum[35]

Changing the FONT here... \changeBaseFontSize{11}

\lipsum[38]
\end{PartialPreview} % PSEUDO


\section{Section Three}
...

На этом этапе, после компиляции (управляемой либо через командную строку, либо просто с помощью команд/среды «PartialPreview»), я бы хотел, чтобы Latex сгенерировал документ, первые 32 страницы которого будут пустыми; страница 33 будет выглядеть так:

тест1.png

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

Я бы хотел включить эту команду/среду в произвольную вложенность \input/ \include; и поскольку я хочу, чтобы она отслеживала номера страниц и другие изменения (например, размер шрифта), я бы предположил, что сначала потребуется полная компиляция, а частичная компиляция будет возможна только впоследствии. Но тогда, я думаю, не будет проблемой вычислить новые номера страниц, если в процессе написания (и предварительного просмотра частичной компиляции) содержимое этого "раздела два" вырастет за пределы одной страницы.

Конечно, я бы согласился на что-то, что не обязательно вставляет пустые страницы и не отслеживает номера страниц, — при условии, что это каким-то образом заставит Latex «пропустить» все неинтересные части во время частичной компиляции, чтобы ему не приходилось обрабатывать все макросы (и текст/изображения) на пути к интересующей области (и, таким образом, можно было бы ожидать значительного ускорения).

Есть ли пакет с командами или средами, которые это делают?

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


EDIT: согласно комментариям, я попытался использовать package commentи добавить это в конце преамбулы:

\newenvironment{PartialPreview}{}{}
\ifx\doskip\relax
  \typeout{DOSKIP}
  \usepackage{etoolbox}
  \usepackage{comment}
  % https://tex.stackexchange.com/questions/14135/how-to-automatically-add-text-immediately-after-begindocument
  %\AtBeginDocument{\comment} % ! Extra \endgroup.
  %\AtBeginDocument{\begin{comment}} % Runaway argument? ! File ended while scanning use of \next.
  %\AfterEndPreamble{\comment} % ! Extra \endgroup.
  \AfterEndPreamble{\begin{comment}} % Runaway argument? ! File ended while scanning use of \next.
  %\AtEndDocument{\endcomment}%{\end{comment}}
\fi

... поэтому мне не пришлось бы вручную поддерживать \begin{comment}начало документа, и я мог бы управлять предварительным просмотром из командной строки через pdflatex "\let\doskip\relax\input{test.tex}"; к сожалению, это не работает — сообщения об ошибках добавляются в виде %комментариев.

решение1

Я использую xemacsс AUC-TeX (есть пакет emacsи для обычного, но я им не пользовался). Он предлагает команды для обработки текущего файла многофайлового документа или только отмеченной области. Большинство ссылок за пределами обработанной части будут отображаться как неопределенные, но для быстрого просмотра этого достаточно.

Если у вас есть \include{...}файлы, вы можете указать \includeonly{list,of,files,to,include}, и обработка полного документа даст вам только запрошенные файлы, заполняя перекрестные ссылки извне из предыдущих запусков (т. е. предполагается, что номера страниц не меняются, нет новых \label{...}, нет изменений в нумерации глав/разделов/...).

решение2

Хорошо, извините за краткость; но мне удалось разместить пример, соответствующий этой проблеме, наДобавляете \comment или \begin{comment} в \AtBeginDocument?; он использует {comment}пакет и определяет его измененную версию \excludecomment; таким образом, что можно использовать:

\end{SKIPLINES} % the below range will be typeset:
\lipsum[5]
\begin{SKIPLINES}

... (обратите внимание на \endоткрывающиеся и \beginзакрывающиеся элементы) для определения частей, которые будут набраны (в то время как остальные будут пустыми), если процесс запущен с помощью pdflatex "\let\doskip\relax\input{test.tex}".

Я знаю, что связанное решение также немного проблематично (оно \inputтакже не работает внутри файлов), поэтому я надеюсь, что в конечном итоге появится более эрудированный ответ; я также надеюсь, что в будущем у меня будет время обновить этот ответ, изменив связанный ответ так, чтобы он лучше соответствовал данному вопросу.

Связанный контент