7

I try to do this:

\begin{lstlisting}[language=Perl,caption={text {\verb+myverb+} some more text}]
...
\end{lstlisting}

But it gives me something like:

Undefined control sequence ... some more

How to I include an linline verb inside my caption?

2
  • 2
    Welcome to TeX.SX! Do you really need \verb because what you denote with myverb has special characters in it? If it hasn't, then \texttt{myverb} does the same.
    – egreg
    Sep 12, 2012 at 10:45
  • Okay, that works and looks the same. I would really prefer to use verb if possible at all, because I like to grep through my tex files and I now won't collect all verbs with this. But that is a minor setback. If there is no real solution, please post your comment as an answer, so I can accept it.
    – javex
    Sep 12, 2012 at 10:53

3 Answers 3

7

\verb is a very peculiar command in LaTeX and this peculiarity consists in the fact that it may not appear in the argument of another command. In your example it is in the optional argument to \begin{lstlisting} and this is disallowed (because of very good reasons).

Actually \verb is necessary only when characters special for (La)TeX are needed: # $ % ^ & { } _ \. When none of these character is needed, one can use \texttt{myverb material} with the same result as that given by \verb.

However, this doesn't solve the problem of grepping through your files for finding all \verb. You can do

\protected\def\psverb#1{\def\innerpsverb##1#1{\texttt{##1}}

and the example would become

\documentclass{article}
\usepackage{listings}
\protected\def\psverb#1{\def\innerpsverb##1#1{\texttt{##1}}\innerpsverb}

\begin{document}
\begin{lstlisting}[language=Perl,caption={text {\psverb+myverb+} some more text}]
...
\end{lstlisting}
\end{document}

Grepping for \verb or \psverb should be quite easy.

3
  • Perfect solution and thanks for the explanation.
    – javex
    Sep 12, 2012 at 11:26
  • {\psverb!S#Var!}: You can't use 'macro parameter character #' in horizontal mode. I have to escape hash characters, like so now compared to Verb!...!: {\psverb!S\#Var!}
    – Emit Taste
    Nov 5, 2013 at 22:48
  • @EmitTaste Yes, that's what you need to do.
    – egreg
    Nov 5, 2013 at 23:03
4

Another option not requiring any new commands is to use \lstinline:

\documentclass{article}
\usepackage{listings}

\begin{document}

\begin{lstlisting}[language=Perl,caption={text {\lstinline[basicstyle=\ttfamily]+myverb+} some more text}]
...
\end{lstlisting}

\end{document}
0

Using my new cprotectinside package:

%! TEX program = lualatex
\documentclass{article}
\usepackage{listings}
\usepackage{cprotectinside}

\begin{document}
\cprotectinside{*}{
\begin{lstlisting}[language=Perl,caption={text *\verb+myverb+* some more text}]
code code
code code
\end{lstlisting}
}
\end{document}

(this answer is also included in the package documentation as an example)

You must log in to answer this question.

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