大きなドキュメントのコンパイル時間を短縮するために、部分的なコンパイルに興味を持ちました。(私はすでに「事前コンパイル」のプリアンブル形式fmt
ファイルについて知っており、それも使用するつもりです)。
\input
最初の問題は、 の代わりに(ネストされた) を使用するファイルのスケルトンを継承しているため\include
、 を実際に使用できないことです\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 ページで終わるセクション 2 を書いているとします。余白を除くと、次のようになります (クリックするとフルサイズで表示されます)。
私がやりたいのは、環境のコマンドで関心領域を「ラップ」することです。次のようにします。
...
\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 ファイルをリロードするときにスクロールバーの位置をそのまま維持します。そのため、部分コンパイルと完全コンパイルを切り替えても、スクロールせずに PDF 内の同じ場所にフォーカスを維持できます。
\input
このコマンド/環境を/の任意のネストに含めることができればよいのです\include
が、ページ番号やその他の変更 (フォント サイズなど) を追跡したいので、最初は完全なコンパイルが必要で、部分的なコンパイルはその後でのみ可能になると思います。ただし、書き込みのプロセス (および部分的なコンパイルのプレビュー) で、この「セクション 2」の内容が 1 ページを超えるサイズになった場合、新しいページ番号を計算することは問題にならないと思います。
もちろん、必ずしも空白ページを挿入したり、ページ番号を追跡したりしなくてもよいもので満足します。ただし、部分的なコンパイルの実行中に、Latex が関心のない部分をすべて「スキップ」して、関心領域に到達するまでの間にすべてのマクロ (およびテキスト/画像) を処理する必要がないようにする必要があります (したがって、大幅な速度向上が期待できます)。
これを実行するコマンドまたは環境を備えたパッケージはありますか?
PS: 検索中、関連するもの (つまり、地域コンパイルが可能なもの) をいくつか見つけましたが、実際には適用できませんでした (それらは Latex 自体のパッケージではないため)。
- オークション(経由複数の TikZ 画像を使用して LaTeX コンパイルを高速化するにはどうすればよいですか?) - これは Emacs の「プラグイン」ですが、私は使ったことがありません。.pdf 内の連続したコンテンツではなく、個々の方程式やグラフを独立した画像として取得するのに最適なようです。
- ウィジーテックス(経由カスタム フォーマット ファイル: 使用されているファイルの 1 つが変更されるたびに、「プリコンパイルされたプリアンブル」の生成を自動化する方法) - これも Emacs の「プラグイン」ですが、
latex
DVI ファイルでのみ機能します (ただし、私は PDF を使用しておりpdf/xe/lualatex
、PDF で作業したいと考えています)
編集: コメントに従って、パッケージを使用して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
分かりました。短くて申し訳ありませんが、この問題に一致する例を投稿することができました。\AtBeginDocument に \comment または \begin{comment} を追加しますか?; パッケージを使用し{comment}
、その修正バージョンを定義します\excludecomment
。これにより、次のものを使用できます。
\end{SKIPLINES} % the below range will be typeset:
\lipsum[5]
\begin{SKIPLINES}
... ( \end
opens、\begin
closes に注意) を使用して、プロセスが で実行される場合にタイプセットされる部分 (残りは空白) を定義しますpdflatex "\let\doskip\relax\input{test.tex}"
。
リンクされた解決策も少し問題があることは承知しています (ファイル内でも機能しません\input
)。そのため、より詳しい回答が最終的に出てくることを期待しています。また、この回答を更新し、リンクされた回答を修正して、この質問により適したものにする時間も将来あることを願っています。