PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : listings: Formatierung der Zeilennummerierung



nul
03-12-2009, 13:10
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.



-----------------------------------------------
| Listing 1: bla |
-----------------------------------------------
| 1| Quelltext... |
| 2| Quelltext ... |
...
|10| Quelltext... |
-----------------------------------------------


Hoffentlich habt ihr da ne Idee dazu! Ich hab mal folgendes probiert:

\usepackage{xcolor}
\usepackage{listings}
\usepackage{caption}

\DeclareCaptionFont{white}{\color{white}}
\DeclareCaptionFormat{listing}{\colorbox{blue}{\pa rbox{\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\va lue{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?

rais
03-12-2009, 15:00
Moin moin,

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


\DeclareCaptionFormat{listing}{\colorbox{blue}{\pa rbox{\textwidth}{#1#2#3}}}

wird breiter als \textwidth, weil die \colorbox noch einen Rahmen von \fboxsep herum setzt. Vllt ist ja


\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}{\pa rbox{\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

nul
03-12-2009, 17:11
ja, kommt so ungefaehr hin. Hab jetzt das noch minimal angepasst, soweit ich halt gekommen bin!


\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}{\pa rbox{\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!

rais
03-12-2009, 20:13
Moin moin,


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


\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?


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.


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


\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}{\pa rbox{\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