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

Reply via email to