29

I would like to specify two different lstset settings in one latex file: one for java code, one for html. Is this somehow possible?

The solution of https://stackoverflow.com/questions/2654810/how-to-reset-lstset-settings-for-listings does not seem to be appropriate for my document because I have more than just one html listing.

nrainer
  • 503

3 Answers3

26

Every lstlistings block can have its own formatting commands. So:

\documentclass{article}
\usepackage{listings}
\lstset{basicstyle=\ttfamily}
\begin{document}
\begin{lstlisting}
  Foo
\end{lstlisting}

\begin{lstlisting}[basicstyle=\sffamily]
  Bar
\end{lstlisting}

\lstset{basicstyle=\rmfamily}

\begin{lstlisting}
  Baz
\end{lstlisting}

\end{document}

If you want to use two distinct listings and resetting the listings like this manually is a hassle, just create some new environments with lstnewenvironment for example:

\lstnewenvironment{sflisting}{\lstset{basicstyle=\sffamily}}{}
\lstnewenvironment{ttlisting}{\lstset{basicstyle=\ttfamily}}{}

page 42 of the listings manual has the details

Seamus
  • 73,242
14

I use a style definition for every language, here is an example for makefiles:

\lstdefinestyle{makefile}
{
    numberblanklines=false,
    language=make,
    tabsize=4,
    keywordstyle=\color{red},
    identifierstyle= %plain identifiers for make
}

To include this style, I use

\lstinputlisting[
    inputencoding=latin1, 
    firstline=1, 
    %lastline=10,
    caption={[Makefile]Makefile, foobar},
    style=makefile
]{./src/makefile}

Other styles have another value for language(and other settings for keywords, tabsizes etc.)

0x6d64
  • 412
9
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{bera}
\usepackage{listings}
\lstdefinestyle{tt}{basicstyle=\small\ttfamily,keywordstyle=\bfseries,language=[LaTeX]{TeX}}
\lstdefinestyle{rm}{basicstyle=\ttfamily,keywordstyle=\slshape,language=[LaTeX]{TeX}}

\begin{document}
\begin{lstlisting}[style=tt]
\documentclass{foo}
\end{lstlisting}

\begin{lstlisting}[style=rm]
\documentclass{bar}
\end{lstlisting}

\begin{lstlisting}
  Baz
\end{lstlisting}

\end{document}

enter image description here

  • How can I combine the flexibility of your answer with \lstnewenvironment, such that I can keep my custom environment, yet switch the languages e.g. \begin{customenv}[language=bash] and have another one like \begin{customenv}[language=java] and have another one like \begin{customenv} that defaults to [language=java] or just plain without syntax highlighting? – Jonathan Komar Feb 10 '15 at 14:52