為了加快大型文檔的編譯時間,我對部分編譯感興趣。 (我已經知道“預先編譯”前導碼格式fmt
檔案並打算使用它)。
第一個問題是我繼承了文件的骨架,它使用(嵌套)\input
而不是\include
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 頁 - 看起來像這樣,減去邊距(點擊查看全尺寸):
我想做的是將感興趣的區域「包裝」在環境命令中,如下所示:
...
\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頁是這樣的:
……接下來是最多第 65 頁的空白頁面evince
。evince
我在部分編譯和完整編譯之間切換,我也可以將焦點保持在PDF 中的相同位置,而無需滾動。
我希望我可以將此命令/環境包含在\input
/的任意嵌套中\include
;因為我希望它能夠追蹤頁碼和其他更改(例如字體大小),所以我想首先需要完整的編譯,只有隨後才可能進行部分編譯。不過,我想,如果在寫作過程中(以及部分編譯預覽),這個「第二節」的內容增長到超過一頁的大小,那麼計算新頁碼就不成問題了。
當然,我會滿足於不一定插入空白頁,也不跟踪頁碼的東西 - 只要它可以以某種方式使 Latex 在部分編譯運行期間“跳過”所有不感興趣的部分,所以它不必處理到達感興趣區域的所有巨集(和文字/圖像)(因此,可以預期顯著的加速)。
是否有包含執行此操作的命令或環境的軟體包?
PS:在我的搜尋過程中,我只發現了一些相關的東西(即可以進行區域編譯),但並不真正適用(因為它們本身不是 Latex 的套件):
- 澳科特克斯(透過如何用幾張 TikZ 圖片加速 LaTeX 編譯?) - 這是 Emacs 的一個“插件”,我從未使用過;似乎最好將單一方程式或圖表作為獨立圖像,而不是 .pdf 中的連續內容
- 惠茲特克斯(透過自訂格式檔案:每當其中使用的檔案之一發生變更時,如何自動產生“預編譯前導碼”) - 又是一個 Emacs 的“插件”,但它只適用於
latex
DVI 檔案(當我使用pdf/xe/lualatex
並希望使用 PDF 時)
編輯:根據評論,我嘗試使用 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
也不能在文件內工作),所以我希望最終會出現一個更博學的答案;我也希望將來有時間更新這個答案,修改連結的答案,使其更適合這個問題。