# [texhax] counting words

Sat Sep 16 12:00:58 CEST 2006

On Fri, Sep 15, 2006 at 11:09:39PM -0400, Tom Sgouros wrote:
> Can anyone suggest a path to making a
> macro that will print the first 100 words of an argument, and not choke
> if there are only 75?

See the code below.  It's in plain TeX syntax, but I hope
you can adapt it to LaTeX.  Please note that it does not
always work correctly when there are space(s) at the
beginning / end of input.  Most importantly, if there is a
space at the beginning of the input, it'll be counted as a
word, and there may be one word too few.  It is possible to
deal with this, but of course this will make the macro more
inefficient than it already is, and I assume you generate
the input anyway, so probably it would be much more
efficient to strip leading and trailing spaces when
generating the input for TeX.

> Does this sound like the kind of thing that is
> worth attempting in a macro?

It is certainly possible, but I don't know how efficient
this would be for large inputs.

Best,
Oleg

\newcount\words
\newcount\limit

\words=0
}

%
\def\temp{#2}%
\ifx\temp\empty \else
\ifnum\words < \limit
\fi
\fi
%
%
\next#2\finish
}

\limit=20

\medskip
{\bf No spaces at the end or beginning of the input:}

$|$\answer{Now is the time for all good men to come to the aid of their
country.  And all good women, too.  And so on and so forth.}$|$

$|$\answer{Now is the time for all good men to come to the aid of their
country.  And all good women,}$|$

$|$\answer{Now is the time for all good men to come to the}$|$

$|$\answer{}$|$

\medskip
{\bf A space at the end of the input:}

$|$\answer{Now is the time for all good men to come to the aid of their
country.  And all good women, too.  And so on and so forth. }$|$

$|$\answer{Now is the time for all good men to come to the aid of their
country.  And all good women, }$|$

$|$\answer{Now is the time for all good men to come to the }$|$

$|$\answer{ }$|$

\medskip
{\bf A space at the beginning of the input:}

$|$\answer{ Now is the time for all good men to come to the aid of their
country.  And all good women, too.  And so on and so forth.}$|$

$|$\answer{ Now is the time for all good men to come to the aid of their
country.  And all good women,}$|$

$|$\answer{ Now is the time for all good men to come to the}$|$

$|$\answer{ }$|$

\bye