容量の問題に頻繁に遭遇し、そのたびに制限を上げているようです。このサイトにはこれに関する質問がいくつかあります。しかし、矛盾した情報があり、全てこれらの制限は詳細に説明されています。
主な質問:
私が探しているのは
- 変数名
- デフォルト値。
- 絶対設定できる最大値。
- これらの使用量を最小限に抑えるには、どのような手順を踏めばよいでしょうか。これらの容量制限ごとに、すべきこととすべきでないことは何ですか。
私が知っている設定は、ログ ファイルの最後に報告されている設定です。
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_top
。extra_mem_bot
しかし、これによって を大きくすることができるのでしょうwords of memory
か、それともレポート内の他の容量制限の 1 つに関係しているのでしょうか。繰り返しになりますが、これらを設定できる最大値はいくらでしょうか?
考えられるすべきこととすべきでないこと:
使用量を最小限に抑えることに関して私が抱いている疑問のいくつかはここにリストされているので、おそらくこれらは各変数のすべきこととすべきでないことの中でカバーできるでしょう。
\def\foo{xxx}
の代わりにを使用する方が良いでしょうか\newcommand*{\foo}{xxx}
。重複するマクロ名のチェックは TeX の外部で実行できます。マクロ名の文字数が多いと、これらの一部の使用頻度が高まりますか?
たとえば、容量に関して何か問題があります。これらの制限を節約するために、より短い文字列に
\expandafter\newcommand\csname dir1/dir1/long-file-name\endcsname{xxxx}
マップする方がよいでしょうか。はい、読みやすさは失われますが、この置き換えを自動化できます。dir1/dir1/long-file-name
ZXyw
テキストを繰り返すと制限の使用が増えることになりますか。次のどちらがよいでしょうか。
\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}
\undef
不要になったマクロを実行すると、これらの制限が緩和されますか?
確かに、私が考えたこれらのことを実験することはできますが、おそらくこれらの限られた文字列と単語の使用を減らすために実行できる他の方法もあるでしょう。
矛盾の例
私の中に
/usr/local/texlive/2015/texmf.cnf
はmain_memory = 12435455
これはラテックスでエラーが発生します: 痛い---内部定数が壊れてしまいました実際に1だけ増やそうとすると、に12435456
なりますOuch---my internal constants have been clobbered!---case 14
。sudo vi texmf.cnf
LaTeXの容量を増やす。しかし、トーマス・F・スタームの解決策はTeX の「メイン メモリ サイズ」を拡張するにはどうすればよいでしょうか? (pgfplots メモリ オーバーロード)ショー
100571134 words of memory out of 103000000
したがって、最大値は少なくとも 103M であることを示します。
さらに、ファイルには
/usr/local/texlive/2015/texmf-dist/web2c/texmf.cnf
というコメントがありますMemory. Must be less than 8,000,000 total.
。それ以上のものを使用できるため、これは明らかに間違っています。
ノート:
kpsewhich texmf.cnf
私は、Leo Liuの回答に従って報告されたファイルに変更が加えられると想定しています。TeX の「メイン メモリ サイズ」を拡張するにはどうすればよいでしょうか? (pgfplots メモリ オーバーロード)私の場合は/usr/local/texlive/2015/texmf.cnf
これらのいくつかを設定する別の方法がある場合は、それも知りたいです。
- 現時点での主な問題は、大量のエントリのインデックス作成と制限です
words of memory
。実行時間 (常識の範囲内) についてはあまり心配していませんが、これらの制限を超えることの方が心配です。 - 問題になる場合に備えて、TeXLive2015 を使用しています。ただし、制限がディストリビューションに依存している場合は、それも知っておくとよいでしょう。
- この質問は、容量制限を超えるエラー状態(私の素朴な質問など)に関するものではありません。Tex 容量超過 (マクロ使用後に % を削除した場合))。
参考文献:
- TeX/LaTeXの新しいマクロやコマンドの数に制限はありますか?ここで言及されている変数をリストし、テスト ケースを提供します。ただし、これはマクロの数に基づく制限に特に焦点を当てています。
- (La)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 などの拡張バリアントは含まれていない。