在 \@@input 或 \write18 中转义反斜杠

在 \@@input 或 \write18 中转义反斜杠

问题

我想使用 texcount 在文档中包含字数统计。但我还想包含逗号作为千位分隔符。这是我想到的代码:

\makeatletter\@@input|"echo `texcount -1 -sum=1,1,1,1,1,1,1 -merge -incbib -utf8 \jobname.tex`| sed `s/^\(.\{1\}\)/\1,/`| cut -c1-5"\makeatother

但是 sed 命令中有特殊字符:反斜杠和括号。因此 LaTeX 无法运行这行代码。

尝试的解决方案

我尝试使用 、 和 转义反斜杠和括号\textbackslash\{\}不起作用。我还尝试用 替换\makeatletter\@@input\immediate\write18但同样不起作用。

答案1

您可以使用来作为普通标点符号\@backslashchar进行访问。\

答案2

您可以使用更高级的方法:

\documentclass{article}
\usepackage{xparse,siunitx}

\ExplSyntaxOn
\NewDocumentCommand{\countwords}{o}
 {
  \IfNoValueTF{#1}
   {\abreu_countwords:n {\c_sys_jobname_str.tex}}
   {\abreu_countwords:n {#1}}
 }

\cs_new_protected:Nn \abreu_countwords:n
 {
  \sys_get_shell:xnN
   {
    texcount ~ -q ~ -1 ~ -sum=1,1,1,1,1,1,1 ~ -merge ~ -incbib ~ -utf8 ~ #1 ~ 2>/dev/null
   }{}
   \l_tmpa_tl
  \num[group-four-digits,group-separator={,}]{\tl_use:N \l_tmpa_tl}
 }
\cs_generate_variant:Nn \sys_get_shell:nnN { x }
\ExplSyntaxOff

\begin{document}

\countwords

abc def ghi klm nop abc def ghi klm nop [...long nonsense omitted...]

\end{document}

您还可以执行此操作\countwords[somefile.tex]以获取另一个文件的计数。

在此处输入图片描述

相关内容