Zeilennummern bei Listingumgebung

Schriftbild, Absätze und Auflistungen einstellen


Nybass

Zeilennummern bei Listingumgebung

Beitrag von Nybass »

Hallo Zusammen,

aktuell ist es so, dass der rahmen (fast) mit der Textbreite abschließt (leider stimmt auch das nicht ganz). Wenn ich nun Zeilennummern aktiviere, werde die einfach links an den Rand gehängt und somit hat verkürzt sich der Blattrand....
Kann man das ändern?
Ich schreibe an meiner DA und es soll eben alles stimmen....

folgend hab ich mein paket initialisiert:
%******************************
%* Umgebung fuer Programmcode *
%******************************
\lstloadlanguages{[ANSI]C}
\lstnewenvironment{CCode}[1][]
{ \microtypesetup{activate=false}         % für Captions im Programmcode
  \renewcommand*{\lstlistingname}{Code}%  
	\lstset{
%	basewidth={0.5em,0.45em},
	language=[ANSI]C,
  basicstyle=\ttfamily,												% generell Schreibmaschinenschrift
  basicstyle=\scriptsize,
%  basicstyle=\tiny, 							            % Schriftgröße small
  keywordstyle=\color{keyword},						         % Schlüsselwörter blau
  morekeywords={SMA_U8, SMA_U16, SMA_U32,SMA_S8,SMA_S16,SMA_S32,SMA_F32,SMA_F64,SMA_F128},							% eigene Schlüsselwörter
  commentstyle=\color{darkgreen},							% Kommentar grün
  stringstyle=\color{string},
  backgroundcolor=\color{bgcolor},					% Hintergrundfarbe
  showstringspaces=false,                     % In Strings keine Backspace zeichen
%  morecomment=[s][\color{darkgreen}]{/*}{*/},
%  breaklines=true,														% macht Umbrüche, wenn z.B Comment nicht in Zeile passt
%  showtabs=true,															% Tabulatorenausgabe
%  tab=\rightarrowfill,								       	% Pfeil nach rechts zeigt Tabulator
	captionpos=b,                             %Beschriftungsposition
  frame=single,													    % shadowbox, leftline, lines, topline, t, r, b, l
%  frame=leftline,	
%  framerule=1pt,	
  numbers = left,														% links Zeilennummern
%  firstnumber = 1,														% beginne mit Zeilenummer X
%  stepnumber = 1,													  % nur jede X Zeile eine Nummer
	#1}
}
{}
Vielen Dank und Gruß,
Timo

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

... 3 ...

Beitrag von KOMA »

Da Du an Stelle eines vollständigen Minimalbeispiels (← das ist ein geprüfter Links!) nur einen Codeschnippsel angegeben hast und ich bei der Vervollständigung nach der vierten Fehlermeldung keine Lust mehr zum weiteren Ausprobieren hatte, kann ich nur rate: Probier mal die Optionen xleftmargin und xrightmargin.

Nybass

Beitrag von Nybass »

Ja sorry, war etwas in eile...
hier ein vollst minimalbeispiel, da sieht man auch eher die problematik, dass eben mit zeilennummer die textbreite überschritten wird...

frag mich auch, ob das bei einer wissenschaftlichen arbeit so extrem wichtig ist, dass die zeilennummern eben nicht "abstehen"...

wär aber sicherlich schöner, wenn man es einfach korrigieren kann...

danke
\documentclass[12pt,a4paper,BCOR10mm,oneside,parskip
]{scrartcl}%     % Klassen: scrartcl, scrreprt, scrbook

\usepackage[ngerman]{babel}                     % Deutsche Sprachanpassungen            
\usepackage[T1]{fontenc}                        % Codierung nach T1-Norm
\usepackage{lmodern}                              % Schriftfamilie: latin modern
                                                           
\usepackage{scrpage2}                   % u.a. wg. Kopf- und Fusszeilen  

\usepackage{color}											% für \definecolor           
\usepackage{listings}										% für Programmcodeumgebung    
\usepackage{microtype} 									% Captions im Programmcode
       
\definecolor{bgcolor}{rgb}{0.8,0.8,0.8}  
\definecolor{string}{rgb}{1,0,0}

%******************************
%* Umgebung fuer Programmcode *
%******************************
\lstloadlanguages{[ANSI]C}
\lstnewenvironment{CCode}[1][]
{ \microtypesetup{activate=false}         % für Captions im Programmcode
	\lstset{
%	basewidth={0.5em,0.45em},
	language=[ANSI]C,
  basicstyle=\ttfamily,												% generell Schreibmaschinenschrift
  basicstyle=\scriptsize,
  stringstyle=\color{string},
  backgroundcolor=\color{bgcolor},					% Hintergrundfarbe
  showstringspaces=false,                     % In Strings keine Backspace zeichen breaklines=true,								
	captionpos=b,                             %Beschriftungsposition
frame=single,													    % shadowbox, leftline, lines, topline, t, r, b, l
%  frame=leftline,	
%  framerule=1pt,	
  numbers = left,														% links Zeilennummern
%  firstnumber = 1,														% beginne mit Zeilenummer X
%  stepnumber = 1,													  % nur jede X Zeile eine Nummer
	#1}
}
{}

\begin{document}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper 
\begin{CCode}
int i;
 
 i=5;
\end{CCode}

\end{document}
 

matze

KOMA,sag was!

Beitrag von matze »

...
Zuletzt geändert von matze am Mo 19. Sep 2011, 01:26, insgesamt 1-mal geändert.

Nybass

Beitrag von Nybass »

Also der Prof hat keine Anforderung und ich fand es bisher nicht schlimm...
habe es 2 kollegen zum korrektur lesen gegeben und die haben beide gemeint, dass es nix ist, wenn die zeilennummern "vor" dem text stehen.

das hat mich unsicher gemacht deswegen auch noch die allgemeine frage in den raum geworfen ob ich den "fehler" überhaupt korrigieren soll, oder einfach so abgeben...

Gruß
Timo

matze

Beitrag von matze »

...
Zuletzt geändert von matze am Mo 19. Sep 2011, 01:25, insgesamt 1-mal geändert.

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

... 1 ...

Beitrag von KOMA »

Nybass hat geschrieben:frag mich auch, ob das bei einer wissenschaftlichen arbeit so extrem wichtig ist, dass die zeilennummern eben nicht "abstehen"...

wär aber sicherlich schöner, wenn man es einfach korrigieren kann...
Und warum verwendest Du dann nicht das von mir erwähnte xleftmargin (siehe listings-Anleitung)?
matze hat geschrieben:Selbstverständlich müssen die Zeilennummern vor dem Text stehen, sie sind eine Hilfe zur Kontrolle und Strukturierung des Textes (eigentlich der Druckfahne) für den Setzer vor(!) dem Druck. Beim Ausdruck sollen sie keinesfalls erscheinen!

KOMA weiss da typografisch bestimmt besser Bescheid, vielleicht sagt er was dazu.
Der Setzer ist sicher der letzte, der die Zeilennummern benötigt. Wenn, dann braucht die der Autor, um sich in seinen Listings zu orientieren. In dem Fall können sie am Ende wirklich weg. Das macht dann der Setzer aber nur, wenn er eine explizite Anweisung dazu bekommt. Oder der Autor braucht sie, um im Text oder im Listing selbst bestimmte Zeilen zu referenzieren. In dem Fall braucht sie auch der Leser und sie bleiben im Druck.

Persönlich bin ich kein Fan davon. Das liegt vermutlich daran, dass ich das Programmieren noch zu einer Zeit gelernt habe, als man noch Programmiersprachen verwendet hat, bei denen man Zeilennummern mit eingetippt hat. Deshalb gehören für mich normalerweise in Listings von Programmiersprachen, die keine Zeilennummern benötigen, auch keine Zeilennummern. Aber das ist eine ganz persönliche Meinung und hat nichts mit Typografie oder gutem und schlechtem Stil zu tun. Es kann - insbesondere in Lehrbüchern - auch gute Gründe für Zeilennummern geben.

Nybass

Beitrag von Nybass »

ok wegen xleftmargin werde ich mal nachschlagen...(hat auf die schnelle gestern nicht geklappt)

wieso ich es nicht einfach entferne...
weil manche codeauszüge relativ lang sind und im text dann steht "In der Zeile 14" oder "(siehe Zeile 35-40)"

Gruß Timo

Nybass

Beitrag von Nybass »

ok, habe es nun einfach eingerückt mit
xleftmargin=.04\textwidth,
kann man echt so lassen...

Danke für die Hilfe

Gast

Beitrag von Gast »

Hallo,

der Thread ist zwar schon was älter, aber er trifft auf mein Vorhaben zu.

Ich habe den Code umgeformt:
\documentclass[a4paper]{scrreprt}							%DIN-A4-Format
%\documentclass{scrbook} 
\usepackage[T1]{fontenc}
\usepackage{amsmath}					%erweiterter Mathematischer Formelsatz 
\usepackage{amssymb}					%erweiterter Mathematischer Formelsatz 
\usepackage[latin9]{inputenc}	%Eingabe von ü,ä,ö,ß erlauben deutscher Zeichensatz
\usepackage[ngerman]{babel}		%neue deutsche Trennungen, Überschriften, usw.
\usepackage{graphicx}					%Einbindung von Grafikdateien 
%\usepackage[dvips]{graphicx}
%\usepackage{siunitx}
\usepackage{setspace}					%wird für setstrech benötigt
\usepackage{textcomp}					%für Buchstaben wie µ
%\usepackage{tocbibind}				%automatisches Erstellten v. Verzeichnisse für Abbildungen,...
\usepackage{pdfpages}					%wenn LaTex => PS => PDF dieses Package ausblenden
\usepackage{geometry}
\usepackage{helvet}						%Schriftart Arial
\usepackage{multirow}					%Tabellen
\usepackage{float}						%Grafiken fixieren
\usepackage{tabularx,longtable,ltxtable}%Tabellen
\usepackage{booktabs}
\usepackage{remreset}					%zwecks durchlaufender Numerierung von Fußnoten und Formeln
%\usepackage{hypdvips}					%ermöglicht das kompelieren von LaTex ==> PS ==> PDF
%\usepackage{epstopdf}					%konvertiert eps zu pdf 

\makeatletter
\@removefromreset{footnote}{chapter}	%zwecks durchlaufender Numerierung von Fußnoten
\@removefromreset{equation}{chapter}	%zwecks durchlaufender Numerierung von Formeln
\makeatother


\usepackage{color}						%\definecolor
\usepackage{listings}					%Programmcodeumgebung
\usepackage{microtype}				%Captions im Programmcode

\definecolor{bgcolor}{rgb}{0,0,0}
\definecolor{string}{rgb}{1,0,0}
\lstloadlanguages{Matlab}
\lstnewenvironment{MatlabCode}[1][]
{\microtypesetup{activate=false}		%Captions im Programmcode
\lstset{
	language= Matlab,
	basicstyle=\ttfamily,							%generell Schreibmaschinenschrift
	basicstyle=\scriptsize,
	stringstyle=\color{string},
	backgroundcolor=\color{white},		%Hintergrundfarbe
	showstringspaces=false,						%In Strings keine Backspace zeichen breaklines=true,
	captionpos=b,											%Beschriftungsposition
	frame=single,											%shadowbox, leftline, lines, topline, t, r, b, l
	numbers	=	left,										%links Zeilennummern
	xleftmargin=.04\textwidth,
	#1}
}
{}

\begin{document}
Der Matlabcode lautet:
\begin{MatlabCode}
 for j = 1:lx(y)
 for i = 1:y(t)
  if x   == 1                                                                         %if all is ok
   ai)             = 0;                                     
  elseif x(i) == 0  & i>1
   a(i)            = a(i-1); 
  else
   a(i)            = asind(h(i) / _x(i));                                         % [°] angle 
  end
 
  end
end
\end{MatlabCode}

\end{document} 
Was mich nun stört (evtl. hat jemand noch ne andere Idee) ist, dass die Schrift nicht die von Matlab ist, die Farben von Matlabausdrücken wie if nicht blau ist sondern fett ist. Kommentare, die mit % beginnen nicht erkeannt werden und dann kursiv anstelle von grün sind. Und ich es nicht hinbekomme die Nummerrierung nur dann anzuzeigen wenn dort Code steht und der Bindestrich fehlt.

Wichtig sind natürlich die Einrückungen bei den Leerzeilen, das geht garnicht...

Wie bekomme ich denn den Rahmen weg und die besche Hintergrundfarbe hin?

Grüße

Antworten