ConTeXt 文档中的字数统计

ConTeXt 文档中的字数统计

有没有办法包含 ConTeXt 文档中的字数(不包括目录、其他列表等)?我发现拼写检查功能它不仅提供字数统计,还包含列表。

答案1

您可以简单地禁用拼写检查器的状态,这样就不计算目录中的单词等。这里有一个说明这一点的例子:

\define\enablewordcount
    {\setupspellchecking[state=start,method=2]
     \ctxlua{languages.words.threshold=1}}

\define\disablewordcount
    {\setupspellchecking[state=stop]}

\define\showwordcount
  {\ctxlua{
    local data = table.load(file.addsuffix(tex.jobname,"words"))
    context(data and data.total or "nothing")
  }}

\starttext

\completecontent

\enablewordcount

\dorecurse{10}
  {\expanded{\startchapter[title=Chapter \recurselevel]}
    \dorecurse{4}
     {\expanded{\startsection[title=Section \recurselevel]}
       \input ward
     \stopsection}
   \stopchapter}

This document has \showwordcount\ words.

\stoptext

请注意,您需要运行两次才能获得正确的字数。由于字数存储在单独的文件中(而不是文件.tuc),您可能需要手动再运行一次 context。

答案2

只需使用以下方法保护文档中的列表

\setupspellchecking[state=stop]
% the list here
\setupspellchecking[state=start]

这样拼写检查器就会抑制列表的工作。总字数为不是由 重置\setupspellchecking[state=stop]

\setupspellchecking[state=start,method=2]
\ctxlua{languages.words.threshold=1}

\starttext

\setupspellchecking[state=stop]
\completecontent
\setupspellchecking[state=start]

\startsection[title=Knuth]
  \input knuth
\stopsection

\startsection[title=Ward]
  \input ward
\stopsection

\startsection[title=Zapf]
  \input zapf
\stopsection

\startluacode
local report_words = logs.reporter("word count")
local wordfile = "\jobname.words"
if file.is_readable(wordfile) then
    local data = dofile(wordfile)
    report_words("Total words: " .. data.total)
end
\stopluacode

\stoptext

日志报告

word count      > Total words: 281

当我注释掉列表守卫时它显示

word count      > Total words: 285

相关内容