我目前正在搜索为LaTeX文档执行正确字数的应用程序或脚本。
到目前为止,我只遇到过只能处理单个文件的脚本,但我想要的是一个可以安全地忽略LaTeX关键字的脚本,还有遍历链接文件 ...即遵循{ {1}}和\include
链接可为整个文档生成正确的字数。
使用vim,我目前使用\input
,但显然显示当前文件的计数,并且不会忽略LaTeX关键字。
有没有人知道任何可以完成这项工作的脚本(或应用程序)?
答案 0 :(得分:68)
我使用texcount
。 webpage有一个要下载的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
参数。
答案 1 :(得分:12)
我选择了icio的评论并通过将pdftotext
的输出汇总到wc
来对pdf本身进行了一次重复计算:
pdftotext file.pdf - | wc - w
答案 2 :(得分:7)
latex file.tex
dvips -o - file.dvi | ps2ascii | wc -w
应该给你一个相当准确的字数。
答案 3 :(得分:4)
添加到@aioobe,
如果您使用pdflatex,请执行
pdftops file.pdf
ps2ascii file.ps|wc -w
我将此计数与1599字文档中的Microsoft Word中的计数进行了比较(根据Word)。 pdftotext
制作了一个包含1700多个单词的文本。 texcount
未包含引用并生成1088个单词。 ps2ascii
返回了1603个单词。比Word更多4个。
我说这是一个非常好的计数。不过,我不确定4个字的区别在哪里。 :)
答案 4 :(得分:4)
答案 5 :(得分: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%边距内。
答案 6 :(得分:0)
对于一个非常基本的文章类文档,我只看一下正则表达式找到单词的匹配数。我使用Sublime Text,因此这个方法可能不适用于其他编辑器,但我只是点击Ctrl+F
(Mac上的Command+F
),然后启用正则表达式搜索
(^|\s+|"|((h|f|te){)|\()\w+
应该忽略声明浮动环境或图形上的字幕以及大多数基本方程和\usepackage
声明的文本,同时包括引号和括号。它还会计算脚注和\emph
asized文本,并将\hyperref
个链接计为一个单词。它并不完美,但它通常准确到几十个字左右。你可以改进它以适合你,但是一个脚本可能是一个更好的解决方案,因为LaTeX源代码不是常规语言。我以为我会把它扔到这里。
答案 7 :(得分:0)
答案 8 :(得分: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)*
这方面的好处是它的可扩展性。除了计算当前文件中的单词数之外,您还可以进行视觉选择(比如说两个或三个段落),然后仅将命令应用于您的选择。