12

最近の Tex/Latex のシステムでさえ、後の実行を高速化するためにキャッシュを使用しないのはなぜだろうか。1 つのコンマ* を修正するたびに、Latex を呼び出すのにほぼ同じ時間がかかります。これは、すべての画像ファイルを読み込んで変換する必要があるためです。

(* 小さなコンマを変更するだけでも構造全体に影響を与える可能性があることはわかっていますが、もちろん、適切に記述されたキャッシュ形式がその影響を確認できます。また、高速である限り、100% の正確性が必要とされない状況もあるかもしれません。 .)

Tex の言語には、これを複雑または不可能にする何かがありますか? それとも、Tex の元の実装では、これが必要なかっただけですか?

しかし一方で、これが他の人々をあまり悩ませず、ある種のキャッシング (または Tex ファイルをより高速に解析できる形式への透過的な変換)を持つfork を開始したのはなぜでしょうか?

以降の Latex の実行を高速化するためにできることはありますか? すべてのものを chapterXX.tex ファイルに入れてからコメントアウトする以外は?

4

6 に答える 6

8

TeXがどのように機能するかを理解してみましょう。次のように書くとどうなりますか?

tex.exe myfile.tex

TeXはファイルをバイトごとに読み取ります。まず、TeXは各文字をペアに変換し<category, ascii-code>ます。各文字にはカテゴリコードとASCIIコードがあります。カテゴリコードは、文字が開始中括弧({)または数学モードへの入り口($)、記号マクロ(~たとえば)または文字(A-Za-z)であることを意味します。

TeXがカテゴリコード11(文字)または12(その他の記号:数字、コンマ、ピリオド)の文字を取得した場合、TeXは段落を開始します。すべての段落をキャッシュしたい。

ドキュメント内で何かを変更したとします。TeXは、変更後のすべての段落が同じであることをどのように確認できますか?いくつかの文字のカテゴリを変更した可能性があります。私はあなたがいくつかのマクロの意味を変えたのです。または、どこかを削除}して現在のフォントを変更しました。

段落が同じであることを確認するには、段落内のすべての文字が同じであること、すべての文字カテゴリが同じであること、現在のフォントが同じであること、すべての数学フォントが同じであること、およびいくつかの値が同じであることを確認する必要があります内部変数は同じです(たとえば、、、、、、、、、、、、... \hsize、........ )\vsize\pretolerance\tolerance\hypenpenaltyexhyphenpenalty\widowpenalty\spaceskip

変更前のすべての段落が同じであることだけを確認できます。ただし、この場合、各段落の後にすべての状態を保持する必要があります。

システムSuperCachedTeXは非常に複雑です。ではない?

于 2010-04-28T11:50:34.167 に答える
4

pdftex を使用している場合は--draftmode、最初の実行時にコマンド ラインで使用できます。これは、pdftex に PDF を生成しないように指示します。

もちろん、多くのものをキャッシュすることができます (たとえば、グラフィックス情報など)。起動時に TeX のかなり複雑な初期化があり、1 回の TeX の実行は常に正確に 1 つの PDF が書き出されることを意味します。キャッシュを行うには、データをメモリに保持する必要があります (効率的です)。

IPC を使用してデーモンと通信し、キャッシュされた情報を取得できます。しかし、それには多くのプログラミングが必要です。TeX は通常の目的では非常に高速であるため、実際にはあまりメリットがありません。しかし一方で、これは良い質問です。キャッシングの恩恵を受けた 10 時間以上実行される LaTeX の実行 (現在のハードウェア上で) を見たからです。

于 2010-04-28T07:49:48.643 に答える
3

厳密には関連していない、さらに別の答え:

LaTeX マクロ\include{...}を使用して\includeonly{}、ドキュメントのサブセットのみを再実行できます。しかし、これはキャッシュではなく、完全なドキュメントを提供するものでもありません。

于 2010-04-28T12:18:57.813 に答える
2

preview-latex などのソリューションがあり、高速化のために専用のフォーマット ファイルに事前にコンパイルされます。TeX はページをローカルに最適化することを覚えておく必要があります。特定のページで修正される素材のエンジン レベルでの概念はないため、単に「1 ページを TeX に再変換する」ことはできません。

于 2010-04-28T06:10:17.817 に答える
1

Texには、フォーマットファイルという名前のキャッシュ機能があります。Texの状態を表す問題のAlexeyの貴重な要約のペースで、ページの取り出し後に編集を再開できるようにするためにそれらを使用できるはずです。

主な問題は、ページブレークが段落または浮動小数点数に影響を与えることです。これらはテキストの特定のポイントでは発生しない可能性がありますが、呼び出されたときに渡された一時的な状態に応じて呼び出されたマクロの実行で発生する可能性があります。

したがって、「ブレークポイント」を作成するというアイデアを機能させるには、Tex内部をハックして、通常フォーマットファイルにダンプされる情報以外の追加情報をダンプし、補助ファイルの状態とともにパッケージ化する必要があります。ジョセフがTexフラグメントプレビューアについて言っていることを考えると、なぜ誰かがこれを行うためにTexをハッキングするのをわざわざするのでしょうか。

于 2010-04-30T07:50:11.550 に答える
1

実際、正解は (IMO) です。LaTeX は既に出力ファイル ( .aux、他のパッケージの追加ファイル) に情報をキャッシュしています。したがって、コンマを追加すると、この情報が再利用されるため、タイプセットの実行はこの.auxファイルがない場合よりもはるかに高速になります。

于 2010-04-28T10:33:04.160 に答える