TeX 용량 제한 요약

TeX 용량 제한 요약

용량 문제가 자주 발생하고 매번 한도를 높이는 것 같습니다. 이 사이트에는 이와 관련된 몇 가지 질문이 있습니다. 그러나 일부 상충되는 정보가 있는 것 같고 어디에도 없는 것 같습니다.모두이러한 한도는 자세히 설명되어 있습니다.

주요 질문:

그래서 내가 찾고 있는 것은

  1. 변수 이름
  2. 기본값.
  3. 순수한최대로 설정할 수 있습니다.
  4. 이러한 사용량을 최소화하려면 어떤 조치를 취해야 합니까? 이러한 각 용량 제한에 대한 DO 및 DONT는 무엇입니까?

내가 알고 있는 설정은 로그 파일 끝에 보고된 설정입니다.

 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.

다른변수:

Davis Carlisle의 의견에 따르면 사용할 수도 있고 extra_mem_top사용할 extra_mem_bot수도 있습니다. 그러나 이는 더 큰 용량을 허용합니까 words of memory, 아니면 보고서의 다른 용량 제한 중 하나와 관련되어 있습니까? 다시 말하지만, 설정할 수 있는 최대값은 얼마입니까?


가능한 DO와 DONT:

사용량 최소화와 관련하여 제가 가지고 있는 몇 가지 질문이 여기에 나열되어 있으므로 각 변수에 대한 DO 및 DONT에서 이러한 내용을 다룰 수 있을 것입니다.

  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.cnfLeo 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에서 큰 차이는 없을 것입니다.

다음 중 어느 것이 더 좋을까요?

다시 말하지만, 첫 번째는 csname( \path) 을 하나 더 정의하므로 더 많은 것을 사용합니다.

 103471 multiletter control sequences out of 15000+600000

하지만 넌 그 한계 근처에도 못 가

더 이상 필요하지 않은 매크로를 정의 취소하면 이러한 제한을 해결하는 데 도움이 됩니까?

예, 그렇기 때문에 라텍스는 해시 항목에서 많은 명령을 제거하지만 \begin{document}(다중 문자 명령의 수) 정의를 저장하는 데 사용된 주 메모리는 회수됩니다.

답변2

몇 년 전에 저는 "TeX 용량 초과" 문제에 대한 배경 정보, 근본 원인 및 이를 방지하는 방법에 대해 이야기한 적이 있습니다.

강연의 첫 번째 부분은 다음에서 출판되었습니다."Die TeXnische Komödie" 1995년 3월호, 22페이지.

24페이지에는 모든(표준 TeX.web) 오버플로 오류 메시지, 관련 TeX.web 매개변수 및 매개변수 설정이 포함된 표가 있습니다.

단점: (1) 강연과 논문은 독일어로만 작성되었습니다. (2) 두 번째와 세 번째 부분의 나머지 모든 주제를 포함하여 기사 시리즈를 마무리할 시간이 충분하지 않았습니다. (3) 표준 TeX를 기반으로 합니다. 웹 응답. e-TeX, pdfTeX, XeTeX, LuaTeX 및 유사한 확장 변형이 없는 web2c "bigTeX" 버전.

관련 정보