Listing Caption in Listenstrukturen

Schriftbild, Absätze und Auflistungen einstellen


Zentox

Listing Caption in Listenstrukturen

Beitrag von Zentox »

Ich verwende das Package listings und habe dazu einen custom Listing Design angelegt. Nun habe ich folgendes Problem in itemize bzw. enumerate, dass die Listings nicht wie gewünscht aussehen. Ich habe hierzu ein Beispiel eingefügt und hoffe, dass jemand mir weiterhelfen kann. Das unerwünschte Ergebnis seht ihr jeweils in enumerate. Alle Listings sollen wie Beispiel 0 aussehen.

Danke im Voraus!

\documentclass{article}

\usepackage{xcolor}
\usepackage{listings}

\definecolor{lstbgc}{gray}{0.9}
\usepackage{xcolor}
\usepackage{listings}
\usepackage{caption}

\definecolor{backgroundcolor}{rgb}{0.95, 0.95, 0.92}
\definecolor{commentcolor}{rgb}{0.55, 0.55, 0.55}
\definecolor{identifiercolor}{rgb}{0, 0, 0}
\definecolor{keywordcolor}{rgb}{0, 0, 0.5}
\definecolor{numbercolor}{rgb}{0, 0, 0}
\definecolor{stringcolor}{rgb}{0, 0.5, 0}

\lstdefinestyle{Java}{
	basicstyle = \mdseries,
	backgroundcolor =  \color{backgroundcolor},
	breaklines = true,
	commentstyle = \color{commentcolor},
	identifierstyle = \color{identifiercolor},
	keywordstyle = \color{keywordcolor},
	language = Java,
	morekeywords = {assert},
	numbers = left,
	numberstyle = \color{numbercolor},
	showspaces = false,
	showstringspaces = false,
	showtabs = false,
	stringstyle = \color{stringcolor},
	tabsize = 2,
	title = ~
}

\usepackage{caption}[2015/09/20]
\captionsetup[lstlisting]{%
	box = colorbox,
	boxcolor = black,
    font = {color = white},
    singlelinecheck = off
    }

\begin{document}
\begin{lstlisting}[style = Java,title = Beispiel 0]
public static void main(String[] args) {
	System.out.println("Hello World");
}
\end{lstlisting}
\begin{enumerate}
    \item item 1
        \begin{lstlisting}[style = Java ,title = Beispiel 1]
public static void main(String[] args) {
	System.out.println("Hello World");
}
        \end{lstlisting}
        bla bla
    \item item 2
        \begin{lstlisting}[style = Java ,title = Beispiel 2]
public static void main(String[] args) {
	System.out.println("Hello World");
}
        \end{lstlisting}
\end{enumerate}
\end{document}

Bild


sommerfee
Forum-Century
Forum-Century
Beiträge: 219
Registriert: Sa 12. Jul 2008, 08:02

Re: Listing Caption in Listenstrukturen

Beitrag von sommerfee »

Das ist ein Fehler im listings-Paket, oder zumindest eine Inkompatiblität des listing-Paketes mit Umgebungen, die auf Listen basieren. Beispiel:

\documentclass{book}
\usepackage{listings}
\lstset{language=C++,basicstyle={\ttfamily}}

\begin{document}
\begin{enumerate}
\item Erstes Item
\begin{lstlisting}[caption={Überschrift test test test test test test test test test test test test}]
#include <iostream>
int main()
{
  std::cout << "Hallo Welt!" << std::endl;
}\end{lstlisting}
\item Zweites Item
\end{enumerate}
\end{document}

Der Maintainer des listings-Paket weiß bescheid, allerdings habe ich keine Rückmeldung mehr seit August bekommen und weiß auch nicht, ob und für wann eine Anpassung geplant ist.

Konkret verwendet das listings-Paket \@makecaption zum Setzen der Beschriftung, welches \hsize als Bemessungsgrundlage verwendet, wie die Beschriftung gesetzt wird. Innerhalb von Listen ist aber \hsize so gesetzt, daß es die Seitenbreite umfasst, also passt das hier nicht. (Dies ist ein bekanntes Problem von \@makecaption in LaTeX, siehe auch https://www.latex-project.org/cgi-bin/l ... latex/2472 )

Eine mögliche Abhilfe innerhalb des listings-Paketes wäre es z.B., \@makecaption innerhalb einer \parbox der korrekten Breite zu verwenden.

Mein Rat: Schreibe dem Maintainer des listings-Paketes eine e-mail deswegen. (Er spricht deutsch.)


Antworten