Christian Hupfer has answered my question and provided great explanations of the function of different parts of the wordcount macro I was using, and reasons why it wasn't working after I had redefined the \chapter
command. Here I want to show an alternative approach I have since discovered: it relies on the package xesearch
instead of the texcount
program. It does not require shell-escape
, but it does require XeLaTeX
.
The solutions below are based on the xesearch
manual (c.f. ftp://ftp.fu-berlin.de/tex/CTAN/macros/xetex/generic/xesearch/xesearch.pdf).
Example 1
The wordcount
command prints the word count in the margin, on the right of where the command is placed. The word count is cumulative. In the other examples explored further down, the word counter is non-cumulative.
% !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}

The macro above gives a cumulative word count. To get a word count per section, the word counter may be reset. I have explored two approaches: provide a command to reset the counter manually and/or reset the counter automatically for each section.
Example 2
The countwords
environment delimits the start and end of the word count. The donotcount{}
command is used to wrap notes and other words that should not be included in the wordcount. No cumulative word count is provided.
% !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}
Example 3
The startwordcount
command initiates the word counter. The donotcount
command is used to wrap notes and other words that should not be included in the wordcount. The footnote
command is redefined such that its content is not included in the word count. The wordcount
commands prints the current word count in the margin. The chapter
command, which is not defined in the article
class, is mapped to the section
command and automatically resets the wordcount counter.
% !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}
This is a screenshot of the second and third examples:

\blindtext
etc. can't work because the words are hidden in the macro, in my opiniongrep
searches for expressions,sed
is for replacing them. You should try to run yourtexcount
first on the command line to make it work, then wrap it up in a macro. The basic error isSection
-- you needChapter
, sincetexcount
printsChapter
in the outputsub=chapter
, sincetexcount
looks for this sub then. Renaming the macro does not help