Ausrichtung Rahmen: Listing mit Überschrift

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Ausrichtung Rahmen: Listing mit Überschrift

von esdd » Fr 20. Mär 2015, 10:35

framextopmargin scheint nur dann Einfluss zu haben, wenn eine Linie oberhalb gezeichnet wird, also bei der Option frame auch t angegeben ist. Dann musst Du aber in belowcaptionskip noch die Tiefe einer \strutbox und \fboxsep berücksichtigen.
\documentclass{report} 
\usepackage{xcolor} 
\usepackage{listings} 

\usepackage{caption} 
\DeclareCaptionFont{white}{\color{white}} 
\DeclareCaptionFormat{listing}{% 
   \hspace*{-0.4pt}\colorbox{gray}{\parbox{\dimexpr\textwidth-2\fboxsep+.8pt\relax}{#1#2#3}}}
\captionsetup[lstlisting]{format=listing,labelfont=white,textfont=white} 

\lstdefinestyle{framed} 
{ 
       frame=lrbt,         
       belowcaptionskip=\dimexpr\dp\strutbox+\fboxsep-1.2pt\relax, 
       xleftmargin=8pt, 
       framexleftmargin=8pt, 
       xrightmargin=5pt,% ergänzt 
       framexrightmargin=5pt, 
       framextopmargin=5pt, 
       framexbottommargin=5pt, 
       framesep=0pt, 
       rulesep=0pt, 
   } 

\begin{document} 
\begin{lstlisting}[style=framed,label=some-code,caption=Some Code] 
  public void here() { 
      goes().the().code() 
} 
\end{lstlisting} 
\end{document} 
Gruß
Elke

von Rodnay » Do 19. Mär 2015, 22:04

Perfekt, herzlichen Dank esdd! Funktioniert super.

Eine kleine Nachfrage noch - ist aber nur ein Detail:
Damit die Rahmen links/rechts bündig mit der Box wurden, musste ich das "belowcaptionskip" auf -1pt setzen. Dadurch wird natürlich auch der Text innerhalb der Box beeinflusst und erscheint nun höher (siehe Bild Eröffnungspost).
Gibts auch da eine Möglichkeit zur Steuerung?

von esdd » Do 19. Mär 2015, 13:30

Du musst caption nur um die Breite der Linie (in der Voreinstellung .4pt) nach links schieben.

Außerdem sind Deine Listings zu breit. Ich hab das jetzt mal gleich mit korrigiert:
\documentclass{report} 
\usepackage{xcolor} 
\usepackage{listings} 

\usepackage{caption} 
\DeclareCaptionFont{white}{\color{white}} 
\DeclareCaptionFormat{listing}{%
  \hspace*{-0.4pt}\colorbox{gray}{\parbox{\dimexpr\textwidth-2\fboxsep+.8pt\relax}{#1#2#3}}} 
\captionsetup[lstlisting]{format=listing,labelfont=white,textfont=white} 

\lstdefinestyle{framed} 
{ 
      frame=lrb,         
      belowcaptionskip=-1pt, 
      xleftmargin=8pt,
      framexleftmargin=8pt, 
      xrightmargin=5pt,% ergänzt
      framexrightmargin=5pt, 
      framextopmargin=5pt, 
      framexbottommargin=5pt, 
      framesep=0pt,
      rulesep=0pt, 
  } 

%\usepackage{showframe}% Seitenaufteilung anzeigen
\begin{document} 

\begin{lstlisting}[style=framed,label=some-code,caption=Some Code] 
 public void here() { 
     goes().the().code() 
} 
\end{lstlisting} 

\end{document} 
Gruß
Elke

von Rodnay » Do 19. Mär 2015, 12:11

Danke für den Hinweis MGommes!
Das sieht tatsächlich gut aus, würde aber erfordern, dass ich alle listings in meiner gesamten Arbeit noch einmal umschreiben müsste (extrem viele).

Eine reine Markup-Lösung wäre mir daher am liebsten.
Was kann es denn an Gründen für die Verschiebung geben? Problem ist, dass ich die Überschrift per captionsetup nur sehr eingeschränkt konfigurieren kann. Ich habe keinen direkten Zugriff auf Margins o.ä...

von MGommes » Do 19. Mär 2015, 11:54

Man könnte auch tcolorbox verwenden, siehe folgendes Beispiel im Online Editor.
\documentclass{scrreprt}
\usepackage{xcolor}
\usepackage{listings}
\usepackage{tcolorbox}
\tcbuselibrary{listings}

\begin{document}

\section*{Vorschlag}

Hier mal ein Vorschlag aus tcolorbox.pdf.

\bigskip
% \tcbuselibrary{listings} /or/ \tcbuselibrary{listingsutf8}
\begin{tcblisting}{colback=yellow!5,colframe=yellow!50!black,listing only,
title=This is source code in another language (XML), fonttitle=\bfseries,
listing options={language=XML,columns=fullflexible,keywordstyle=\color{red}}}
<?xml version="1.0"?>
<project name="Package tcolorbox" default="documentation" basedir=".">
<description>
Apache Ant build file (http://ant.apache.org/)
</description>
</project>
\end{tcblisting}

\end{document}

Ausrichtung Rahmen: Listing mit Überschrift

von Rodnay » Do 19. Mär 2015, 09:38

Guten Morgen!

Ich probiere gerade in meinem Dokument die Listings mit einer gut formatierten Überschrift und Rahmen zu Versehen. Das Template dafür kommt von
http://stackoverflow.com/questions/7419 ... onal-books

Leider kommt es zu einer minimal falschen Ausrichtung der Rahmen (etwa 1px?)

Ich habe folgendes Beispieldokument, das den Fehler reproduziert:
\documentclass{report}

\usepackage{color}
\usepackage{xcolor}
\usepackage{listings}

\usepackage{caption}
\DeclareCaptionFont{white}{\color{white}}
\DeclareCaptionFormat{listing}{\colorbox{gray}{\parbox{\textwidth}{#1#2#3}}}
\captionsetup[lstlisting]{format=listing,labelfont=white,textfont=white}

\lstdefinestyle{framed}
{
     frame=lrb,         
     belowcaptionskip=-1pt,
     xleftmargin=8pt,
     framexleftmargin=8pt,
     framexrightmargin=5pt,
     framextopmargin=5pt,
     framexbottommargin=5pt,
     framesep=0pt,
     rulesep=0pt,
 }

\begin{document}

\begin{lstlisting}[style=framed,label=some-code,caption=Some Code]
public void here() {
    goes().the().code()
}
\end{lstlisting}

\end{document}
Das Ergebnis sieht dann so aus:
Bild

Der Rahmen ist um etwa 1px nach links verschoben gegenüber der Überschrifts-Box. Ich vermute, das hat irgendwie mit dem Rahmen der Überschrift zu tun. Ich habe nicht rausgefunden, wie ich diesen setzen kann.

Wenn ich das Verhältnis xleftmargin zu framexleftmargin ändere, dann verschiebt sich der Rahmen insgesamt relativ zu der Box. Eine genaue Ausrichtung erreiche ich so aber nicht, selbst wenn ich feinere Einheiten verwende.

Vielen Dank vorab für jeden Hinweis!

Nach oben