适合初学者的 LaTeX 字数统计!

适合初学者的 LaTeX 字数统计!

我认为这个问题已经出现过很多次了。是的,我已经在谷歌上搜索过。我找到了很多不同的答案。大多数人说“使用另一种工具来计数”。但有些人实际上编写了一些可以直接在 LaTeX 中使用的脚本。遗憾的是,我真蠢,所以我不知道如何使用这些工具。根据我的教授的说法,我应该仅有的计算标题和标题下的文本:自我介绍,脚注和参考文献等所有内容都不应该计算在内!

以下是我的源代码:

\documentclass[12pt, a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[left=2cm,right=5cm,top=3cm,bottom=2cm]{geometry}

\begin{document}

counted words: XXXXX

\end{document}

一个解决方案我发现肝素,回答于 2012 年 5 月 6 日 13:15。他说了一些关于使用 Context 的事情。

\setwordthreshold{3} %%% min chars in a row to count as word
\startwordcount      %%% start callback
\input knuth\par     %%% counted
\currentwordcount    %%% => 94 with threshold == 3
\input knuth         %%% counted
\stopwordcount       %%% deregister callback
\input knuth         %%% not counted
\dumpwordcount       %%% => 188

弗兰,回答于 2013 年 6 月 4 日 1:01,说了一些关于 texcount 的事情

% CAUTION !!!
% 1) Need --enable-write18 or --shell-escape 
% 2) This file MUST be saved 
%    as "borra.tex" before the compilation
%    in your working directory
% 3) This code will write wordcount.tex
%    and charcount.tex in /tmp of your disk.
%    (Windows users must change this path)
% 4) Do not compile if you are unsure
%    of what you are doing.

\documentclass{article}
\usepackage{moreverb} % for verbatim ouput

% Count of words

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

% Count of characters

\immediate\write18{texcount -char -freq
 borra.tex > /tmp/charcount.tex}
\newcommand\charcount{
\verbatiminput{/tmp/charcount.tex}}


\begin{document}


\section{Section: text example with a float}

Words and characters of this example file are 
automatically counted from the source file 
when compiled (therefore generated text as 
\textbackslash{}lipsum[1-10] is {\bfseries not} 
counted). The results are showed at the end 
of the compiled version.
Counts are made in headers, caption floats 
and normal text for the whole file. Subcounts 
for structured parts (sections, subsections, 
etc.) are also made. Number of headers, 
floats and math chunks are also counted. 

\begin{figure}[h]
\centering
\framebox{This is only a example float} 
\caption{This is a example caption}
\end{figure}

\subsection{Subsection: Little text with math chunks}

In line math: $\pi +2 = 2+\pi$ \\   
Display math: \[\pi +2 = 2+\pi\] 

%TC:ignore  
\dotfill End of the example \dotfill 

\subsubsection*{Counts of words} 
\wordcount

%TC:endignore   

\end{document}

最后但并非最不重要的,循环空间,回答于 2010 年 7 月 29 日 8:31,编写了 Perl 脚本

#!/usr/bin/perl -w

@ARGV and $ARGV[0] =~ /^-+h(elp)?$/ && die "Usage:\t$0 files\n\t$0 < files\n\t$0\n";

my $count = 0;
my $first = "";
my $tex = 0;

while ($first =~ /^\s*$/) {
    $first = <>;
}

if ($first =~ /^\\(input|section|setlength|documentstyle|chapter|documentclass|relax|contentsline|indexentry|begin|glossaryentry)/) {
    $tex = sub { $r = $_[0];
                 $m = $_[1];
                 $r =~ s/\\(emph|textbf|textit|texttt|em)\{//g;
                 $r =~ s/\\(sub)*section\*?\{[^\}]*\}//;
                 $r =~ s/\\title\{[^\}]*\}//;
                 $r =~ s/\\\(.*?\\\)/maths/g;
                 $r =~ s/\\\(.*?$/maths/;
                 $r =~ s/^.*?\\\)/maths/;
                 $r =~ s/\\\[.*?\\\]/maths/g;
                 $r =~ s/.*?\\\]// and $m = 0;
                 $m and $r = "";
                 $r =~ s/\\\[.*?$// and $m = 1;
                 $r =~ s/\\\S*//g;
                 $r =~ s/%.*//;
                 return ($r,$m) };
} else {
    $tex = sub { return ($_[0],0) };
    @split = split(" ", $first);
    $count += $#split + 1;
}

while ($s = <>) {
    ($t,$n) = &$tex($s,$n);
    @split = split(" ", $t);
    $count += $#split + 1;
}

print "Number of words: $count\n";

或者也可以使用字数统计工具,使用 Python 编程? (我知道一点,非常少,Python 我自己)。

我不知道哪个解决方案是最好的!我不知道如何使用它们。我唯一知道的是,教授希望我写出使用了多少个单词(标题+正文仅有的)并且他想到的单词是 PDF 文件中的单词,而不是每个 LaTeXy 单词。

希望您能帮助像我一样愚蠢的人。如果您能结束我开始的源代码,那将是一个很大的帮助!提前非常感谢!您忠实的 ;-)

答案1

我不相信任何软件工具可以做到这一点。典型的、传统的手工方法是打印文档,计算典型页面上的字数,然后乘以感兴趣的页数(适当考虑任何插图或表格)。据我所知,除了强迫症患者外,没有人真正计算过任何长度的文档中的每个字。

答案2

对于 Linux:

将 pdf 文档转换为文本文件pdftotext -nopgbrk <file>.pdf,然后运行wc -w <file>.txt,输出字数。还有一些选项可以pdftotext裁剪 pdf 文件,例如无页眉或页脚。

答案3

暗示回复:显然最好的解决方案就是我的解决方案。:D

不,说真的,这不可能……“最佳解决方案”是任何你能够 轻松理解使用并能获得大部分所需内容的方法。例如,Herbert 的pdftotextplus解决方案wc对于 Linux 用户来说就是小菜一碟,因为这些工具是任何 Linux 发行版的标准配置,但 Windows 用户必须开始在 Google 中搜索程序。一个用户不关心图注中的字数,另一个用户只需要计算正文中的字数……没有通用的解决方案。

话虽如此,TeXcount(texcount在命令行中)是一个非常好的选择。它是一个 Perl 脚本,用于计算 LaTeX 文件文本中的单词数。您的计算机中可能已有此脚本,因为它可用作 TeX Live 和 MikTeX 包,因此您可以从命令行独立调用此脚本作为 LaTeX 的外部工具,也可以在 LaTeX 文件内部调用,如我的链接答案所示,甚至可以用作在线工具(可通过其主页作为 Web 服务使用)。

无论如何,相对于texcount许多其他解决方案,其主要优势在于它是专门针对 LaTeX 的。该脚本具有处理大多数常见宏的规则,因此它可以计算文本、标题、标题、图形或公式中的单词数,显然不包括 LaTeX 命令(纯粹主义者的控制序列)和注释。甚至可以提供颜色编码的输出,显示已计算文本的哪些部分。

运行后texdoc texcount您可以查看手册并了解有关这些选项的更多信息。

相关内容