2

in order to improve reledmac, I would like to write in an auxiliary file, but changing the case when writing in this file.

I have tried

\documentclass{article}
\begin{document}
s
\newwrite\sncf
\openout\sncf=sncf.tex

\makeatletter
\expandafter\write\expandafter\sncf\expandafter{\lowercase{TOTO}}
\write\sncf{\lowercase{TOTO}}
\protected@write{\sncf}{}{\lowercase{SNCF}}
\closeout\sncf
\end{document}

But, in the sncf.tex I get

\lowercase {TOTO}
\lowercase {TOTO}
\lowercase {SNCF}
3

With a little help from David Carlisles answer on this question.

The \lowercase changes argument #2 into lowercase letters, before \@tmp is defined.

\documentclass{article}

\makeatletter
% #1: stream
% #2: text
\newcommand{\WriteAsLowerCase}[2]{%
    \lowercase{\def\@tmp{#2}}%
    \expandafter\write\expandafter#1\expandafter{\@tmp}%
}
\makeatother

\begin{document}
s
\newwrite\sncf
\openout\sncf=sncf.tex
\WriteAsLowerCase{\sncf}{TOTO}
\WriteAsLowerCase{\sncf}{TATA}
\WriteAsLowerCase{\sncf}{SNCF}
\closeout\sncf
\end{document}

With this sncf.tex looks like this:

toto
tata
sncf

Remark: without all the \expandafters the text gets converted to lowercase too. But since \write is delayed until the next page is shiped out, the last meaning of \@tmp would be used. Thus you would get three lines, all containing sncf.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.