使用 Knitr/Sweave/Rstudio 对 LaTeX 中的抽象环境进行动态字数统计

使用 Knitr/Sweave/Rstudio 对 LaTeX 中的抽象环境进行动态字数统计

我正在尝试使用 TeXcount 来计算我的摘要环境中的单词数并将其打印出来,以便当我更新摘要时它会打印新的字数。

我尽力搜索了各种论坛,并在这里找到了一个在我使用编号部分时适用的解决方案:

动态计算并返回某一部分的字数

基本上就是使用这个宏:

\newcommand\wordcount{
    \immediate\write18{texcount -sub=section \jobname.tex  | grep "Section" |     sed -e 's/+.*//' | sed -n \thesection p > 'count.txt'}
(\input{count.txt}words)}

我尝试将其更改为 -sub=abstract 并 grep "Abstract",但输出文件为空,并且仅打印为 (words)。链接策略运行良好,并正确打印出我的主要部分的字数,但我无法让它与我的摘要一起工作。

如果有帮助的话,我正在 OSX 上的 Rstudio 中使用 Knitr。我完全接受不同类型的解决方案,包括不涉及 texcount 的解决方案(尽管我更希望我能在 LaTeX 脚本中完成所有操作,类似于上面链接的解决方案)。我是一个长期的堆栈潜水员,这是我的第一篇帖子,所以我对任何新手行为表示歉意。

答案1

使用原始方法的解决方案

您使用的想法-sub=abstract很好,但不起作用,因为 TeXcount 实际上并不将摘要识别为单独的子部分。虽然希望将来能添加该功能,但有一个快速修复方法可以强制使用添加断点的摘要新子计数%TC:break {name}

%TC:break Abstract
\begin{abstract}
Abstract text comes here...
\end{abstract}
%TC:break main

名称Abstractmain只是任意名称。现在 TeXcount 将为摘要生成子计数(即使没有选项-sub)。

可以使用grepsed等来提取和重新格式化输出,但为 TeXcount 提供输出模板也可能会有所帮助。例如,如果您使用选项运行 TeXcount,-template="{sub?{title}: {word}\n?sub}"它将仅在表单上打印每个段的计数title: words。您可以使用{hword}{oword}{sum}等在标题、其他地方和总数(由选项定义-sum)中插入字数。

您甚至可以使用模板生成 TeX 宏来帮助排版文档中的字数。有关模板的更多信息,请参阅下一个完全依赖于它的解决方案。

更好的解决方案!

然而,有一个更好的解决方案,它避免了必须提取抽象计数,并可以让您以更灵活的方式塑造输出。

abstract您可以在摘要之前的任何位置(例如在序言中)添加以下 TeXcount 指令,从而指定一个新的计数器,然后为环境指定使用该计数器的规则:

%TC:newcounter abst Words in abstract
%TC:envir abstract [] abst

这将对摘要中的单词进行计数,与其他单词分开。我首先想到的是使用-sum=...仅包含摘要的计数总和,但这并不奏效,因为-sum无法很好地处理新的计数器(希望能修复!)。

要仅获取摘要的计数,您可以使用输出模板。这可以通过两种方式完成。您可以在 TeXcount 命令中指定模板:

texcount -template="{abst}" file.tex

或者,你可以在 TeX 文件的某处指定模板:

%TC:newtemplate
%TC:template {abst}

无论哪种情况,都将被我们定义的计数器{abst}的值替换。abst

您甚至可以使用模板编写可包含在文档中的 TeX 代码,例如用作\WordsInAbstract{{abst} }模板,但随后您可能需要运行 TeXcount 并-tex选择在输出中转义特殊的 TeX 字符。注意:{{abst}}在模板中使用可能会触发一个错误,其中{abst}被例如替换4,然后{4}被第 4 个计数器(标题数量)中的值替换,这可以通过添加额外的空格来解决。

您还可以使用该选项让 TeXcount 将输出直接写入文件-out=outfile。通常没有问题,但有些情况下> outfile无法使用。

相关内容