Seite 1 von 1

Einfärbung eines eigenen Codes mit listing

Verfasst: Mo 8. Jul 2013, 16:37
von Lalira
Hallo,

ich habe einen Hänger bei der farblichen Code-Darstellung mit listing.
Vielleicht könnt ihr mir dabei helfen.

Unten ist ein Minimalbeispiel angeführt, das den Code in einem Rahmen darstellt.
Da es sich um ein kleineren Programm handelt, für das hier keine Sprache hinterlegt ist, wollte ich die Einfärbung selber vornehmen. Für die Standard-Anfänge wie bspw. xyz ist dies kein Problem. Bei den Kommentaren komme ich jedoch nicht zurecht.

In dem Programm werden Kommentare mit $ eingeleitet. Ich möchte gerne alles, was auf dieser Zeile hinter dem $ steht, blau einfärben. Das Zeichen selber einzufärben funktioniert ohne Probleme. Wenn ich jedoch die # -Zeichen bzw. die ganzen Wörter der Zeile einfärben will, funktioniert es nicht.

In der Doku konnte ich auch nicht das Richtige finden, bzw. hab es vielleicht überlesen. Könnt ihr mir vielleicht helfen? Wie kann ich die Kommentare komplett einfärben?

Danke vorab für eure Hilfe.

Grüße Lalira


\documentclass[oneside]{scrbook}
 
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[ngerman]{babel}
\usepackage{fancybox} 		
\usepackage{framed}		
\usepackage{color}		 

\usepackage{alltt}		
\usepackage{listings}		
\lstset{numbers=left, numberstyle=\tiny, stepnumber=1, numbersep=5pt,
	classoffset=1, morekeywords={$},keywordstyle=\color{blue},
	classoffset=0, morekeywords={xyz},keywordstyle=\color{red},
	frame=shadowbox, framexleftmargin=5mm, framexrightmargin=5mm, rulesepcolor=\color{white}}		

\begin{document}
	Dies hier ist ein Test zur Ausgabe eines Code-Ausschnittes.
	
\begin{lstlisting}									
$##################  	
$####### Test ######  				
$##################  				  
xyz abc 1200			$Fensterbreite wird definiert 	       
\end{lstlisting}

\end{document}

Verfasst: Di 9. Jul 2013, 09:17
von Epllus
Du hast „morecomment“ übersehen.
\documentclass[oneside]{scrbook} 
  
\usepackage[latin1]{inputenc} 
\usepackage[T1]{fontenc} 
\usepackage{lmodern} 
\usepackage[ngerman]{babel} 
\usepackage{fancybox}       
\usepackage{framed}       
\usepackage{color}       

\usepackage{alltt}       
\usepackage{listings}       
\lstset{numbers=left, numberstyle=\tiny, stepnumber=1, numbersep=5pt, 
   classoffset=1, morekeywords={$},keywordstyle=\color{blue}, 
   classoffset=0, morekeywords={xyz},keywordstyle=\color{red}, 
   frame=shadowbox, framexleftmargin=5mm, framexrightmargin=5mm, rulesepcolor=\color{white},
   ,morecomment=[l][\color{blue}]{$},}
          

\begin{document} 
   Dies hier ist ein Test zur Ausgabe eines Code-Ausschnittes. 
    
\begin{lstlisting}                           
$##################     
$####### Test ######               
$##################                 
xyz abc 1200         $Fensterbreite wird definiert           
\end{lstlisting} 

\end{document} 
 
Hoffe es hilft
Epllus

Verfasst: Di 9. Jul 2013, 10:26
von Lalira
Danke für die schnelle Hilfe. Das hatte ich wirklich übersehen.

Gibt es auch eine Variante bei der ich normale Kommentare mit $ blau einfärbe und in der Verbindung $# grün (bzw. alles ab den #) ? Ich bräuchte sozusagen eine Ausnahmeregel für den Befehl.
Wenn ich beide Varainten eingebe, wird alles nur blau entsprechend dem ersten Befehl von morecomment.
...
\lstset{numbers=left, numberstyle=\tiny, stepnumber=1, numbersep=5pt,
	classoffset=1, morekeywords={$},keywordstyle=\color{blue},
	classoffset=0, morekeywords={xyz},keywordstyle=\color{red},
	frame=shadowbox, framexleftmargin=5mm, framexrightmargin=5mm, rulesepcolor=\color{white},
	morecomment=[l][\color{blue}]{$},
	morecomment=[l][\color{green}]{\#}}
...
Probier ich es, den Befehl aufzuheben, wird es lustig. Mit den folgenden Befehl wird das $ in den Zeilen 1-3 blau und der Zeilenrest wird grün, aber der Kommentar in Zeile 4 $Fensterbreite... bleibt schwarz.
...
\lstset{numbers=left, numberstyle=\tiny, stepnumber=1, numbersep=5pt,
	classoffset=1, morekeywords={$},keywordstyle=\color{blue},
	classoffset=0, morekeywords={xyz},keywordstyle=\color{red},
	frame=shadowbox, framexleftmargin=5mm, framexrightmargin=5mm, rulesepcolor=\color{white},
	morecomment=[l][\color{blue}]{$},
	morecomment=[l][\color{green}]{\#},
	deletecomment=[l]{$}}
...
Kann ich die Kommentare denn unterscheiden? Bzw. dafür sorgen, dass der Befehl
morecomment=[l][\color{green}]{\#}
den anderen überschreibt?


Danke schonmal

Verfasst: Di 9. Jul 2013, 10:31
von Lalira
Danke nochmal,

mein letzter Eintrag kann ignoriert werden. Ich hab das Problem selber gelöst.
Indem ich einfach beide Zeichen kombiniere, funktioniert es. Ich hatte nur vergessen das \ an die entsprechende Stelle zu setzen und kam deswegen nie zur Lösung.

Also mit dem folgenden Code funktioniert es.
\lstset{numbers=left, numberstyle=\tiny, stepnumber=1, numbersep=5pt,
	classoffset=1, morekeywords={$},keywordstyle=\color{blue},
	classoffset=0, morekeywords={xyz},keywordstyle=\color{red},
	frame=shadowbox, framexleftmargin=5mm, framexrightmargin=5mm, rulesepcolor=\color{white},
	morecomment=[l][\color{blue}]{$},
	morecomment=[l][\color{green}]{$\#}}	
[/code]