How to cross-reference inside of a verbatim (or listings) environment
You're not missing simple features; the standard verbatim
environment doesn't allow for interpreting commands. However, the fancyvrb
package has this facility:
\documentclass{article}
\usepackage{amsmath}
\usepackage{listings}
\usepackage{fancyvrb}
\begin{document}
This is the pythagorean theorem:
\begin{equation}\label{eq:pyth}
a^2+b^2=c^2
\end{equation}
I can reference it normally: Equation \ref{eq:pyth}.
I can write a code example that will work:
\begin{Verbatim}[commandchars=\\\[\]]
# An R function to solve for c.
# See Equation \ref[eq:pyth] for details.
solve.for.c <- function(a,b){
return( sqrt(a^2 + b^2))
}
\end{Verbatim}
And also a \texttt{lstlisting} environment:
\begin{lstlisting}[language=R,escapechar=',columns=fullflexible]
# An R function to solve for c.
# See Equation '\ref{eq:pyth}' for details.
solve.for.c <- function(a,b){
return( sqrt(a^2 + b^2))
}
\end{lstlisting}
\end{document}
For commandchars
in Verbatim
you have to specify three characters (escaped with the backslash) that aren't otherwise used in the environment's text. The same for escapechar
with lstlisting
. These characters may be chosen "locally".
Take your pick.
If you have three handy characters that don't appear in the verbatim text you can use them instead of \ { }
for example
\documentclass{article}
\usepackage{amsmath}
\makeatletter
\let\oldv\@verbatim
\def\@verbatim{\oldv\catcode`\!=0 \catcode`\`=1 \catcode`\'=2 }
\makeatother
\begin{document}
This is the pythagorean theorem:
\begin{equation}\label{eq:pyth}
a^2+b^2=c^2
\end{equation}
I can reference it normally: Equation \ref{eq:pyth}.
I can write a code example that won't work:
\begin{verbatim}
# An R function to solve for c.
# See Equation !ref`eq:pyth' for details.
solve.for.c <- function(a,b){
return( sqrt(a^2 + b^2))
}
\end{verbatim}
How can I do this better?
\end{document}