Caption bei lstlisting unter item bei itemize zu hoch Thema ist als GELÖST markiert

Schriftbild, Absätze und Auflistungen einstellen


Gast

Caption bei lstlisting unter item bei itemize zu hoch

Beitrag von Gast »

Hallo,
ich hab gerade den fall, dass bei ein Listing (lstlisting), welches ich mit unter einem \item aus itemize setzte, der Caption-Text um eine Zeile zu weit oben sitzt.
Das selbe listing ausserhalb des items verursacht den Fehler nicht.
Weiß da jemand bescheid?

Anbei ein Beispiel:
\begin{itemize}
  \item Text\\
          Text text text text text text...
\begin{lstlisting}[
    caption={Ausführen der Simulation},
    label=lst:Ausführen_der_Simulation,
    language=Matlab,
    numbers=left,
    numberstyle=\tiny,
    basicstyle=\ttfamily,%\scriptsize,
    commentstyle=\itshape\color{Matlab_darkgreen},
    keywordstyle=\bfseries\color{Matlab_darkblue},
    stringstyle=\color{Matlab_magenta},
    frame=single,
    tabsize=2,
    showtabs=false,
    keepspaces=true
    showstringspaces=false,
    captionpos=t,
    breaklines=true]
MATLAB-Code
\end{lstlisting}
\end{itemize}

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

Beitrag von sommerfee »

Diverse Dokumentenklassen und Zusatzpakete erweitern die Schnittstelle zum Setzen von Captions. Hierbei können sie nicht 100%ig kompatibel sein, da jedes Paket, welches diese Schnittstelle intern nutzt (wie etwa das listing-Paket), von anderen Grundvoraussetzungen ausgeht. (Was übrigens ein grundsätzliches Problem von LaTeX ist, es gibt keine Dokumentation für LaTeX-Paketautoren, die klärt, wie man welche internen LaTeX-Schnittstellen verwendet bzw. verwenden darf.) Es kann also immer Fälle geben, wo es kneift, und wo man ggf. mit einem kleinen Patch zugunsten des eigenen Anwendungsfalles nachhelfen muß.

