1

I'm trying to typeset some code. That code has some embedded mathematics, but in the embedded mathematics, I need to reference variables from the code. I would like for the variables in referenced inside the mathematics to be typeset like the actual code (so I do not want to use the mathtt environment). Unfortunately I get an error when I try to do this. Here is an example:

\documentclass[11pt]{article}
\usepackage{listings}

\begin{document}
\begin{lstlisting}[mathescape]
@pre: $ \langle \lstinline!a! \rangle $
\end{lstlisting}
\end{document}

I get the following error message:

ERROR: Extra }, or forgotten \endgroup.

--- TeX said ---
<recently read> \egroup 

l.6 @pre: $ \langle \lstinline!a!
                                  \rangle $

I've also tried using \lstinline{a}. I've also tried embedding this inside an \mbox and a \parbox. I've also tried using the \begin{lstlisting}[escapechar=^] and adding an extra ^ around the math formula.

I cannot simply leave the escape environment as I am wrapping these inlined characters in big symbols like \left( and \right).

4
  • Why not simply $\langle$a$\rangle$?
    – egreg
    Jan 28, 2013 at 20:22
  • $\langle$a$\rangle$ works in this example, however, $\left($a$\right)$ does not work as mentioned in the last sentence.
    – Arlen Cox
    Jan 28, 2013 at 20:41
  • 3
    In section 4.14 of the listings documentation you find "Don't use any commands of the listings package when you have escaped to LaTeX". You can use $\biggl($ and $\biggr)$ (or variations thereof).
    – egreg
    Jan 28, 2013 at 20:54
  • I missed that. Thanks for the citation. However it doesn't solve the general problem of placing arbitrary formulas that include listings formatted elements within a listing. The \savebox box technique does work, however.
    – Arlen Cox
    Jan 28, 2013 at 21:23

1 Answer 1

3

I think you want a savebox.

\documentclass[11pt]{article}

\usepackage{listings}

\begin{document}

\newsavebox\boxa
\savebox\boxa{\lstinline{a}}

\begin{lstlisting}[mathescape]
@pre: $ \langle \usebox{\boxa} \rangle $
\end{lstlisting}

\end{document}
2
  • This works! The syntactic overhead is really high however. Is there a way to make this more compact?
    – Arlen Cox
    Jan 28, 2013 at 20:46
  • @ArlenCox There may be a way to make it more compact, but I'm not sure how to do it, given everything that is going on with listings. I suspect something tricky involving catcodes would be required. egreg's suggestion is probably best, if you want compact.
    – G. Poore
    Jan 28, 2013 at 21:53

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .