TeX の容量制限の概要

TeX の容量制限の概要

容量の問題に頻繁に遭遇し、そのたびに制限を上げているようです。このサイトにはこれに関する質問がいくつかあります。しかし、矛盾した情報があり、全てこれらの制限は詳細に説明されています。

主な質問:

私が探しているのは

  1. 変数名
  2. デフォルト値。
  3. 絶対設定できる最大値。
  4. これらの使用量を最小限に抑えるには、どのような手順を踏めばよいでしょうか。これらの容量制限ごとに、すべきこととすべきでないことは何ですか。

私が知っている設定は、ログ ファイルの最後に報告されている設定です。

 106477 strings out of 493042
 2524840 string characters out of 39884661
 12363848 words of memory out of 12435455
 103471 multiletter control sequences out of 15000+600000
 197845 words of font info for 228 fonts, out of 8000000 for 9000
 1143 hyphenation exceptions out of 8191
 86i,17n,86p,10523b,3398s stack positions out of 5000i,500n,10000p,200000b,80000s

ただし、ここに記載されていないものがある可能性があります。私の当面の問題は、words of memory上記の数値がインデックス作成の最初の実行からのものであることです。2 回目の実行を試みると、次のようになりますTeX Capacity Exceeded

の例他の変数:

Davis Carlisle のコメントによると、 と も使用できるようですextra_mem_topextra_mem_botしかし、これによって を大きくすることができるのでしょうwords of memoryか、それともレポート内の他の容量制限の 1 つに関係しているのでしょうか。繰り返しになりますが、これらを設定できる最大値はいくらでしょうか?


考えられるすべきこととすべきでないこと:

使用量を最小限に抑えることに関して私が抱いている疑問のいくつかはここにリストされているので、おそらくこれらは各変数のすべきこととすべきでないことの中でカバーできるでしょう。

  1. \def\foo{xxx}の代わりにを使用する方が良いでしょうか\newcommand*{\foo}{xxx}。重複するマクロ名のチェックは TeX の外部で実行できます。

  2. マクロ名の文字数が多いと、これらの一部の使用頻度が高まりますか?

    たとえば、容量に関して何か問題があります。これらの制限を節約するために、より短い文字列に\expandafter\newcommand\csname dir1/dir1/long-file-name\endcsname{xxxx}マップする方がよいでしょうか。はい、読みやすさは失われますが、この置き換えを自動化できます。dir1/dir1/long-file-nameZXyw

  3. テキストを繰り返すと制限の使用が増えることになりますか。次のどちらがよいでしょうか。

    \MyMacro{../../../../dirA/dirB/dirC/dirD/file0001.tex}
    \MyMacro{../../../../dirA/dirB/dirC/dirD/file0002.tex}
     ...
    \MyMacro{../../../../dirA/dirB/dirC/dirD/file5000.tex}
    

    または

    \def\Path{../../../../dirA/dirB/dirC/dirD/}
    \MyMacro{\Path/file0001.tex}
    \MyMacro{\Path/file0002.tex}
     ...
    \MyMacro{\Path/file5000.tex}
    
  4. \undef不要になったマクロを実行すると、これらの制限が緩和されますか?

確かに、私が考えたこれらのことを実験することはできますが、おそらくこれらの限られた文字列と単語の使用を減らすために実行できる他の方法もあるでしょう。


矛盾の例


ノート:

  • kpsewhich texmf.cnf私は、Leo Liuの回答に従って報告されたファイルに変更が加えられると想定しています。TeX の「メイン メモリ サイズ」を拡張するにはどうすればよいでしょうか? (pgfplots メモリ オーバーロード)私の場合は

    /usr/local/texlive/2015/texmf.cnf
    

    これらのいくつかを設定する別の方法がある場合は、それも知りたいです。

  • 現時点での主な問題は、大量のエントリのインデックス作成と制限ですwords of memory。実行時間 (常識の範囲内) についてはあまり心配していませんが、これらの制限を超えることの方が心配です。
  • 問題になる場合に備えて、TeXLive2015 を使用しています。ただし、制限がディストリビューションに依存している場合は、それも知っておくとよいでしょう。
  • この質問は、容量制限を超えるエラー状態(私の素朴な質問など)に関するものではありません。Tex 容量超過 (マクロ使用後に % を削除した場合))。

参考文献:

答え1

\newcommand*{\foo}{xxx} の代わりに \def\foo{xxx} を使用する方が良いでしょうか。重複するマクロ名のチェックは TeX の外部で実行できます。

いいえ、同じことです

たとえば、\expandafter\newcommand\csname dir1/dir1/long-file-name\endcsname{xxxx} には容量に関する問題がありますか。

理論的にはそうです。csname はどこかに保存する必要があるため、39884661 文字のうち 2524840 文字が消費されます。

しかし、おそらく20文字程度少なくなるだけなので、39884661文字のうち大した違いはありません。

次のどれがより良いでしょうか:

再び、最初のものは、1つ多いcsname(\path)を定義し、1つを取り出すため、moreを使用します。

 103471 multiletter control sequences out of 15000+600000

しかし、あなたはその限界にはまったく近づいていない

不要になったマクロを \undefing すると、これらの制限の緩和に役立ちますか?

\begin{document}はい、それが LaTeX がハッシュ エントリで多くのコマンドを削除する理由です(複数文字のコマンドの数)。ただし、定義を保存するために使用されるメイン メモリは再利用されます。

答え2

何年も前に、私は「TeX の容量超過」問題について、背景情報、根本的な原因、および回避方法の可能性を交えて講演しました。

講演の前半部分は「Die TeXnische Komödie」1995/3号、22ページ以降

24 ページには、すべての (標準 TeX.web) オーバーフロー エラー メッセージ、関連する TeX.web パラメータ、およびパラメータ設定を示す表があります。

マイナス面: (1) 講演と論文はドイツ語のみ、(2) 残りのすべてのトピックを第 2 部と第 3 部に含めて記事シリーズを完成させる時間がなかった、(3) 標準の TeX.web と web2c の「bigTeX」バージョンに基づいており、e-TeX、pdfTeX、XeTeX、LuaTeX などの拡張バリアントは含まれていない。

関連情報