【问题标题】:Correct word-count of a LaTeX document正确的 LaTeX 文档字数
【发布时间】:2011-02-27 19:57:53
【问题描述】:

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

到目前为止,我只遇到过只适用于单个文件的脚本,但我想要的是一个可以安全地忽略 LaTeX 关键字并遍历链接文件的脚本...即关注@ 987654322@ 和 \input 链接以生成整个文档的正确字数。

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

有谁知道可以完成这项工作的任何脚本(或应用程序)吗?

【问题讨论】:

  • 尝试找到一种工具来计算已发布 PDF 中的字数 - 大多数 LaTeX 字数无法理解实际打印的内容。
  • @icio - 连字符、数学公式、页眉和页脚,所有这些都使得计算 PDF 中的单词变得非常困难。
  • @Geoff - 我同意,但据我所知,这是 PDF 和 TeX 文档的字数计数器之间的常见缺陷。
  • 那些通过搜索最终到达这里的人可能想查看 TeX.se 上的最新答案:tex.stackexchange.com/questions/534/…

标签: latex word-count


【解决方案1】:

我使用texcountwebpage 有一个 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 文件的链接?
  • 是的,这就是-inc 参数的作用(我将编辑我的回复)。
  • 太棒了。刚刚测试了这个脚本,效果很好!干杯杰夫
  • 如果这是您想要的,我认为您可以使用grep bibcite paper.aux | wc,其中paper.aux 应该是适合您的文档的aux 文件,但您需要编译文档以获得aux 文件。
  • @DmitriPisarenko - 查看常见问题解答:app.uio.no/ifi/texcount/faq.html#languages
【解决方案2】:

我接受了 icio 的评论,并通过将 pdftotext 的输出传送到 wc 对 pdf 本身进行了字数统计:

pdftotext file.pdf - | wc - w 

【讨论】:

  • 小心这个。我相信跨两行连字符的单词将显示为 2 个单词,而不是一个。页眉和页脚也将被计算在内。查看pdftotext 的输出,看看它是否适合您。如果您想要精确计数,我不会使用此解决方案。
  • 如果您只是想大致了解文档的大小,这个解决方案就足够接近了。我同意 Geoff 的观点,因为它不适合将自己固定在与特定出版相关的字数上。
  • 我喜欢你的想法,因为它包括书目项目!
【解决方案3】:
latex file.tex
dvips -o - file.dvi | ps2ascii | wc -w

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

【讨论】:

  • 如果您使用 pdflatex,只需执行 pdftops file.tex 然后 ps2ascii|wc -w 我将此计数与 Word 中的计数进行比较,并且在此处的所有计数中,它是具有最接近数字的计数。在我的回复中查看我的比较
  • @fiacobelli 它应该是pdftops file.pdf
【解决方案4】:

要添加到@aioobe,

如果你使用 pdflatex,就这样做

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

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

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

【讨论】:

  • 可能是跨行或连字的连字符。
【解决方案5】:

在 Texmaker 界面中,您可以通过右键单击 PDF 预览来获取字数:

【讨论】:

  • 每次运行它时都会给出不同的数字:D 令人着迷。
【解决方案6】:

Overleaf 有字数统计功能:

背页 v2:

背页 v1:

【讨论】:

    【解决方案7】:

    我使用以下 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 构建的
    【解决方案8】:

    对于一个非常基本的文章类文档,我只查看正则表达式的匹配数以查找单词。我使用 Sublime Text,所以这个方法在其他编辑器中可能不适合你,但我只是点击Ctrl+F(Mac 上为Command+F),然后启用正则表达式,搜索

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

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

    【讨论】:

      【解决方案9】:

      如果你适合使用 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)*
      
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-27
        • 1970-01-01
        • 1970-01-01
        • 2019-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多