PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Abstand zwischen Zeilennummern und Code in Listing



missi
04-09-2011, 19:26
Hallo,

ich will ein bisschen Code in meinem Dokument vorstellen und habe mittels dem lstlisting Paket die Zeilennummerierung aktiviert. Ich will aber, dass mein Code nicht direkt nach der Zeilennummer beginnt, sondern vllt. etwas Abstand ist, also dass der Inhalt des Listings etwas weiter rechts beginnt. Mit \numbersep wird die Zeilennummer zwar verschoben, jedoch weiter nach außen, was nicht schön aussieht. Kennt jemand dazu einen Befehl?

Hier ein Beispiel (welches komischerweise nicht kompilierbar ist. sieht jemand den fehler?


\documentclass[10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{listings}

\begin{document}
\lstdefinestyle{code}{language=Python, numbers=left, numberstyle=\tiny, numbersep=0pt, basicstyle=\ttfamily, keywordstyle=\color{black}\bfseries, commentstyle=\color{black}, stringstyle=\ttfamily, showstringspaces=false}

\lstset{style=code, caption=\small{{Constructor of the random channel assignment algorithm.}}, captionpos=b, nolol=true, label=constructor, breaklines=true, firstline=10, lastline=15}
\begin{lstlisting}
def main():
if a > b:
a = 2*a
else:
a = a * a
\end{lstlisting}
\end{document}

localghost
04-09-2011, 20:18
Lass die Farben weg oder binde xcolor (http://ctan.org/pkg/xcolor) ein. Dir ist aber schon klar, dass Du explizit numbersep=0pt setzt? Lasse das einfach weg und sieh, was passiert.


Thorsten

missi
04-09-2011, 20:26
Ich weiß, dass ich 0pt geschrieben hab. Dabei sieht es trotzdem nicht so toll aus. Ich benutze ein Dokument aus zwei Spalten und selbst mit 0pt sind die Nummern nicht mit in der Spalte. Außerdem ist dann der Abstand zwischen einer Nummer und einer Codezeile zu gering, das sieht nicht nur unleserlich aus, sondern auch hässlich.

Auf dem folgenden Bild kann man das nochmal sehen: http://imageshack.us/photo/my-images/171/bildschirmfoto1ph.png/

Anmerkung: Farben nutze ich eh nicht, ist ein Zurückbleibsel aus einer Vorlage.

rstuby
05-09-2011, 06:45
Also das Minimalbeispiel sieht OK aus, wenn man numbersep=0pt weglässt. Dann ist der Abstand richtig.
Für dein Spaltenproblem musst du wohl ein neues Beispiel machen, so lässt sich das nicht nachvollziehen.

rais
05-09-2011, 07:54
Moin moin,


ich will ein bisschen Code in meinem Dokument vorstellen und habe mittels dem lstlisting Paket die Zeilennummerierung aktiviert. Ich will aber, dass mein Code nicht direkt nach der Zeilennummer beginnt, sondern vllt. etwas Abstand ist, also dass der Inhalt des Listings etwas weiter rechts beginnt. Mit \numbersep wird die Zeilennummer zwar verschoben, jedoch weiter nach außen, was nicht schön aussieht. Kennt jemand dazu einen Befehl?

was Du suchst, ist xleftmargin:


\documentclass[10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{listings,showframe}
\newlength\myxleftmargin
\newlength\mynumbersep
\setlength\mynumbersep{10pt}%<--Abstand Zeilennummer-Code
\settowidth\myxleftmargin{\tiny 88}%<--breiteste Zeilennummer
\addtolength\myxleftmargin{\mynumbersep}
\lstdefinestyle{code}{language=Python, numbers=left, numberstyle=\tiny,
numbersep=\mynumbersep,
xleftmargin=\myxleftmargin,
basicstyle=\ttfamily, keywordstyle=\bfseries, stringstyle=\ttfamily, showstringspaces=false}
\lstset{style=code, captionpos=b, nolol=true, breaklines=true}%, firstline=10, lastline=15<--?

\begin{document}
\begin{lstlisting}[caption={Constructor of the random channel assignment algorithm.}, label=constructor, firstnumber=8]
def main():
if a > b:
a = 2*a
else:
a = a * a
\end{lstlisting}
\noindent foo
\end{document}

BTW: \small ist ein Schalter und erwartet keinen Parameter, also wenn überhaupt, dann {\small ...} statt \small{...}.

BTW2: Was soll Dein firstline im \lstset bewirken?
BTW2a: Du kannst diesen firstline ja mal in das optionale Argument zu lstlisting verschieben ...
BTW2b: ...und wenn das Listing dann leer bleibt, verkleinere firstline z.B. auf 4.

MfG