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因為上面的數字來自我第一次運行索引。如果我嘗試進行第二次運行,那麼我會得到TeX Capacity Exceeded

範例其他變數:

從戴維斯·卡萊爾的評論來看,還有extra_mem_topextra_mem_botthat 也可以使用。但是,這是否允許更大的words of memory,或者這些是否與報告中的其他容量限制之一相關。再說一次,我可以將這些設定的最大值是多少?


可能要做和不要做的事:

這裡列出了我關於最小化使用的一些問題,因此也許這些可以在每個變數的「做」和「不做」中涵蓋。

  1. 使用\def\foo{xxx}而不是更好\newcommand*{\foo}{xxx}。我可以在 TeX 之外執行重複巨集名稱的檢查。

  2. 具有大量字元的巨集名稱是否會增加其中某些字元的使用量?

    例如,\expandafter\newcommand\csname dir1/dir1/long-file-name\endcsname{xxxx}在容量重新升級方面確實存在任何問題。對我來說,映射到一些較短的字串會更好,dir1/dir1/long-file-name例如ZXyw節省這些限制。是的,可讀性丟失了,但我可以自動執行此替換。

  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

使用 \def\foo{xxx} 取代 \newcommand*{\foo}{xxx} 是否更好。我可以在 TeX 之外執行重複巨集名稱的檢查。

不,同樣的事情

例如, \expandafter\newcommand\csname dir1/dir1/long-file-name\endcsname{xxxx} 在容量方面是否有任何問題。

理論上是的,csname 必須儲存在某個地方,因此這會佔用 39884661 個字串字元中的 2524840 個字串字符

但你大概只會減少 20 個左右的字符,所以與 39884661 沒有太大區別

以下哪一個會更好:

再一次,第一個使用了更多,因為它定義了另一個 csname ( \path),它從

 103471 multiletter control sequences out of 15000+600000

但你還遠遠沒有達到這個極限

不再需要巨集後,\undefing 是否有助於解決這些限制?

\begin{document}是的,這就是為什麼乳膠在散列條目中刪除大量命令沒有被回收(多字母命令的數量),但用於保存定義的主記憶體被回收。

答案2

許多年前,我曾就「TeX 容量超出」問題進行過一次演講,其中包含一些背景資訊、根本原因以及如何避免這些問題的可能性。

演講的第一部分發表於《Die TeXnische Komödie》1995/3 期,第 22 頁

第 24 頁有一個表格,其中包含所有(標準 TeX.web)溢出錯誤訊息、關聯的 TeX.web 參數和參數設定。

缺點:(1) 演講和論文僅採用德語,(2) 我沒有足夠的時間來完成該系列文章,包括第二部分和第三部分中的所有剩餘主題,(3) 它基於標準 TeX。 web2c“bigTeX”版本,沒有 e-TeX、pdfTeX、XeTeX、LuaTeX 和類似的擴展變體。

相關內容