Ich tippe hier auf einen solchen Fall, konkreteres kann ich aber nur mit einem kleinen, aber lauffähigen Beispiel sagen. (Siehe auch http://www.golatex.de/der-kleine-golate ... t1870.html , Stichwort "Minimalbeispiel")

Gast

Caption bei lstlisting unter item bei itemize zu hoch

Beitrag von Gast »

Hallo,
danke schonmal für das Angebot. Da ich mich leider nicht gut genug auskenne habe ich mal alle Usepackages in meinem Minimalbeispiel. Dadurch ist es leider nicht mehr wirklich minimal.
\documentclass[11pt, fleqn, halfparskip, a4paper, headsepline, idxtotoc, bibtotoc, liststotoc, bibtotocnumbered, pointlessnumbers,  DIV15,  BCOR1.0cm,  openbib, ngerman,]{scrbook}
\usepackage[ansinew]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{varioref}
\usepackage{xcolor}
\usepackage{framed}
\usepackage{graphicx}
\usepackage[sf,bf,SF,hang]{subfigure}
\usepackage[sf]{caption}
\usepackage{captcont}
\usepackage{here}
\usepackage{array}
\usepackage{booktabs}
\usepackage{longtable}
\usepackage{multirow}
\usepackage{eurosym}
\usepackage{url}
\usepackage[geometry]{ifsym}
\usepackage[intlimits,sumlimits]{amsmath}
\usepackage{amssymb}
\usepackage{theorem} 
\usepackage[amssymb,thickqspace]{SIunits}
\usepackage{icomma}
\usepackage{pdfpages}
\usepackage[babel]{csquotes}
\usepackage{listings}
\usepackage{bbding}
\usepackage{enumitem}
\definecolor{Matlab_darkblue}{rgb}{0.33,0,1}
\definecolor{Matlab_darkgreen}{rgb}{0.13,0.545,0.13}
\definecolor{Matlab_magenta}{rgb}{0.627,0.125,0.94}
\usepackage{cmbright}

\begin{document}

\chapter{Minimalbeispiel}
\begin{itemize}
  \item 1
  \item 2
\begin{lstlisting}[
    caption={Ausführen der Simulation},
    label=lst:Ausführen_der_Simulation,
    language=Matlab,
    numbers=left,
    numberstyle=\tiny,
    basicstyle=\ttfamily,%\scriptsize,
    commentstyle=\itshape\color{Matlab_darkgreen},
    keywordstyle=\bfseries\color{Matlab_darkblue},
    stringstyle=\color{Matlab_magenta},
    frame=single,
    tabsize=2,
    showtabs=false,
    keepspaces=true
    showstringspaces=false,
    captionpos=t,                   %t=Caption über Listing, b=drunter
    breaklines=true]
MATLAB-Quellcode
\end{lstlisting}
\end{document} 
Ich hoffe das Hilft weiter und verwirrt nicht nur.
Ich

Gast

Caption bei lstlisting unter item bei itemize zu hoch

Beitrag von Gast »

Hallo,
danke schonmal für das Angebot. Da ich mich leider nicht gut genug auskenne habe ich mal alle Usepackages in meinem Minimalbeispiel. Dadurch ist es leider nicht mehr wirklich minimal.
\documentclass[11pt, fleqn, halfparskip, a4paper, headsepline, idxtotoc, bibtotoc, liststotoc, bibtotocnumbered, pointlessnumbers,  DIV15,  BCOR1.0cm,  openbib, ngerman,]{scrbook}
\usepackage[ansinew]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{varioref}
\usepackage{xcolor}
\usepackage{framed}
\usepackage{graphicx}
\usepackage[sf,bf,SF,hang]{subfigure}
\usepackage[sf]{caption}
\usepackage{captcont}
\usepackage{here}
\usepackage{array}
\usepackage{booktabs}
\usepackage{longtable}
\usepackage{multirow}
\usepackage{eurosym}
\usepackage{url}
\usepackage[geometry]{ifsym}
\usepackage[intlimits,sumlimits]{amsmath}
\usepackage{amssymb}
\usepackage{theorem} 
\usepackage[amssymb,thickqspace]{SIunits}
\usepackage{icomma}
\usepackage{pdfpages}
\usepackage[babel]{csquotes}
\usepackage{listings}
\usepackage{bbding}
\usepackage{enumitem}
\definecolor{Matlab_darkblue}{rgb}{0.33,0,1}
\definecolor{Matlab_darkgreen}{rgb}{0.13,0.545,0.13}
\definecolor{Matlab_magenta}{rgb}{0.627,0.125,0.94}
\usepackage{cmbright}

\begin{document}

\chapter{Minimalbeispiel}
\begin{itemize}
  \item 1
  \item 2
\begin{lstlisting}[
    caption={Ausführen der Simulation},
    label=lst:Ausführen_der_Simulation,
    language=Matlab,
    numbers=left,
    numberstyle=\tiny,
    basicstyle=\ttfamily,%\scriptsize,
    commentstyle=\itshape\color{Matlab_darkgreen},
    keywordstyle=\bfseries\color{Matlab_darkblue},
    stringstyle=\color{Matlab_magenta},
    frame=single,
    tabsize=2,
    showtabs=false,
    keepspaces=true
    showstringspaces=false,
    captionpos=t,                   %t=Caption über Listing, b=drunter
    breaklines=true]
MATLAB-Quellcode
\end{lstlisting}
\end{document} 
Ich hoffe das Hilft weiter und verwirrt nicht nur.

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

Re: Caption bei lstlisting unter item bei itemize zu hoch

Beitrag von sommerfee »

Gast hat geschrieben:Da ich mich leider nicht gut genug auskenne habe ich mal alle Usepackages in meinem Minimalbeispiel.
Mir ist nicht klar, was das mit "auskennen" zu tun hat? Hast du www.minimalbeispiel.de gelesen? Wir beantworten sehr gerne Fragen, die damit zusammenhängen. Aber Ausflüchte, warum das nicht gemacht worden ist, und so die diese Arbeit auf mich (oder andere) abwälzen, habe ich ganz offen gesagt satt.

Ein Minimalbeispiel dient gleich zwei Zwecken, erstens ist es der allererste Schritt, um ein Problem zu analysieren. Von welchen Paketen und Einstellungen genau hängt das Problem ab? Genau diese Arbeit müsste, wenn du sie nicht machst, der Helfende (und zwar jeder, der helfen möchte!) machen. Da hier auf freiwilliger Basis geholfen wird, ist es unhöflich, diesen Schritt nicht selber zu machen.

Zweitens dient es dazu, den Helfern eine Grundlage zu geben, das Problem bei sich zu Hause nachzustellen und ggf. weiter zu analysieren. Wenn das Beispiel auf dem eigenen Rechner nicht übersetzbar ist (und deines ist bei mir nicht übersetzbar, und bei dir bestimmt auch nicht ohne Fehlermeldungen!), verliert jeder potentieller Helfer sehr schnell die Lust, sich das Problem weiter anzuschauen. Nicht umsonst kommen auf Anfragen ohne Minimalbeispiel häufig gar keine oder nur sehr unkonkrete Antworten.

Dein Beispiel geht doch schon'mal in die richtige Richtung. Wenn es noch ohne Fehlermeldung übersetzbar wäre, und nicht unnötig viele Pakete einbinden würde, wäre es prima. (Um herauszufinden, welche Pakete unnötig für die Problemreproduktion sind, schmeißt man einfach eines nach dem anderen heraus. Ist das Beispiel immer noch übersetzbar und das Problem immer noch da, kann es draußen bleiben, ansonsten muß es wieder rein.)

Da es in deinem Falle recht einfach war, habe ich dir diese Arbeit abgenommen, herausgekommen ist folgendes:
\documentclass[ngerman]{scrbook} 

\usepackage{babel} 
\usepackage[sf]{caption} 
\usepackage{listings} 

\begin{document} 

\chapter{Minimalbeispiel} 
\begin{itemize} 
   \item 1 
   \item 2 
\begin{lstlisting}[ 
     caption={Ausfuehren der Simulation}, 
     label=lst:Ausfuehren_der_Simulation, 
     language=Matlab, 
     numbers=left, 
     numberstyle=\tiny, 
     basicstyle=\ttfamily,%\scriptsize, 
     commentstyle=\itshape\color{Matlab_darkgreen}, 
     keywordstyle=\bfseries\color{Matlab_darkblue}, 
     stringstyle=\color{Matlab_magenta}, 
     frame=single, 
     tabsize=2, 
     showtabs=false, 
     keepspaces=true 
     showstringspaces=false, 
     captionpos=t,                   %t=Caption über Listing, b=drunter 
     breaklines=true] 
 MATLAB-Quellcode 
\end{lstlisting}
\end{itemize}
\end{document}
Es ist ein Fehler im listings-Paket: Da der interne \caption-Code \hsize als Breitenmaß verwendet, hätte das listings-Paket auch vor der Verwendung des internen \caption-Makros dafür Sorge tragen müssen, daß \hsize immer richtig gesetzt ist. Innerhalb einer itemize-Umgebung ist dies offensichtlich nicht der Fall.

Ohne caption-Paket betrifft dieser Fehler nur Captions bestimmter Länge, und wirkt sich auch anders aus. Deswegen ist der Fehler in Verbindung mit dem caption-Paket lästig(er).

Man könnte sich mit folgendem Workaround behelfen, der abschätzt, ob \hsize richtig gesetzt ist oder nicht, und das ggf. nachholt. Ich hoffe es ist eine Verbesserung und keine Verschlimmbesserung:
\documentclass[ngerman]{scrbook} 

\usepackage{babel} 
\usepackage[sf]{caption} 
\usepackage{listings} 

% Workaround für Bug im listing-Paket in Verbindung mit Beschriftungen.
% (Benötigt das caption-Paket v3.1 oder neuer)
\DeclareCaptionOption{test}[]{%
  \ifdim\hsize>\linewidth\hsize\linewidth\fi}
\captionsetup[lstlisting]{test}

\begin{document} 

\chapter{Minimalbeispiel} 
\begin{itemize} 
   \item 1 
   \item 2 
\begin{lstlisting}[ 
     caption={Ausfuehren der Simulation}, 
     label=lst:Ausfuehren_der_Simulation, 
     language=Matlab, 
     numbers=left, 
     numberstyle=\tiny, 
     basicstyle=\ttfamily,%\scriptsize, 
     commentstyle=\itshape\color{Matlab_darkgreen}, 
     keywordstyle=\bfseries\color{Matlab_darkblue}, 
     stringstyle=\color{Matlab_magenta}, 
     frame=single, 
     tabsize=2, 
     showtabs=false, 
     keepspaces=true 
     showstringspaces=false, 
     captionpos=t,                   %t=Caption über Listing, b=drunter 
     breaklines=true] 
 MATLAB-Quellcode 
\end{lstlisting}
\end{itemize}
\end{document}

Gast

DANKE!

Beitrag von Gast »

Vieln Dank für die Mühe und natürlich die Lösung. Ich kann es zwar nicht wirklich nachvollziehen was da gemacht wird, aber es Funktioniert bestens.

VIELEN DANK!

Antworten