部分編譯命令/環境?

部分編譯命令/環境?

為了加快大型文檔的編譯時間,我對部分編譯感興趣。 (我已經知道“預先編譯”前導碼格式fmt檔案並打算使用它)。

第一個問題是我繼承了文件的骨架,它使用(嵌套)\input而不是\includes,所以我不能真正使用\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 頁的空白頁面evinceevince我在部分編譯和完整編譯之間切換,我也可以將焦點保持在PDF 中的相同位置,而無需滾動。

我希望我可以將此命令/環境包含在\input/的任意嵌套中\include;因為我希望它能夠追蹤頁碼和其他更改(例如字體大小),所以我想首先需要完整的編譯,只有隨後才可能進行部分編譯。不過,我想,如果在寫作過程中(以及部分編譯預覽),這個「第二節」的內容增長到超過一頁的大小,那麼計算新頁碼就不成問題了。

當然,我會滿足於不一定插入空白頁,也不跟踪頁碼的東西 - 只要它可以以某種方式使 Latex 在部分編譯運行期間“跳過”所有不感興趣的部分,所以它不必處理到達感興趣區域的所有巨集(和文字/圖像)(因此,可以預期顯著的加速)。

是否有包含執行此操作的命令或環境的軟體包?

PS:在我的搜尋過程中,我只發現了一些相關的東西(即可以進行區域編譯),但並不真正適用(因為它們本身不是 Latex 的套件):


編輯:根據評論,我嘗試使用 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也不能在文件內工作),所以我希望最終會出現一個更博學的答案;我也希望將來有時間更新這個答案,修改連結的答案,使其更適合這個問題。

相關內容