最佳方法是什么,可以git-latexdiff
很好地查看texcount
两次提交之间更改和删除的字数?
答案1
我花了很长时间才让它工作起来,以防将来其他人来寻找它!
我做的第一件事就是使用这个答案因此texcount
将使用格式来latexdiff
计算添加和删除的单词。
但是,将它与 一起使用有几个问题git-latexdiff
。首先,它gitlatex-diff
用于将或中latexpand
包含的所有文件合并为一个大文件。默认情况下,这还会删除所有注释,包括用于格式化的注释。因此,您需要传递给。\input
\include
.tex
%TC:
texcount
--latexpand --keep-comments
git-latexdiff
第二个问题是,git-latexdiff
将创建一个临时目录来存储 diff 文件。您可以使用git-latexdiff
来告诉将这些目录放在哪里--tmpdirprefix
,但是每次运行时创建的各个目录git-latexdiff
都是根据进程的 PID 命名的。因此,它们不容易识别,以便texcount
在生成的 diff 文件上运行。
因此基于这个答案我决定将字数统计放在文档本身的第一页。这样,git-latexdiff
运行时,它将texcount
自动调用并将字数统计放在文档中。然后,您可以告诉git-latexdiff
将该文件输出到某个地方(或只是在查看器中查看它)并查看字数统计。这个答案为制作模板提供了一些很好的见解texcount
。我使用它将其输出为可以包含在.tex
文件中的格式,以便它在 pdf 中看起来不错(添加换行符等)。
但是该答案要求将输出保存在文件中,然后使用命令输入\input
。问题是,第一次git-latex
运行时,它将编译文档一次,这将创建字数统计文件,然后它将在将文档发送到之前将其展平latexdiff
。当它展平文档时,它会将字数统计文件的内容直接放入展平的文档中。这样总字数就会正确,但不会显示任何添加或删除的单词,因为尚未制作 diff 文件latexdiff
。并且它不会在此之后输入字数统计文件的内容,因为latexpand
已经展平了文档。请注意,如果您给出git-latexdiff
选项--no-flatten
,它确实会保留单个文件;但是,它会不是将所有文件发送至latexdiff
(请参阅此问题)。它只会比较顶层文件。对于大型文档,这毫无用处,因为所有内容可能都位于单独的.tex
文件中。
我找不到latexpand
忽略这个问题的方法input
。我还尝试texcount
使用以下方法将命令直接放入文档中:这个答案,但latexpand
仍然会扩展它并将其放入文档中(我使用的是 XeLaTeX)。我找不到latexpand
忽略此命令的方法。(根据代码,它还扩展了环境\input
中的命令verbatim
)。
为了解决这个问题,我使用了import
包,它提供了一个不扩展的命令\import
。\latexpand
这样每次编译文档时都可以生成字数统计文件(重要的是:在最终的 diff 文档中latexdiff
)。
我最后做的是只在文档处于draft
模式时执行此操作。如果文档正在被编辑和更改,并且您想看到这些更改,那么只在草稿模式下执行此操作是有意义的。请参阅这个答案了解草稿模式的变化列表。我添加了来自这个答案这样我就只能在草稿模式下做事了。我总是希望我的 pdf 有一个目录(因为它很大),所以我添加了这个答案这样hyperref
就会始终生成 TOC。
所以我最后在序言中添加了这一点:
\makeatletter
\def\ifdraft{\ifdim\overfullrule>\z@
\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
\makeatother
\hypersetup{final}
\ifdraft{\usepackage{import}}{}
然后我在文档的开头添加了:
%TC:newcounter add Added
%TC:newcounter del Deleted
%TC:macro \DIFadd [add]
%TC:macro \DIFdel [del]
%TC:ignore
\immediate\write18{texcount -relaxed -sum -total -utf8 -opt=tc_template.cfg -merge \jobname.tex > 'WC.txt'}
\ifdraft{
{\LARGE \import{}{WC.txt}}
\clearpage}{}
为了完整起见,以下是 ot 的内容tc_template.cfg
:
-template=
\Total Words: \textcolor{blue}{{sum}}\n\n
\Words in Text: {text}\n\n
\Words in Footnotes: {otherword}\n\n
\Words Added: \textcolor{green}{{add}}\n\n
\Words Deleted: \textcolor{red}{{del}}\n\n
\\rule{2.5in}{0.75pt}\n\n
\Words in Headers: {headerword}\n\n
\Num Headers: {header}; Floats: {float}\n\n
\Num Inline Math: {inline}; Display Math: {displaymath}\n\n
(我知道除了脚注之外otherword
还texcount
可以有其他内容;但对于我的文档,几乎都是脚注。我也知道我可以将%TC
:宏放在配置文件中。但我的文档中还有很多其他%TC:
注释,因此texcount
会忽略我的序言而不是对其进行解析,等等。所以我只是保留了它们。)
我调用的函数是:
git latexdiff --biber --xelatex --latexopt -shell-escape --main $1 --latexpand --keep-comments HEAD^1
我给它命名为主.tex
文件。由于此解决方案使用\write18
,请记住您需要将-shell-escape
命令发送到xelatex
。
看起来效果不错。它会将最终的字数以及添加和删除的单词放入最终文档中,然后您可以仔细查看上次提交中的差异。
我可能有一天会把它放到 gitlab 的 CI 中,这样它就会自动生成这个文档,这样人们就可以轻松地看到发生了什么变化,等等。那是另一回事了。