如何在定义中使用 \space 重新定义 \space

如何在定义中使用 \space 重新定义 \space

我正在尝试实现一个计数器,计算空格的数量,以便粗略估计一个段落中包含的单词数量。

为了做到这一点,我设置了一个新的计数器

\newcounter{spacenumber}

我希望它在每次\space调用命令时都能向前迈进。

看着@egreg的回答在这篇文章中:我可以重新定义一个命令来包含它自己吗?, 我写

\LetLtxMacro{\oldspace}{\space}
\renewcommand{\space}{\oldspace%
  \stepcounter{spacenumber}
}

但目前还没有效果。

完整代码如下:

\documentclass{article}% it does NOT work

\usepackage{letltxmacro}
\newcounter{spacenumber}
\LetLtxMacro{\oldspace}{\space}
\renewcommand{\space}{\oldspace%
  \stepcounter{spacenumber}%
}

\begin{document}
\setcounter{spacenumber}{0}
This is an example. \thespacenumber
\end{document}

我查看了该etoolbox包,但仍然没有找到答案,因为我不知道它\space是如何定义的。事实上,我得到了

> \space=macro:
-> .

问题是:我对整个计数器设置的理解是错误的吗?还是我对如何\space重新定义的理解是错误的?

答案1

\documentclass{article}

\newcounter{spacenumber}
{\catcode`\ =\active\relax\gdef {\space\stepcounter{spacenumber}}}

\begin{document}
\begingroup
\setcounter{spacenumber}{0}
\obeyspaces%
This is an example. \thespacenumber
\endgroup
\end{document}

正如 egreg 所说,空格不会调用\space命令,因此在您的示例中,数量spacenumber显然为零。如果您希望空格调用,\space则需要\obeyspaces(谨慎使用)。

相关内容