[texhax] The last character of a string
Reinhard Kotucha
reinhard.kotucha at web.de
Fri Jan 29 23:40:34 CET 2010
On 29 January 2010 Donald Arseneau wrote:
> Michael Barr <barr at math.mcgill.ca> writes:
>
> > Is there a simple way to find the last character of a string?
>
> You have to scan through the tokens from first to last.
This sounds difficult at a first glance, but fortunately the LaTeX
kernel provides a macro (\@tfor, defined in ltcntrl.dtx) which might
be useful here.
Here an example file...
\documentclass{article}
\makeatletter
\@tfor\token := abcd \do {\edef\lasttoken{\token}}
\show\lasttoken
\stop
...and the result:
> \lasttoken=macro:
->d.
l.4 \show\lasttoken
If the token list is a macro, it has to be expanded in advance:
\def\list{abcd}
\expandafter\@tfor\expandafter\token\expandafter
:\expandafter=\list \do {\edef\lasttoken{\token}}
This could be a starting point. It saves a lot of work, at least.
> > What I want to do is add a period unless the string already
> > ends in a period, question mark, or exclamation mark,
>
> Oh that's easy -- check the value of \spacefactor.
> Easy, but not 100% reliable.
Problematic with \frenchspacing where \spacefactor is always 1000.
Maybe one should put \let\frenchspacing\relax into the preamble if the
document contains contributions from many authors.
BTW, another option is to pre-process the files using a scripting
language like Perl, Python, or Lua. Many problems can be solved
easier this way. Suppose you have a solution already for determining
the last token in a macro. Now you want to remove spaces in front of
exclamation/questionmarks too. It's very easy to solve these
problems with regular expressions. This is one of the reasons I'm
so much interested in LuaTeX.
Regards,
Reinhard
--
----------------------------------------------------------------------------
Reinhard Kotucha Phone: +49-511-3373112
Marschnerstr. 25
D-30167 Hannover mailto:reinhard.kotucha at web.de
----------------------------------------------------------------------------
Microsoft isn't the answer. Microsoft is the question, and the answer is NO.
----------------------------------------------------------------------------
More information about the texhax
mailing list