我有一篇大约 10 万字的论文,用 latex 排版。我对一些单词的连字符使用得相当不一致,例如“spider-fear”和“spider fear”。
我想获取 tex 文件中所有带连字符的单词的列表(以及计数),然后我还想统计一下未连字符版本出现的次数。
大概使用像 awk、grep 或 sed 这样的工具?
答案1
你可以通过一个出色的 Perl 程序 texcount.pl 来实现这一点,你可以从此网页。该程序统计 TeX 文档中的单词(或字母、数学公式等),这是一项不简单的任务,因为存在特定于 TeX 的关键字,这些关键字将被排除在统计范围之外。该程序有许多功能和选项(但我从未使用过),但您需要的是:
texcount.pl -freq myfile.tex
这将返回使用过的单词的完整列表(到标准输出)及其出现频率。然后,您可以轻松解析它,以查看何时使用了带连字符或不带连字符的组合。请注意,该程序可以轻松包含多文件项目,其中章节、附录、参考书目等存储在不同的文件中。但是,它不会(至少据我所知)指向单词的精确位置:您必须逐个查找它们。
编辑:
查找所有出现的非连字符表达式的快速但部分解决方案如下:
grep 'spider *fear' file.tex -n
它会搜索由零个或多个(* 符号)空格分隔的两个单词,并返回此出现的行号(-n 选项)。这很快,但它并不完整,因为使用 grep 自动意味着spider fear
当这些表达式被分成两行或更多行时,无法找到它们。由于对于任意表达式,这种情况甚至可能发生在单词内,因此查找这些出现需要的工作量比我愿意做的要多一点。
编辑2:
解决方案的另一部分如下:
grep 'spider *$' -A 1 filename | grep '^ *fear' -n
这将搜索所有以 结尾的行,spider
后面跟着未指定数量的空格,后面跟着另一行,开头是未指定数量的空格,然后是单词 fear。在执行此操作时,它还将输出此出现的行号。
请记住,在前面的所有情况下,您都只搜索小写表达式。如果您希望包含大写字母,只需替换grep -i
即可grep
。
现在唯一缺少的是不同行之间的单词断开,例如
spi
der