输入所含文件的字数统计

输入所含文件的字数统计

我正在尝试用 LaTeX 统计我的论文项目的字数。我在 Ubuntu 机器上使用 VIM 和 VIMLaTeX。

我的 main.tex 文件中有以下代码

\newcounter{Hoofdstuk}
\newcommand{\file}{empty}
\setcounter{Hoofdstuk}{1}
\forloop{Hoofdstuk}{1}{\value{Hoofdstuk}<20}
{
  \renewcommand{\file}{Hoofdstuk\arabic{Hoofdstuk}/\arabic{Hoofdstuk}}
  \IfFileExists{\file}{
    \input{Hoofdstuk\arabic{Hoofdstuk}/\arabic{Hoofdstuk}}
  }{}
}

将我的所有章节输入到我的主文件中。现在我想用以下代码计算我论文中的所有单词:

\usepackage{moreverb}
\immediate\write18{texcount -inc -incbib -sum main.tex > /tmp/wordcount.tex}
\newcommand\wordcount{
\verbatiminput{/tmp/wordcount.tex}}

本质上,对于我输入的文件名,此代码是有效的。但对于在 forloop 中输入的文件,它会出错并说找不到文件:'./Hoofdstuk\arabic{',并且遇到第二个错误,并且没有相应的'{',这似乎是了解第一个错误的逻辑。

有人知道如何修复这个问题吗?我texcount -inc -incbib main.tex在终端中运行时也遇到了同样的错误

答案1

有两件事失败了,导致了不同的问题。

首先,您需要知道 TeXcount 仅解析 TeX 代码,使用启发式规则尝试区分文本和宏。但是,它实际上并不运行 TeX,因此它不会实际运行\forloop并扩展它生成的代码。因此,它不会\input在文件Hoofdstuk1.texHoofdstuk2.tex等上运行。这就是它不会处理这些文件的原因。

接下来,它会\input尝试解析该行

    \input{Hoofdstuk\arabic{Hoofdstuk}/\arabic{Hoofdstuk}}

纯粹按原样显示,无法理解,因为它不是文件名。事实上,我怀疑这里有一个小错误,因为它似乎无法正确匹配花括号,最后剩下一个},这导致了错误消息。

\inputTeXcount 解析中的语句的原因\forloop是 TeXcount 没有附带 的宏处理规则\forloop,因此 的参数\forloop被解析为文本。可以通过添加提供宏处理规则的 TeXcount 指令来“修复”此问题:

%TC:macro \forloop [ignore,ignore,ignore,xx]

在第一次使用之前的任何地方插入此行将\forloop告诉 TeXcount 它需要四个参数,所有这些参数都应该被忽略:该xx规则只是 ignore 的更强大形式,它在尝试处理内容方面做得少一点(不确定是否真的需要它或者是否ignore通常就足够了)。它所做的只是让 TeXcount 忽略\forloop及其参数,从而防止出现错误消息。

为了真正解决包含 Hoofdstuk 文件的问题,我认为最简单的方法是更改​​指令texcount以包含它们。如果这些是表单上唯一的文件,我认为这可能会奏效Hoofdstuk*.tex

\immediate\write18{texcount -inc -incbib -sum main.tex Hoofdstuk*.tex > /tmp/wordcount.tex}

这只是明确告诉 TeXcount 也包含所有这些文件。

注意:我还没有实际测试过,可能需要进行一些调整才能让它按你想要的方式工作。但我认为这是最可行的方法。

如果你需要更具体地选择要包含的文件,你可以累积宏变量中包含的文件列表,例如\filelist,然后使用以下命令运行 TeXcount

\immediate\write18{texcount -inc -incbib -sum main.tex \filelist > /tmp/wordcount.tex}

这基本上是相同的,只是您可以更加确保所计算的文件与文档中包含的文件相同。

相关内容