0

I did what was suggested here (I just want to use $...$ instead of \texttt{...}, for the sake of experiment):

\documentclass{article}
\catcode`\$=\active
\gdef$#1${\texttt{#1}}
\begin{document}
Hello, $world$!
\immediate\write18{echo $HOME}
\end{document}

The Hello, $world$ line works fine. However, \write18 fails:

! Argument of $ has an extra }.
<inserted text>
                \par
l.6 \immediate\write18{echo $HOME}

What is the right way to use $ inside \write18 in this case? I tried \$, no luck.

yegor256
  • 12,021

1 Answers1

2

echo \string$HOME

Or locally reset the catcode

Some other possiblities

1 xyz, /home/davidc
2 abc , string /home/davidc
3 abc , string /home/davidc
4 xyz, /home/davidc
5 xyz, /home/davidc

from

\documentclass{article}
\catcode`\$=\active
\gdef$#1${\texttt{#1}}
\def\abc{xyz}

\begin{document} Hello, $world$!

\immediate\write18{echo 1 \abc, \string$HOME}

\immediate\write18{\detokenize{echo 2 \abc, $HOME}}

\immediate\write18{\unexpanded{echo 3 \abc, $HOME}}

{\catcode`$=12 \immediate\write18{echo 4 \abc, $HOME}}

{\edef${\string$} \immediate\write18{echo 5 \abc, $HOME}}

Hello, $world$!

\end{document}

David Carlisle
  • 757,742