正确的LaTeX文档字数统计


72

我目前正在搜索对LaTeX文档的字数正确的应用程序或脚本。

到目前为止,我只遇到了只能在单个文件上运行的脚本,但是我想要的是一个可以安全地忽略LaTeX关键字并且还可以遍历链接文件的脚本...即跟随\include\input链接以产生正确的字数整个文件。

对于vim,我目前使用,ggVGg CTRL+G但显然可以显示当前文件的计数,并且不会忽略LaTeX关键字。

是否有人知道可以执行此工作的任何脚本(或应用程序)?


4
试图找到一种工具来对已发布的PDF中的单词进行计数-大多数LaTeX单词计数未能理解实际打印的内容。
icio 2010年

1
@icio-带连字符的单词,数学公式,页眉和页脚,都使计数PDF中的单词非常困难。
Geoff 2010年

1
@Geoff-我同意,但是据我所知,这是PDF和TeX文档的字数计数器之间的常见缺陷。
icio 2010年

3
那些最终通过搜索找到此处的人可能想看看TeX.se上的最新答案:tex.stackexchange.com/questions/534/…–
同构关系

Answers:


71

我用texcount。该网页上有一个Perl脚本可供下载(和手册)。

它将包括tex文档中包含(\input\include)的文件(请参阅-inc参考资料),支持宏,并具有许多其他不错的功能。

当跟踪包含的文件时,您将获得有关每个单独文件的详细信息以及总数。例如,这是我的12页文档的总输出:

TOTAL COUNT
Files: 20
Words in text: 4188
Words in headers: 26
Words in float captions: 404
Number of headers: 12
Number of floats: 7
Number of math inlines: 85
Number of math displayed: 19

如果您只对总数感兴趣,请使用-total参数。


但是,它是否遵循指向\include\input文件的链接?
Andreas Grech 2010年

2
是的,这就是-inc参数的作用(我将编辑响应)。
Geoff 2010年

辉煌。刚刚测试了这个脚本,效果很好!干杯吉奥夫
安德烈亚斯·格雷奇2010年

凉。我还没有使用宏支持。如果您具有产生文本的宏,则需要查看该部分。
杰夫

1
如果那是您想要的,我想您可以做grep bibcite paper.aux | wc,该位置paper.aux应该是aux适合您文档的文件,但是您需要编译该文档才能获取该aux文件。
杰夫2013年

13

我接受了icio的评论,并通过将pdftotextto的输出传递给pdf对其进行了字数统计wc

pdftotext file.pdf - | wc - w 

2
请注意这一点。我相信跨两行连字的单词将显示为2个单词,而不是一个。页眉和页脚也将计算在内。查看来自的输出pdftotext,看看是否适合您。如果您想要确切的计数,我将不使用此解决方案。
杰夫(Geoff)2010年

1
如果您只是想大致了解大型文档,则此解决方案足够接近。我同意Geoff的观点,因为它不适合使自己陷入与出版相关的特定字数统计中。
Joseph Lisee 2011年

我喜欢您的想法,因为它包括书目移植项目!
dorien 2013年

7
latex file.tex
dvips -o - file.dvi | ps2ascii | wc -w

应该会给您一个相当准确的字数。


如果您使用pdflatex,请执行此操作pdftops file.tex,然后ps2ascii|wc -w将这个计数与Word中的计数以及此处的所有计数进行比较,它是数字最接近的计数。请看我在回应中的比较
fiacobelli 2014年

@fiacobelli应该是pdftops file.pdf
prab4th '17

5

要添加到@aioobe,

如果您使用pdflatex,则只需

pdftops file.pdf
ps2ascii file.ps|wc -w

我将此计数与1599 word文档中的Microsoft Word中的计数(根据Word)进行了比较。pdftotext产生了一个包含1700多个单词的文本。texcount不包括参考文献,产生了1088个字。ps2ascii返回了1603个字。比Word多4个。

我说这是一个很好的数字。不过,我不确定这四个字在哪里。:)


可能是跨行或连字的连字。
The_Lucifer



1

我使用以下VIM脚本:

function! WC()
    let filename = expand("%")
    let cmd = "detex " . filename . " | wc -w | perl -pe 'chomp; s/ +//;'"
    let result = system(cmd)
    echo result . " words"
endfunction

…但是它不跟随链接。这基本上需要解析TeX文件以获得所有链接的文件,不是吗?

在其他的答案的优点是,它并没有产生一个输出文件(PDF或PS),所以它可能(根据使用情况)来计算字数更有效。

尽管icio的评论在理论上是正确的,但我发现上述方法对单词的数量给出了非常准确的估计。对于大多数文字来说,这完全在许多作业中使用的5%的幅度内。


请为脚本加油,但是对我来说,以下链接是必须的,因为我的文档几乎使用\includes结构化
Andreas Grech 2010年

0

对于一个非常基本的文章类文档,我只看正则表达式查找单词的匹配数。我使用Sublime Text,因此该方法可能不适用于您在其他编辑器中使用的方法,但是我只是点击了Ctrl+FCommand+F在Mac上),然后在启用正则表达式的情况下搜索

(^|\s+|"|((h|f|te){)|\()\w+

它应该忽略声明浮动环境或图形标题的文本以及大多数基本等式和\usepackage声明,同时包括引号和括号。它还会计算脚注和\emph固定文本,并将\hyperref链接计为一个单词。它并不完美,但通常精确到几十个字左右。您可以对其进行优化以使其适合您,但是脚本可能是更好的解决方案,因为LaTeX源代码不是常规语言。只是以为我会把这个扔在这里。


0

如果合适的话使用vim插件,vimtex插件已经texcount很好地集成了该工具。

以下是他们的文档摘录:

:VimtexCountLetters       Shows the number of letters/characters or words in
:VimtexCountWords         the current project or in the selected region. The
                          count is created with `texcount` through a call on
                          the main project file similar to: >

                            texcount -nosub -sum [-letter] -merge -q -1 FILE
<
                          Note: Default arguments may be controlled with
                                |g:vimtex_texcount_custom_arg|.

                          Note: One may access the information through the
                                function `vimtex#misc#wordcount(opts)`, where
                                `opts` is a dictionary with the following
                                keys (defaults indicated): >

                                'range' : [1, line('$')]
                                'count_letters' : 0/1
                                'detailed' : 0
<
                                If `detailed` is 0, then it only returns the
                                total count. This makes it possible to use for
                                e.g. statusline functions. If the `opts` dict
                                is not passed, then the defaults are assumed.

                                             *VimtexCountLetters!*
                                             *VimtexCountWords!*
:VimtexCountLetters!      Similar to |VimtexCountLetters|/|VimtexCountWords|, but
:VimtexCountWords!        show separate reports for included files.  I.e.
                          presents the result of: >

                            texcount -nosub -sum [-letter] -inc FILE
<
                                             *VimtexImapsList*
                                             *<plug>(vimtex-imaps-list)*

好的方面是它的可扩展性。除了计算当前文件中的单词数之外,您还可以进行视觉选择(比如说两个或三个段落),然后仅将命令应用于您的选择。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.