我有一个 wordcount 宏,用来跟踪 的每个章节的字数book
。每个章节都写在一个单独的文件中,我input
从主文件中将其分离出来。当我处理单个章节时,我会在类的较小主文件中编译文本article
,这样可以大大缩短编译时间。在 中book
,章节自然由命令定义\chapter{}
。为了用类编译单个章节article
,我将\chapter
命令映射到\section
序言中。不幸的是,这会破坏我的 wordcount 宏。这与宏寻找不存在的章节有关。事实是我不明白我在grep
做sed
什么。
欢迎提出建议。我可能需要一种比我使用的\chapter
简单方法更全面的方式来重新定义命令。我的宏\let
wordcount
article
(摘自平均能量损失) 如下:
\newcommand\wordcount{
\immediate\write18{texcount -sub=section \jobname.tex | grep "Section" | sed -e 's/+.*//' | sed -n \thesection p > 'wordcount.log'}
\marginpar{[\input{wordcount.log}words]}}
\chapter
如果我手动替换每个实例\section
,wordcount 宏就会起作用。但是当我用这个快捷方式将章节重新定义为节时,它就会中断:
\let\chapter\section
平均能量损失编译时shell-escape
启用(我使用XeLaTeX
)
% !TeX document-id = {965bf974-53c7-4aa7-bc9b-fb76fa6b22ae}
% !TeX TXS-program:compile = txs:///xelatex/[--shell-escape]
\documentclass{article}
\let\chapter\section % article class does not understand the \chapter command
\newcommand\wordcount{
\immediate\write18{texcount -sub=section \jobname.tex | grep "Section" | sed -e 's/+.*//' | sed -n \thesection p > 'wordcount.log'}
\marginpar{[\input{wordcount.log}words]}}
\begin{document}
\chapter{Introduction}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue, a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.
\wordcount
\chapter{Main Section}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue, a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue, a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.
\wordcount
\chapter{Conclusion}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue, a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis fringilla tristique neque.
\wordcount
\end{document}
当我手动替换时\chapter
,\section
它看起来像这样:
附注:我尝试使用blindtext
包来制作平均能量损失更简洁,但即使使用标准命令,它也不适用于 wordcount 宏\section
。
这可能是我获得字数统计宏的地方: 动态计算并返回某一部分的字数,其他有用的交流如下: 有没有什么方法可以正确统计 LaTeX 文档的字数?
wordcount
调整宏以适应该课程并不太难book
:
\newcommand\wordcount{
\immediate\write18{texcount -sub=section \jobname.tex | grep "Chapter" | sed -e 's/+.*//' | sed -n \thechapter p > 'wordcount.log'}
\marginpar{[\input{wordcount.log}words]}}
答案1
改进版请见本文末尾(2016/4/23)
情况比仅\chapter
使用声明重命名等要复杂一些\let\chapter\section
。
texcount
寻找真正的切片单元,sub=section
或者sub=chapter
-->\chapter
需要sub=chapter
- 如果找到章节,则 texcount 的输出类似于
File: wordcountchapters.tex Encoding: ascii Words in text: 409 Words in headers: 4 Words outside text (captions, etc.): 0 Number of headers: 3 Number of floats/tables/figures: 0 Number of math inlines: 0 Number of math displayed: 0 Subcounts: text+headers+captions (#headers/#floats/#inlines/#displayed) 114+1+0 (1/0/0/0) Chapter: Introduction 228+2+0 (1/0/0/0) Chapter: Main Section 67+1+0 (1/0/0/0) Chapter: Conclusion
这意味着,grep
必须寻找Chapter
,而不是Section
→ 改为“Chapter”或更好grep -i "chapter"
(忽略大小写)
- 下一行替换
+
等,并用 捕获\thesection
,即节(或章)的编号。必须用一些更棘手的语句替换它\the\numexpr\value{chapter}
(才能获得正确的值)
为了实现这一点,\let\c@chapter\c@section
引入了一个假计数器——这样,计数器具有与计数器chapter
相同的值section
我已将其全部放在下面:宏使用默认为 的可选参数chapter
。在其他设置中,使用\wordcount[section]
。
\documentclass{article}
\let\chapter\section % article class does not understand the \chapter command
\makeatletter
\let\c@chapter\c@section % fake counter
\makeatother
\newcommand\wordcount[1][chapter]{%
\immediate\write18{texcount -sub=#1 \jobname.tex | grep -i "#1" | sed -e 's/+.*//' | sed -n \the\numexpr\value{#1}+1 p > 'wordcount.log'}%
\marginpar{[\input{wordcount.log}words]}}
\begin{document}
\chapter{Introduction}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue, a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.
\wordcount
\chapter{Main Section}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue, a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue, a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.
\wordcount
\chapter{Conclusion}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue, a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis fringilla tristique neque.
\wordcount
\end{document}
改良版
我已经扩展了上述解决方案,以便使用单个命令进行配置,\prepareforwordcount
并且\presetkeys{wc}{sub=chapter}{}
(\presetkeys
来自xkeyval
包)
设置\prepareforwordcount
命令\chapter
等并\wordcount
使用条目的预设值sub=...
。
由于flaw
shell 脚本的原因,\jobname
不能包含子单元的名称,如果chapter
要求,请不要使用带有“chapter”的作业名(texcount
打印文件名,这将包含chapter
,然后依次进行计数grep
)。
\documentclass{article}
\usepackage{xkeyval}
\makeatletter
\define@key{wc}{sub}[section]{%
\gdef\kvwc@sub{#1}%
}
\newcommand{\prepareforwordcount}[1][]{%
\setkeys{wc}{#1}%
\@ifundefined{\kvwc@sub}{% e.g does \chapter exist?
\expandafter\let\csname \kvwc@sub\endcsname\section%
\expandafter\let\csname c@\kvwc@sub\endcsname\c@section% Generate a fake counter to be the same as \c@section
}{%
% Nothing to be done!
}%
}
\newcommand\wordcount[1][]{%
\setkeys{wc}{#1}%
\immediate\write18{texcount -sub='\kvwc@sub' \jobname.tex | grep -i "\kvwc@sub" | sed -e 's/+.*//' | sed -n \the\numexpr\value{\kvwc@sub} p > 'wordcount.log'}%
\marginpar{[\input{wordcount.log}words]}}
\makeatother
\presetkeys{wc}{sub=chapter}{}
\prepareforwordcount
\begin{document}
\chapter{Introduction}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue, a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.
\wordcount
\chapter{Main Section}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue, a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue, a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.
\wordcount
\chapter{Conclusion}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue, a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis fringilla tristique neque.
\wordcount
\end{document}
答案2
克里斯蒂安·胡普弗回答了我的问题,并很好地解释了我使用的 wordcount 宏的不同部分的功能,以及为什么在我重新定义命令后它不起作用的原因\chapter
。在这里,我想展示一种我后来发现的替代方法:它依赖于包xesearch
而不是texcount
程序。它不需要shell-escape
,但它确实需要XeLaTeX
。
以下解决方案基于xesearch
手册(参见ftp://ftp.fu-berlin.de/tex/CTAN/macros/xetex/generic/xesearch/xesearch.pdf)。
示例 1
该wordcount
命令在命令所在位置的右侧边缘打印字数。字数是累积的。在下面进一步探讨的其他示例中,字数计数器是非累积的。
% !TeX document-id = {965bf974-53c7-4aa7-bc9b-fb76fa6b22ae}
% !TeX TXS-program:compile = txs:///xelatex/[--shell-escape]
\documentclass{article}
\let\chapter\section % article class does not understand the \chapter command
\usepackage{xesearch}
\newcount\wordcounter
\let\shownumber\relax
\SearchList!{wordcounter}{\global\advance\wordcounter1\shownumber{}}
{a?,b?,c?,d?,e?,f?,g?,h?,i?,j?,k?,l?,m?,n?,o?,p?,q?,r?,s?,t?,u?,v?,w?,x?,y?,z?}
\UndoBoundary{'}
\SearchOrder{p;}
\newcommand{\wordcount}{
\marginpar{~~[\expandafter\the\csname wordcounter\endcsname\ words]}
}
\begin{document}
\chapter{Introduction}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue, a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.
\wordcount
\chapter{Main Section}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue, a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue, a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.
\wordcount
\chapter{Conclusion}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue, a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis fringilla tristique neque.
\wordcount
\end{document}
上面的宏给出了累计字数。要获得每个部分的字数,可以重置字数计数器。我探索了两种方法:提供一个命令来手动重置计数器和/或为每个部分自动重置计数器。
示例 2
环境countwords
界定了字数统计的开始和结束。该donotcount{}
命令用于包装注释和其他不应包含在字数统计中的单词。不提供累计字数统计。
% !TeX document-id = {965bf974-53c7-4aa7-bc9b-fb76fa6b22ae}
% !TeX TXS-program:compile = txs:///xelatex/[--shell-escape]
\documentclass{article}
\let\chapter\section % article class does not understand the \chapter command
\usepackage{xesearch}
\newcounter{wordscounter}
\newenvironment{countwords}{%
\setcounter{wordscounter}{0}
\SearchList!{wordcount}{\stepcounter{wordscounter}}
{a?,b?,c?,d?,e?,f?,g?,h?,i?,j?,k?,l?,m?,
n?,o?,p?,q?,r?,s?,t?,u?,v?,w?,x?,y?,z?}
\UndoBoundary{'’-}
\MakeBoundary{„“‚‘–}
\SearchOrder{p;}}{%
\StopSearching
\marginpar{~[\arabic{wordscounter}~words]}
}
%% prevent words in the argument from being included in the word count
\newcommand{\donotcount}[1]{\StopSearching #1\StartSearching}%
\begin{document}
\chapter{Introduction}
\begin{countwords}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue, a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.
\end{countwords}
\chapter{Main Section}
\begin{countwords}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue, a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.\footnote{\donotcount{The words of this footnote will not be included in the wordcount.}}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue, a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.
\end{countwords}
\chapter{Conclusion}
\begin{countwords}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
\end{countwords}
\end{document}
示例 3
该startwordcount
命令启动字数统计器。该donotcount
命令用于包装注释和其他不应包含在字数统计中的单词。该footnote
命令被重新定义,使其内容不包含在字数统计中。该wordcount
命令在页边空白处打印当前字数统计。该chapter
命令未在article
类中定义,它被映射到该section
命令并自动重置字数统计器。
% !TeX document-id = {965bf974-53c7-4aa7-bc9b-fb76fa6b22ae}
% !TeX TXS-program:compile = txs:///xelatex/[--shell-escape]
\documentclass{article}
% The article class does not understand the \chapter command
% map \chapter to \section and reset wordcounter each time \chapter is invoked
\newcommand\chapter[2][\DefaultOpt]{%
\def\DefaultOpt{#2}%
\section[#1]{#2}\setcounter{wordcounter}{0}%
}
\usepackage{xesearch}% must be compiled with xelatex
\newcounter{wordcounter}% define a word counter
\newcommand\startwordcount{%
\setcounter{wordcounter}{0}
\SearchList!{wordcount}{\stepcounter{wordcounter}}
{a?,b?,c?,d?,e?,f?,g?,h?,i?,j?,k?,l?,m?,
n?,o?,p?,q?,r?,s?,t?,u?,v?,w?,x?,y?,z?}
\UndoBoundary{'’-}
\MakeBoundary{„“‚‘–}
\SearchOrder{p;}
}
%% print the wordcount counter in the margin
\newcommand\wordcount{%
\marginpar{~[\arabic{wordcounter}~words]}%
}
%% prevent words in the argument from being included in the word count
\newcommand{\donotcount}[1]{\StopSearching #1\StartSearching}%
%% redefine the \footnote command to take footnotes out of word count
\let\oldfootnote\footnote
\renewcommand\footnote[1]{%
\oldfootnote{\donotcount{#1}}}
\begin{document}
\startwordcount
\chapter{Introduction}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue, a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.
\wordcount
\chapter{Main Section}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue, a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.\footnote{\donotcount{The words of this footnote will not be included in the wordcount.}}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue, a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.
\wordcount
\chapter{Conclusion}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
\wordcount
\end{document}
这是第二和第三个示例的屏幕截图: