Einfärben von Wörtern in Listings

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Einfärben von Wörtern in Listings

von danielcramer » Sa 28. Jul 2012, 09:19

Danke für die Hilfe - funktioniert genau so, wie ich es wollte...

Eine abschließende Frage habe ich jedoch noch:

Die ganze Keyword-Geschichte benutze ich zum Einfärben von Wörtern. Ich möchte zum Schluss einen ganzen Quellcode ausgeben: Dabei habe ich das Wörtchen "in" in meinem normalen Style blau eingefärbt (für das Listing ist das auch so gewünscht). Jedoch habe ich ab einer bestimmten Zeile den Wunsch, dass das "in" nun rot dargestellt wird (beachte: immernoch im selben Listing).
Kann ich daher innerhalb eines Listings den Style abändern?
%\lstset{literate={ {in}}{{\color{yellow}\  i\kern.2em n\kern.2em t+}}4 {+}{{\color{black}+ }}1} %
%\lstset{emph={in},emphstyle=\color{yellow}}%
%\lstset{morekeywords={for,var,if,in,else},keywordstyle=\color{ausgabe}}%
Hatte an sowas gedacht (sind 3 verschiedene Varianten) -- aber keins funktioniert so richtig...
P.S.: % ist als escapechar in lstset definiert

von bloodworks » Fr 27. Jul 2012, 10:03

Hi ich habe mal das Bsp etwas vereinfacht:
Zudem die classofset rausgenommen. Der Sinn ist mir hier nicht ganz klar, zumal das Ergebnis das gleiche ist.
\documentclass[11pt,a4paper]{article} 
\usepackage[latin1]{inputenc} 
\usepackage{listings} 
\usepackage{color} 
\definecolor{hellgelb}{rgb}{1,1,0.9} 
\definecolor{colKeys}{RGB}{0,0,255} 
\definecolor{colIdentifier}{rgb}{0,0,0} 
\definecolor{colComments}{rgb}{1,0,0} 
\definecolor{buchstaben}{RGB}{64,64,128} 
\definecolor{colString}{rgb}{0.25,0.25,0.5} 

\lstdefinestyle{OPLStyle}{numbers=left,numberstyle=\tiny,breaklines=true, columns=fixed,basewidth={.6em,.45em},
    morekeywords={Material,Zeit,Lieferant,delta,lambda,gamma,q,z,p,d,s},keywordstyle=\color{buchstaben}, 
    morekeywords={int, string, dvar, sum, forall, in, boolean, minimize, subject to, execute, tuple, float},keywordstyle=\color{blue}, 
    literate={ {int+}}{{\color{blue}\  i\kern.2em n\kern.2em t+}}4 {+}{{\color{black}+}}1
}% restore default} 

\begin{document} 


\begin{lstlisting}[caption={Definition der Parameter},label={parameter_OPL1},style=OPLStyle] 
{string}   Material    = ...; 
{int}      Zeit      = ...; 
{string}   Lieferant     = ...; 
 float z[Material]            = ...; 
 float p[Material][Lieferant]   = ...; 
 float d[Material][Zeit]         = ...; 
 float s[Material]            = ...; 
 dvar int+                 q[Material][Zeit]; 
 dvar boolean      gamma[Material][Zeit]; 
 dvar boolean     lambda[Material][Zeit]; 
 dvar boolean      delta[Material][Lieferant]; 
 ++ int int +
\end{lstlisting} 

\end{document} 
  
  
Kurz zu Erklärung ich habe die literate (ersetzten) Funktion von listings verwendet um genau das int+ Konstrukt herauszufiltern. Im zweiten literate filtere ich dann das + heraus und setzte es schwarz. Das sollte jetzt eigentlich in jeder Situation funktionieren.

eine letzte Frage

von danielcramer » Fr 27. Jul 2012, 09:33

In meinem Codeschnipsel habe ich ein keyword eingetragen (int+) - dieses soll in einer Farbe ausgegeben werden. LaTex nimmt sich dem aber nicht an, d.h. dass er den mathematischen Operator schwarz setzt - dieser soll aber ebenso blau sein, jedoch nur im Zusammenhang mit dem "int".
Weiß jemand was?

Danke

von danielcramer » Fr 27. Jul 2012, 09:18

Frage wurde beantwortet!

Hier nochmal mein Beispiel mit deinen Hinweisen (ggf. für den Rest der Community)
\documentclass[11pt,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage{listings}
\usepackage{color} 
\definecolor{hellgelb}{rgb}{1,1,0.9}
\definecolor{colKeys}{RGB}{0,0,255}
\definecolor{colIdentifier}{rgb}{0,0,0}
\definecolor{colComments}{rgb}{1,0,0}
\definecolor{buchstaben}{RGB}{64,64,128}
\definecolor{colString}{rgb}{0.25,0.25,0.5}

\lstdefinestyle{OPLStyle}{numbers=left,numberstyle=\tiny,breaklines=true,
	classoffset=0,
	morekeywords={},keywordstyle=\color{black},
	classoffset=1,
	morekeywords={Material,Zeit,Lieferant,delta,lambda,gamma,q,z,p,d,s},keywordstyle=\color{buchstaben},
	classoffset=2,
	morekeywords={int, string, dvar, {int+}, sum, forall, in, boolean, minimize, subject to, execute, tuple, float},keywordstyle=\color{blue},
	classoffset=0}% restore default}
	
\lstdefinestyle{SQLStyle}{numbers=left,numberstyle=\tiny,breaklines=true,
	classoffset=0,
	morekeywords={},keywordstyle=\color{black},
	classoffset=1,
	morekeywords={Material,Zeit,delta,lambda,gamma,q,z,p,d,s},keywordstyle=\color{buchstaben},
	classoffset=0
	columns=flexible,
	    tabsize=2,
	    frame=single,
	    extendedchars=true,
	    showspaces=false,
	    showstringspaces=false,
	    numbers=left,
	    numberstyle=\tiny,
	    breaklines=true,
	    backgroundcolor=\color{hellgelb},
	    breakautoindent=true,
	}% restore default}	
	
\begin{document}

\begin{lstlisting} [caption={ein paar Zeilen code}\label{lst:test123},captionpos=t, style=SQLStyle] 
SELECT Count(*) AS Anforderungen, Bestellanforderung.[Lieferant-Name], Sum(Bestellanforderung.Kosten) AS Gesamtkosten, Sum([Bestellanforderung-Inhalte].Anforderungsmenge) AS Gesamtverbrauch
FROM Materialart, [Bestellanforderung-Inhalte], Bestellanforderung
WHERE ((([Bestellanforderung-Inhalte].[Materialart-Materialnummer])=[Materialart].[Materialnummer]) AND ((Bestellanforderung.Bestellanforderungsnummer)=[Bestellanforderung-Inhalte].[Bestellanforderung-Bestellanforderungsnummer]) AND ((Bestellanforderung.Bestellanforderungsposition)=[Bestellanforderung-Inhalte].[Bestellanforderung-Bestellanforderungsposition]))
GROUP BY Bestellanforderung.[Lieferant-Name]
HAVING (((Count(*))>=15) AND ((Sum(Bestellanforderung.Kosten))>=1500) AND ((Sum([Bestellanforderung-Inhalte].Anforderungsmenge))>=10));
 \end{lstlisting}

\begin{lstlisting}[caption={Definition der Parameter},label={parameter_OPL1},style=OPLStyle]
{string}	Material    = ...;
{int}   	Zeit		= ...;
{string}	Lieferant  	= ...;
float z[Material]				= ...;
float p[Material][Lieferant]	= ...;
float d[Material][Zeit]			= ...;
float s[Material]				= ...;
dvar int+        	  	 q[Material][Zeit];
dvar boolean      gamma[Material][Zeit];
dvar boolean     lambda[Material][Zeit];
dvar boolean      delta[Material][Lieferant];
\end{lstlisting}

