![正确计算波斯语文档中的单词数](https://linux22.com/image/401155/%E6%AD%A3%E7%A1%AE%E8%AE%A1%E7%AE%97%E6%B3%A2%E6%96%AF%E8%AF%AD%E6%96%87%E6%A1%A3%E4%B8%AD%E7%9A%84%E5%8D%95%E8%AF%8D%E6%95%B0.png)
当我在 CMD 中使用命令时texcount filename.tex
,半空格单词算两个单词,而不是一个单词。我该如何解决这个问题?\谢谢
% Compile with XeLaTeX
\documentclass{article}
\usepackage{xepersian}
\settextfont{Yas}
\begin{document}
من میروم ز کوی تو و دل نمیرود
\end{document}
这个例子有 8 个单词,但是 latex 将其算作 10 个单词。半空格用于میروم
和نمیروم
单词。我有很多半空格的单词,它们的情况与另一个字母表不同。半空格是 U+200C(零宽度非连接符),或者在波斯语标准键盘中是Shift + Space
。
答案1
有一个简单但不太优雅的快速修复方法可以解决此问题。它需要修改 TeXcount Perl 脚本。
texcount.pl 的代码中有一行定义了单词的模式。
$NamedWordPattern{'words'}='(@+|@+\{@+\}|\{@+\}@+)([\-\'\.]?(@+|\{@+\}))*';
在 3.1 版中它位于第 496 行,但在所有较新的 TeXcount 版本中应该都是同一行。它本质上是一个正则表达式,但@
稍后将被替换为匹配字母的正则表达式。本质上,它表示单词是字母序列,但字符-
、'
和.
可能包含在其中。
要将 Unicode 字符添加U+200C
到单词中允许的字符列表中,可以将此行更改为
$NamedWordPattern{'words'}='(@+|@+\{@+\}|\{@+\}@+)([\-\'\.\x{200C}]?(@+|\{@+\}))*';
已插入的位置\x{200C}
。不可否认,这不是一个很优雅的解决方案,并且可能还有其他字符也应允许在单词内使用。
更好的解决方案可能是使用 Unicode 字符类来识别单词内允许的分隔符,但我不确定什么是合适的规则:这可能会影响具有类似字符的其他语言,从而可能产生期望或不期望的效果。