TexCount:在外部选项文件中使用 envir 时出错

TexCount:在外部选项文件中使用 envir 时出错

我正在努力在外部选项文件中向 TexCount 添加解析规则。

我正在运行 TexCount 如下:

texcount -sub -html -stat -inc -v3 -opt=tcrules master.tex > count.html

该文件tcrules内容如下:

### OPTIONS TO USE WITH TEXCOUNT

# PROGRAM OPTIONS
# None for now

# MACRO RULES

# URLS
%macro \url [ignore]

# CLEVERREF
%macro \Cref [ignore]
%macro \cref [ignore]

# DTL
%macro \DTLloaddb [ignore,ignore]

# LONGTABLE
%envir longtable [ignore] ignore

# CITATIONS
%macro \cite [ignore]
%macro \Cite [ignore]
%macro \parencite [ignore]
%macro \Parencite [ignore]

所有macro规则都运行良好,但是该%envir longtable [ignore] ignore规则引起了一个问题:

$ texcount -sub -html -stat -inc -v3 -opt=tcrules master.tex > count.html
Invalid TC option: envir longtable [ignore] ignore

但是,如果我将相同的规则放入 LaTeX 文档中:

%TC:envir longtable [ignore] ignore

然后 TeXCount 工作并产生所需的结果。

envir如果能提供关于为什么外部选项文件中不起作用的任何帮助,我们将非常感激。

我正在使用 TexCount 3.0 版本,2013 年 7 月 29 日。

答案1

这是一个错误!

问题似乎是,当选项文件中提供了 TeXcount 选项时,第三个参数(ignore例如

%envir longtable [忽略] 忽略

被忽略。原因是 TeXcount 中的 RegEx 要求第三个参数为数字(与 TeXcount 的旧版本一样)。

幸运的是,有一个快速修复方法(我将确保在 TeXcount 的下一次更新中实现)。只需找到指示的子程序定义sub __optionfile_tc并更改行

} elsif ($arg=~/^(\w+)\s+([\]*\w+)\s+([^\s\n]+)(\s+([0-9]+))?/i) {

} elsif ($arg=~/^(\w+)\s+([\]*\w+)\s+([^\s\n]+)(\s+([0-9\w]+))?/i) {

通过添加\w允许单词作为第三个参数。

正如 Harry 已经指出的那样,可以使用整数代码代替名称,尽管名称更直观。但是,负整数代码也不起作用,可以通过将行更改为

} elsif ($arg=~/^(\w+)\s+([\]*\w+)\s+([^\s\n]+)(\s+(-?[0-9]+|\w+))?/i) {

然后希望得到最好的结果。

我有点怀疑,一百万只猴子写出一个真正漂亮的 Perl 脚本的可能性比写出莎士比亚作品的可能性更大。至少我在使用 Perl 时是这么觉得的。

答案2

我找到了一个修复程序,尽管我对 TeXCount Perl 代码不够熟悉,无法解释为什么会出现以下情况。

似乎发生的情况是,对于envir外部选项文件中的 TeXCount 命令(但不是作为%TC:envir命令的 LaTeX 文件内部),如何处理环境中的主文本的关键字选项(似乎相对较新)没有得到正确处理。

但是,每个关键字的整数索引都有效,例如:

%envir longtable [ignore] 0

或者

%envir longtable [0] 0

工作,而:

%envir longtable [ignore] ignore

没有。

来自的代码文档如下(在大胆的):

5.1 参数和内容处理规则

有一组替代规则可用于解析宏参数和环境内容。

这些规则或解析器状态通过关键字标识:

文本:(键:text、word、wd、w 以前1) 计为文本(即统计单词)。

页眉文本:(键:headertext、headerword、hword、hwd、hw 以前2) 算作页眉文本。

其他文本:(关键词:otherword、other、oword、owd、ow formerly3)算作浮动/标题文本。

Displaymath:(键:displaymath、dsmath、dmath、ds 以前称为7)视为显示的数学公式。

内联数学:(键:inlinemath、inline、imath、eq 以前6) 算作内联数学公式。

到页眉:(关键:页眉,标题,页眉原件4)计数标题,然后将文本计为标题文本(过渡状态)。

浮动:(原关键词:浮动、表格、图形5) 计数浮点数,然后将内容解析为 isfloat(过渡状态)。

序言:(关键词:以前-9)解析为前导码,即忽略文本但查找前导码包含宏。

忽略:(键:以前忽略0) 忽略文本,即不计算,但仍会解析代码。

Float: (键:isfloat 以前-1) 浮动内容,忽略文本但查找 floatinclude 宏。

强排除:(键:xx 以前-2) 强忽略,忽略环境,例如在宏定义中使用 \begin–\end 不需要平衡。

更强的排除:(键:xxx 以前-3) 更强的忽略,将宏作为独立的标记处理而不处理其参数,以便与 \newcommand 和 \def 等宏定义一起使用。

排除所有:(键:xall 以前-4) 忽略所有内容,包括不匹配的括号(例如 %TC:ignore 和 verbatim 环境使用的括号)。此规则可用于环境内容,但不适用于宏或环境参数或选项,因为排除会导致 { 和 [ 被忽略。

因此,使用整数代码是可行的,尽管关键字版本莫名其妙地不起作用。我无法让一些负整数代码工作,但就我所做的事情而言,我不需要它们;因此,这是一个可行的解决方案,即使它不是显而易见的!

相关内容