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?

javex
  • 217
  • 2
  • 6
  • 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 '12 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 '12 at 10:53

3 Answers3

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.

egreg
  • 1,121,712
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}
Gonzalo Medina
  • 505,128
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)

user202729
  • 7,143