字数统计和‘超出 TeX 容量’

字数统计和‘超出 TeX 容量’

我在序言中使用了这段代码,取自统计单词的环境

\usepackage{xesearch}
\newcounter{words}
\newenvironment{assignment}{%
  \setcounter{words}{0}
  \SearchList!{wordcount}{\stepcounter{words}}
    {a?,b?,c?,d?,e?,f?,g?,h?,i?,j?,k?,l?,m?,
    n?,o?,p?,q?,r?,s?,t?,u?,v?,w?,x?,y?,z?}
  \UndoBoundary{'}
  \SearchOrder{p;}}{%
  \StopSearching
  \marginpar{\arabic{words} words}}

我在包含多个章节的主文件中使用了它。如果我包含到第 4 章末尾(33599 个单词),那么计数环境就可以正常工作。如果我包含下一章(约 6K 个单词),我就会收到错误TeX capacity exceeded。经过测试并排除了所有其他选项后,肯定是由于assignment环境在某个时候达到了超过 33.599K 个单词的缓冲区(?)限制。我不确定如何在不分享我的实际工作的情况下为这个特定案例创建 MWE,出于显而易见的原因,我无法做到这一点。

答案1

如果我按照下面发布的说明运行文档,我会收到保存堆栈错误:

[30] [31] [32] [33] [34] [35] [36] [37]
! TeX capacity exceeded, sorry [save size=50000].

如果我取消注释标记的两行%%%%,那么它会运行到最后

Output written on xew33.pdf (84 pages).

并报道51720字

在此处输入图片描述

\documentclass{article}

\usepackage{xesearch}
\newcounter{words}
\makeatletter

\newenvironment{assignment}{%
%%%%     \endgroup
  \setcounter{words}{0}%
\expandafter\ifx\csname wordcount@xs@searchlist\endcsname\relax
  \let\wordcount@xs@searchlist\undefined
  \SearchList!{wordcount}{\stepcounter{words}}
    {a?,b?,c?,d?,e?,f?,g?,h?,i?,j?,k?,l?,m?,
    n?,o?,p?,q?,r?,s?,t?,u?,v?,w?,x?,y?,z?}
  \UndoBoundary{'}%
  \SearchOrder{p;}%
  \else
   \expandafter\StartSearching
  \fi}{%
  \StopSearching
  \marginpar{\arabic{words} words}%
%%%%     \begingroup\expandafter\def\csname @currenvir\endcsname{assignment}%
}




\begin{document}

\def\a{one two three four five six seven eight nine ten. }
\def\b{red yellow green blue. }
\def\c{apple orange pear banana.}
\def\d{\a\a\b\b\c\a\b\c\c\b\b}
\def\e{\d\d\par\a\a\b\d\d\b\b\c\c\a\a\a\a\par}
\def\f{\e\e\a\a\b\b\e\c\d\d\a\c\b\a\e\e}


\begin{assignment}
\f\f\f\f\f\f\f\f\f\f
\f\f\f\f\f\f\f\f\f\f
\f\f\f\f\f\f\f\f\f\f
\end{assignment}

\begin{assignment}
one one two three
\end{assignment}


\begin{assignment}
one two three four five six
\end{assignment}


\end{document}

LaTeX 中的环境document采用了类似的技巧来使用环境语法,但避免围绕整个文档进行分组。

相关内容