Anzeige:
Ergebnis 1 bis 4 von 4

Thema: listings: Formatierung der Zeilennummerierung

  1. #1
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    377

    Exclamation listings: Formatierung der Zeilennummerierung

    Hallo,

    ich weiss nicht, ob das jetzt so moeglich ist, aber ich hab folgendes vor:
    Die Caption soll oberhalb dem Listing in einer eigenen Box erscheinen wie unten
    eingezeichnet. Diese Box soll einen Farbhintergrund erhalten.
    Auch der "gesamte" Bereich der Zeilennummerierung soll farblich hinterlegt sein.
    Der Quelltext soll dann aber ganz normal formatiert werden.

    Code:
        -----------------------------------------------
        | Listing 1: bla                              |
        -----------------------------------------------
    | 1| Quelltext...                                 |
    | 2| Quelltext ...                                |
             ...
    |10| Quelltext...                                 |
        -----------------------------------------------
    Hoffentlich habt ihr da ne Idee dazu! Ich hab mal folgendes probiert:
    Code:
    \usepackage{xcolor}
    \usepackage{listings}
    \usepackage{caption}
    
    \DeclareCaptionFont{white}{\color{white}}
    \DeclareCaptionFormat{listing}{\colorbox{blue}{\parbox{\textwidth}{#1#2#3}}}	
    \captionsetup[lstlisting]{format=listing,labelfont=white,textfont=white}
    
    \lstset{
    	rulesepcolor=\color{yellow},
    	frame=single,
    	label=some-code,
    	caption=Some Code,
    	basicstyle=\footnotesize\ttfamily,
    	numbers=left,
    	language=tex,
    	keywordstyle=\color{blue},
    	showtabs=false,
    	commentstyle=\color{green},
    	stringstyle=\color{red},
    	tabsize=2,
    	extendedchars=true,
    	xleftmargin=10pt,
    	breaklines=true
    }
    
    \renewcommand*\thelstnumber{\colorbox{red}{\the\value{lstnumber}}}
    Hintergrundfarbe fuer Caption funktioniert. Die Zeilennummerierung (Hintergrund) funktioniert nur bedingt, halt nicht so wie ich mir das vorstelle.
    Und die Box fuer den Quelltext ist auch vollkommen verschoben ...

    Jemand ne Idee?
    Amilo D - 2,8 Ghz - ATI Radeon 9000
    Debian GNU/Linux 3.1 (Sarge)

  2. #2
    Registrierter Benutzer Avatar von rais
    Registriert seit
    18.07.2005
    Beiträge
    5.859
    Moin moin,
    Zitat Zitat von nul Beitrag anzeigen
    Hintergrundfarbe fuer Caption funktioniert. Die Zeilennummerierung (Hintergrund) funktioniert nur bedingt, halt nicht so wie ich mir das vorstelle.
    Und die Box fuer den Quelltext ist auch vollkommen verschoben ...
    nun ja, Dein
    Code:
    \DeclareCaptionFormat{listing}{\colorbox{blue}{\parbox{\textwidth}{#1#2#3}}}
    wird breiter als \textwidth, weil die \colorbox noch einen Rahmen von \fboxsep herum setzt. Vllt ist ja
    Code:
    \documentclass[ngerman]{article}
    \usepackage{babel,blindtext,xcolor}
    \usepackage{listings}
    \usepackage{caption}
    
    \DeclareCaptionFont{white}{\color{white}}
    \newlength\myx
    \newlength\myxa
    \setlength\myxa{\fboxsep}
    \addtolength\myxa{\fboxrule}
    \setlength\myx{\textwidth}
    \addtolength\myx{-2\fboxsep}
    \DeclareCaptionFormat{listing}{\colorbox{blue}{\parbox{\myx}{#1#2#3}}}	
    \captionsetup[lstlisting]{format=listing,labelfont=white,textfont=white}
    \lstset{
    	rulesepcolor=\color{yellow},
    	frame=single,
    	label=some-code,
    	caption=Some Code,
    	basicstyle=\footnotesize\ttfamily,
    	numbers=left,
    	numbersep=\myxa,
    	language=[LaTeX]TeX,
    	keywordstyle=\color{blue},
    	showtabs=false,
    	commentstyle=\color{green},
    	stringstyle=\color{red},
    	tabsize=2,
    	extendedchars=true,
    	xleftmargin=\myxa,
    	xrightmargin=\myxa,
    	breaklines=true
    }
    
    \renewcommand*\thelstnumber{\colorbox{red}{%
    	\ifnum\value{lstnumber}<100 0\fi
    	\ifnum\value{lstnumber}<10 0\fi
    	\arabic{lstnumber}}}
    \begin{document}
    \blindtext
    \lstinputlisting[caption=foo]{\jobname.tex}% Ein Dokument zeigt sich selbst;-)
    \blindtext
    \end{document}
    eher nach Deiner Mütze.

    MfG
    Rainer
    There's nothing a good whack with a hammer won't fix!

  3. #3
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    377
    ja, kommt so ungefaehr hin. Hab jetzt das noch minimal angepasst, soweit ich halt gekommen bin!

    Code:
    \documentclass[ngerman,pdftex]{article}
    \usepackage{babel,blindtext,xcolor}
    \usepackage{listings}
    \usepackage{caption}
    \usepackage[scale=0.81]{geometry}
    
    \newlength\myx
    \newlength\myxa
    \setlength\myxa{\fboxsep}
    \addtolength\myxa{\fboxrule}
    \setlength\myx{\textwidth}
    \addtolength\myx{-2\fboxsep}
    
    \DeclareCaptionFont{white}{\color{white}\emph}
    \DeclareCaptionFormat{listing}{\colorbox{blue}{\parbox{\myx}{#1#2#3}}}	
    \captionsetup[lstlisting]{format=listing,labelfont=white,textfont=white}
    
    \lstset{
    	rulesepcolor=\color{yellow},
    	frame=single,
    	label=some-code,
    	caption=Some Code,
    	basicstyle=\scriptsize\ttfamily,
    	numbers=left,
    	numbersep=0.65pt,
    	language=[LaTeX]TeX,
    	keywordstyle=\color{blue},
    	showtabs=false,
    	commentstyle=\color{green},
    	stringstyle=\color{red},
    	tabsize=2,
    	extendedchars=true,
    	xleftmargin=\myxa,
    	xrightmargin=\myxa,
    	breaklines=true
    }
    
    \renewcommand*\thelstnumber{
    	\colorbox{red}{
    		\ifnum\value{lstnumber}<100 \texttt{ }\fi
    		\ifnum\value{lstnumber}<10 \texttt{ }\fi
    		\texttt{\expandafter\arabic{lstnumber}}
    	}
    }
    
    \begin{document}
    	\blindtext
    	\lstinputlisting{Vorlage.tex}
    	\blindtext
    \end{document}
    Einige Probleme leiben aber immer noch, die ich nicht loesen konnte:
    1) Durch die Farbbox der Zeilennummerierung werden die Zeilen hoeher, das fuehrt dazu, dass der Frame (Rand) um den Code luecken erhaelt. Und, wenn man genau hinschaut, dass zwischen den einzelnen Zeilennummern ein minimaler Weisser Rand zu sehen ist.
    Hab zumindest letzteren Problem versucht mit ner \fcolorbox an den Leib zu ruecken, aber das hat die Situation eher noch schlechter gemacht.
    2) Der minimale Abstand des Caption vom Rand des Quellcodes

    Vielleicht hat ja jemand noch ne Eingebung und kann mir weiter helfen!
    Amilo D - 2,8 Ghz - ATI Radeon 9000
    Debian GNU/Linux 3.1 (Sarge)

  4. #4
    Registrierter Benutzer Avatar von rais
    Registriert seit
    18.07.2005
    Beiträge
    5.859
    Moin moin,
    Zitat Zitat von nul Beitrag anzeigen
    1) Durch die Farbbox der Zeilennummerierung werden die Zeilen hoeher, das fuehrt dazu, dass der Frame (Rand) um den Code luecken erhaelt.
    dann vllt ein anderer Ansatz: per frameshape links eine Dopellinie definieren, von denen die linke unsichtbar ist ... und per rulesep die Breite der per rulesepcolor definierten Box vorgeben und unter die Zeilennummern schieben, dann entfällt die \colorbox im \thelstnumber. Apropos \thelstnumber: hat Dir
    Code:
    \renewcommand*\thelstnumber{
    	\colorbox{red}{
    		\ifnum\value{lstnumber}<100 \texttt{ }\fi
    		\ifnum\value{lstnumber}<10 \texttt{ }\fi
    		\texttt{\expandafter\arabic{lstnumber}}
    	}
    }
    nicht zusätzliche Abstände (horizontal -- und ich meine nicht die \texttt{ }) eingefügt?
    Zitat Zitat von nul Beitrag anzeigen
    Und, wenn man genau hinschaut, dass zwischen den einzelnen Zeilennummern ein minimaler Weisser Rand zu sehen ist.
    Schau es Dir mal mit unterschiedlichen Vergrösserungen an: wenn diese weißen Linien mit zunehmendem Zoom verschwinden, dann liegt es vermutlich am Betrachter; im Zweifelsfall schau Dir einen Probedruck an.
    Zitat Zitat von nul Beitrag anzeigen
    2) Der minimale Abstand des Caption vom Rand des Quellcodes
    Wo der genau herrührt, hab ich nicht weiter verfolgt, aber dieser Abstand scheint abhängig von der Textgröße (basicstyle) zu sein.

    Versuch mal
    Code:
    \documentclass[ngerman,pdftex]{article}
    \usepackage{babel,blindtext,xcolor}
    \usepackage{listings}
    \usepackage{caption}
    \usepackage[scale=0.81]{geometry}
    \newlength\myx
    \newlength\myxa
    \setlength\myxa{\fboxsep}
    \addtolength\myxa{\fboxrule}
    \setlength\myx{\textwidth}
    \addtolength\myx{-2\fboxsep}
    
    \DeclareCaptionFont{white}{\color{white}\emph}
    \DeclareCaptionFormat{listing}{\colorbox{blue}{\parbox{\myx}{#1#2#3}}\vspace{-1ex}}	
    \captionsetup[lstlisting]{format=listing,labelfont=white,textfont=white}
    
    \lstset{rulesepcolor=\color{red}, label=some-code, caption=Some Code, basicstyle=\scriptsize\ttfamily, numbers=left, numbersep=0.5em, language=[LaTeX]TeX, keywordstyle=\color{blue}, showtabs=false, commentstyle=\color{green}, stringstyle=\color{red}, tabsize=2, extendedchars=true,	xleftmargin=\myxa,	xrightmargin=\myxa,
    %^^zur Darstellung bei Zeilenumbruch
    	framesep=\fboxsep,
    	rulesep=2em,
    	frameshape={yyy}{ny}{y}{yyy},%top/left/right/bottom
    breaklines=true
    }
    
    \begin{document}
    	\blindtext
    	\lstinputlisting{\jobname.tex}%<--``Vorlage'' heisst es bei mir nich
    	\blindtext
    \end{document}
    MfG
    Rainer
    There's nothing a good whack with a hammer won't fix!

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •