I am trying to define an enviroment for a specific programming language, F#. Here's my code:
\definecolor{bluekeywords}{rgb}{0.13,0.13,1}
\definecolor{greencomments}{rgb}{0,0.5,0}
\definecolor{turqusnumbers}{rgb}{0.17,0.57,0.69}
\definecolor{redstrings}{rgb}{0.5,0,0}
\lstdefinelanguage{FSharp}
{morekeywords={let, new, match, with, rec, open, module, namespace, type, of, member, and, for, in, do, begin, end, fun, function, try, mutable, if, then, else},
keywordstyle=\color{bluekeywords},
sensitive=false,
morecomment=[l][\color{greencomments}]{///},
morecomment=[l][\color{greencomments}]{//},
morecomment=[s][\color{greencomments}]{{(*}{*)}},
morestring=[b]",
stringstyle=\color{redstrings}
}
\newenvironment{fslisting}
{
\lstset{
language=FSharp,
basicstyle=\ttfamily,
breaklines=true,
columns=fullflexible}
\begin{lstlisting}
}
{
\end{lstlisting}
}
Then I'm trying to use it as such:
\begin{fslisting}
type 'a Process = 'a Signal IObservable
\end{fslisting}
But it doesn't work. The output log says that the listing is not terminated – or is terminated by the document. So the rest of the document is also formatted as a listing, which is of course not the intention.
What am I doing wrong here?
Best Answer
You cannot create a new
lstlisting
environment via\newenvironment
. You need to use\lstnewenvironment
. See thelistings
documentation, section 4.5 Environments (p 42).