\end{document}

von bloodworks » Fr 27. Jul 2012, 08:22

Hallo mit
\lstdefinestyle{⟨style name⟩}{⟨key=value list⟩}
kannst du sog. Stile erstellen und lokal aufrufen.

Einfärben von Wörtern in Listings

von danielcramer » Fr 27. Jul 2012, 08:09

Moin Leute,

ich habe folgenden Code
\documentclass[11pt,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage{listings}
\usepackage{color} 
\definecolor{hellgelb}{rgb}{1,1,0.9}
\definecolor{colKeys}{RGB}{0,0,255}
\definecolor{colIdentifier}{rgb}{0,0,0}
\definecolor{colComments}{rgb}{1,0,0}
\definecolor{buchstaben}{RGB}{64,64,128}
\definecolor{colString}{rgb}{0.25,0.25,0.5}

\lstset{
	numbers=left,numberstyle=\tiny,breaklines=true,
	classoffset=0,
	morekeywords={},keywordstyle=\color{black},
	classoffset=1,
	morekeywords={Material,Zeit,Lieferant,delta,lambda,gamma,q,z,p,d,s},keywordstyle=\color{buchstaben},
	classoffset=2,
	morekeywords={int, string, dvar, {int+}, sum, forall, in, boolean, minimize, subject to, execute, tuple, float},keywordstyle=\color{blue},
	classoffset=0}% restore default
	
\begin{document}

\begin{lstlisting} [caption={ein paar Zeilen code}\label{lst:test123},captionpos=t] 
SELECT Count(*) AS Anforderungen, Bestellanforderung.[Lieferant-Name], Sum(Bestellanforderung.Kosten) AS Gesamtkosten, Sum([Bestellanforderung-Inhalte].Anforderungsmenge) AS Gesamtverbrauch
FROM Materialart, [Bestellanforderung-Inhalte], Bestellanforderung
WHERE ((([Bestellanforderung-Inhalte].[Materialart-Materialnummer])=[Materialart].[Materialnummer]) AND ((Bestellanforderung.Bestellanforderungsnummer)=[Bestellanforderung-Inhalte].[Bestellanforderung-Bestellanforderungsnummer]) AND ((Bestellanforderung.Bestellanforderungsposition)=[Bestellanforderung-Inhalte].[Bestellanforderung-Bestellanforderungsposition]))
GROUP BY Bestellanforderung.[Lieferant-Name]
HAVING (((Count(*))>=15) AND ((Sum(Bestellanforderung.Kosten))>=1500) AND ((Sum([Bestellanforderung-Inhalte].Anforderungsmenge))>=10));
 \end{lstlisting}

\begin{lstlisting}[caption={Definition der Parameter},label={parameter_OPL1},firstnumber=5,literate=%
{ü}{{\"u}}1 
{ä}{{\"a}}1 
{ö}{{\"o}}1]
{string}	Material    = ...;
{int}   	Zeit		= ...;
{string}	Lieferant  	= ...;

float z[Material]				= ...;
float p[Material][Lieferant]	= ...;
float d[Material][Zeit]			= ...;
float s[Material]				= ...;

dvar int+        	  	 q[Material][Zeit];
dvar boolean      gamma[Material][Zeit];
dvar boolean     lambda[Material][Zeit];
dvar boolean      delta[Material][Lieferant];
\end{lstlisting}

\end{document}
Ich habe in meiner Arbeit 2 verschiedene Listings sowie vordefinierte Farben für bestimmte Wörter. Ich möchte jedoch, dass die Einfärbungen bei dem 1.Listing nicht vorgenommen werden, sondern nur bei dem 2. (und ggf. folgenden).
(In Listing 1 ist "Lieferant" eingefärbt (dieser soll hier aber schwarz sein) - in Listing 2 ist das so gewollt)

Hat jemand einen Rat?

Nach oben