[texhax] The last character of a string
Uwe Lueck
uwe.lueck at web.de
Fri Jan 29 17:11:21 CET 2010
Michael Barr <barr at math.mcgill.ca> schrieb am 29.01.2010 02:17:23:
> Yes, inside TeX. Since it pertains only to a few macros, I could search
> them by hand. An example is that I might get a paper to edit and it has
> \subjclass{...}. If it ends with a period, then I want to set it as is.
> If it doesn't, I want to add one. Some authors do the one and some do the
> other. Another one is \subsection{...} whose parameter might end in a
> period, a question mark, or even an exclamation point. Same issue. A few
> authors use \subsubsection. I am ambivalent about \section since the
> section headers are separated. If it were just my own work, I could be
> consistent, but I am TeX editor for an online journal.
\let\OrdSubsection\subsection
\def\subsection{\let\AfterPunctTest\OrdSubsection \MaybeAddPunct}
%% and the like with:
\newif\ifPunct
\def\MaybeAddPunct#1{%
\Punctfalse
\TestDot#1\TestEnd.\TestEnd\TestStop
\TestQuestM#1\TestEnd?\TestEnd\TestStop
\TestExclaM#1\TestEnd!\TestEnd\TestStop
\AfterPunctTest{#1\ifPunct \else .\fi}%
}
\def\TestDot#1.\TestEnd#2\TestStop{\TestPunct{#2}}
\def\TestQuestM#1?\TestEnd#2\TestStop{\TestPunct{#2}}
\def\TestExclaM#1!\TestEnd#2\TestStop{\TestPunct{#2}}
\def\TestPunct#1{\ifx\TestPunct#1\TestPunct\else\Puncttrue\fi}
HTH -- Uwe.
P.S.: with optional arguments ...
> On Thu, 28 Jan 2010, Pierre MacKay wrote:
>
> > On 01/28/2010 03:25 PM, Michael Barr wrote:
> >> Is there a simple way to find the last character of a string? Assume the
> >> string is brace delimited. What I want to do is add a period unless the
> >> string already ends in a period, question mark, or exclamation mark, but I
> >> don't see any way short of going through the string knocking off one
> >> character at a time.
> >>
> > I assume that this has to be done within TeX. Otherwise it is a function of
> > whatever editor you are using:
> >
> > It is a problem I often find, and I use the emacs "narrow-to-region" command.
> > Find whatever triggers the opening brace,
> > save the position and then (if there are no intervening paired braces) find
> > the closing brace. Narrow to region, and then search just before the closing
> > brace. It is very fast indeed.
> >
> > The need for this ability to narrow to a specific context is one of the
> > reasons for providing specific *begin* and *end* macros in many contexts,
> > rather than insisting that the context appear as a macro parameter. The
> > LaTeX adapters of Ibycus have insisted on the macro parameter model, but in
> > Plain Tex I stick with \GK{} and \RM{} which allow a clean "narrow-to-region"
> > operation on any passage of any size. These macros make it possible to run
> > efficiently through a long article and check the correctness of the Greek
> > without having to scroll through all the non-Greek text.
> >
> > Pierre MacKay
More information about the texhax
mailing list