Ian, hello.
On 2012 May 14, at 16:38, J. Ian Johnson wrote:
> Anyway, I now find myself wanting use the listings package to write some
> pseudocode with mathescape (thus, verbatim is not good enough). I cannot use
> the identity trick for the lstlisting environment for whatever reason. It
> causes pdflatex to explode.
>
> That is, (bad):
> \identity{\begin{lstlisting}
> Test
> \end{lstlisting}}
>
> (good):
> \begin{lstlisting}
> Test
> \end{lstlisting}
>
> Why this is, I don't know. However, I don't know a way to generate the good
> case here. Is this possible? I really hope it is, since I'll have to use
> latex directly if not.
This will be at least hard, possibly very hard.
If I'm reading the source correctly, then the lstlisting environment has LaTeX
read the environment contents a line at a time (it's a tail recursion),
stopping when it (more or less) string matches the \end{lstlisting} alone on a
line. Or something like that -- I'm not completely sure what's happening in
there, but the general technique is to play exciting fun and games with TeX's
tokenisation mechanism.
The {verbatim} environment does something broadly similar.
Your \identity function, on the other hand, reads its entire argument at once,
which means it's tokenised with standard TeX conventions before lstlisting has
a chance to get to work.
About the only way you could get (what I take to be) the right effect would be
to do something like the following:
\documentclass{article}
\usepackage{listings}
\begin{document}
\setbox0=\vbox{
\begin{lstlisting}
Test
\end{lstlisting}
}
% box0 is now typeset and contained in a box
\copy0 % display box0 on the page
\box0 % display box0 and discard its contents
% \box0 is now empty
\end{document}
The box0 can probably be carried around in some useful way, though not looked
into.
Note, though, that box0 is usually used as a scratch box, so if you turn this
into a package, start with \newbox\mylistings, and replace '0' with
'\mylistings' throughout.
Have fun....
Norman
--
Norman Gray : http://nxg.me.uk
SUPA School of Physics and Astronomy, University of Glasgow, UK
____________________
Racket Users list:
http://lists.racket-lang.org/users