14

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?

0

2 Answers 2

16

You cannot create a new lstlisting environment via \newenvironment. You need to use \lstnewenvironment. See the listings documentation, section 4.5 Environments (p 42).

enter image description here

\documentclass{article}

\usepackage{listings,xcolor}

\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}
    }

\lstnewenvironment{fslisting}
  {
    \lstset{
        language=FSharp,
        basicstyle=\ttfamily,
        breaklines=true,
        columns=fullflexible}
  }
  {
  }
\begin{document}

\begin{fslisting}
type 'a Process = 'a Signal IObservable
\end{fslisting}

\end{document}
1
  • The section in the reference changed to 5.14 on page 42
    – DBX12
    Apr 20, 2018 at 15:32
11

Just use the provided \lstnewenvironment command.

\documentclass{article}


\usepackage{xcolor}
\usepackage{listings}

\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}
    }

\lstnewenvironment{fslisting}
    {\lstset{language=FSharp,
                basicstyle=\ttfamily,
                breaklines=true,
                columns=fullflexible
    }}
    {}

\begin{document}

\begin{fslisting}
type 'a Process = 'a Signal IObservable
\end{fslisting}
\end{document}
1
  • and again too late... ;)
    – someonr
    Oct 24, 2012 at 21:54

You must log in to answer this question.

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