PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Keywords in Kommentaren bei listings package



Mic_81
27-08-2008, 14:07
Hallo zusammen!
Ich habe mal wieder ein kleines Problem mit meinen listings. Und zwar werden die Keywords auch innerhalb eines Kommentares hervorgehoben. Das sieht leider ziemlich doof aus. :( Hier mal meine listings-Einstellungen:


...
\usepackage{color,listings}
...

\lstdefinestyle{java}{language=Java,
basicstyle=\scriptsize\rmfamily,
keywordstyle=\color{javaLila}\bfseries,
commentstyle=\color{javaGreen},
stringstyle=\color{javaBlue},
numbers=left,
numberstyle=\tiny,
stepnumber=1,
showstringspaces=false,
captionpos=b,
breaklines=true,
morecomment=*[s][\color{javaDocBlue}]{/**}{*/},
tabsize=2,
emph={@author, @deprecated, @param, @return, @see, @since, @throws, @version, @serial, @serialField, @serialData, @link},
emphstyle=\color{javaDocTags}\bfseries,
extendedchars=true,
frame=trbl
}

...

\definecolor{javaBlue}{RGB}{42,0.0,255}
\definecolor{javaGreen}{RGB}{63,127,95}
\definecolor{javaLila}{RGB}{127,0,85}
\definecolor{javaDocBlue}{RGB}{63,95,191}
\definecolor{javaDocTags}{RGB}{127,159,191}


Jedesmal wenn ich "for" oder "if" in einem Kommentar verwende, werden die Wörter in "javaLila" hervorgehoben. :confused:
Ich hoffe jemand kennt eine Lösung! hier noch ein Beispiel Java-Code und der Befehl zum Einfügen des listings:



package singleton;

public class SingletonA {
/**
* Design pattern Singleton
* Implementation example 1
* More comment text: for, if and so on
* @author XY
*/
private static SingletonA singleInstance = null;

private SingletonA() {} //Private Constructor

public synchronized static SingletonA getSingleInstance() {
if (singleInstance == null) {
singleInstance = new SingletonA();
}
return singleInstance;
}
}




\lstinputlisting[caption={SingletonA.java}, label=SingleA, style=java]{JavaClasses/Singleton/SingletonA.java}


Viele Grüße
Mic

P.S.: habe soeben herausgefunden, dass mein Problem nur in den definierten "morecomment" auftritt...siehe angehängten screenshot...

--> !!!!!!! Minimalbesipiel befindet sich 3 posts weiter unten !!!!!!!

Stefan_K
27-08-2008, 14:35
Hallo Mic,

bei mir passiert das nicht, auch wenn Deinen Code verwende, die Ursache liegt evtl. nicht in diesem Ausschnitt. Poste besser ein compilierbares Minimalbeispiel (http://minimalbeispiel.de/mini.html), welches das Problem aufweist.

Viele Grüße,

Stefan

Mic_81
27-08-2008, 14:41
Hi Stefan,

habe meinen Beitrag gerade geändert bzw. erweitert! Mir fiel auf, dass nur innerhalb eines JavaDoc-Kommentares, welchen ich mit morecoment definiert habe, das Problem der hervorgehobenen Keywords auftritt!

Mic_81
27-08-2008, 17:40
\documentclass[a4paper,11pt]{scrreprt}
\usepackage[T1]{fontenc} %Modernerer Zeichensatz
\pagestyle{headings}
\usepackage[ansinew]{inputenc} %Windows-Kodierung
\usepackage[english]{babel} %Trennmuster
\usepackage{color} %Für farbigen Text
\usepackage{color,listings} %Einbinden von Quellcode
%--------------------------------------------------------------------------
%Einstellungen der Listings festlegen

\lstdefinestyle{java}{language=Java,
basicstyle=\scriptsize\rmfamily, %\rmfamily ttfamily
keywordstyle=\color{javaLila}\bfseries,
commentstyle=\color{javaGreen},
stringstyle=\color{javaBlue},
numbers=left,
numberstyle=\tiny,
stepnumber=1,
showstringspaces=false,
captionpos=b,
breaklines=true,
morecomment=*[s][\color{javaDocBlue}]{/**}{*/},
tabsize=2,
emph={@author, @deprecated, @param, @return, @see, @since, @throws, @version, @serial, @serialField, @serialData, @link},
emphstyle=\color{javaDocTags}\bfseries,
extendedchars=true,
frame=trbl
}
% Definieren neuer Farben für den Java-Quelltext
\definecolor{javaBlue}{RGB}{42,0.0,255}
\definecolor{javaGreen}{RGB}{63,127,95}
\definecolor{javaLila}{RGB}{127,0,85}
\definecolor{javaDocBlue}{RGB}{63,95,191}
\definecolor{javaDocTags}{RGB}{127,159,191}

\begin{document}
\chapter{Test}

\lstset{language=java}
\begin{lstlisting}[style=java]
package singleton;

public class SingletonA {
/**
* Design pattern Singleton
* Implementation example 1
* More comment text: for, if and so on...here is the mistake
* @author XY
*/
private static SingletonA singleInstance = null;

private SingletonA() {} //Private Constructor if for and so on...here it works!

public synchronized static SingletonA getSingleInstance() {
if (singleInstance == null) {
singleInstance = new SingletonA();
}
return singleInstance;
}
}

\end{lstlisting}



\end{document}

Stefan_K
27-08-2008, 18:02
Hallo Mic,

wenn du den ersten * in

morecomment=*[s][\color{javaDocBlue}]{/**}{*/},
entfernst, funktioniert es wie beabsichtigt, am Minimalbeispiel getestet.
In der Listings-Doku kannst Du das genauer bei Delimiters nachlesen.

Viele Grüße,

Stefan

Mic_81
27-08-2008, 18:08
Hallo Stefan,

vielen Dank! Allerdings werden dann die JavaDoc spezifischen Tags wie "@author" etc. nicht in der Farbe "javaDocTags" angezeigt, sondern in der "javaDocBlue" Farbe! Hast du auch hierfür eine Lösung parat?

Stefan_K
27-08-2008, 19:00
Höchstens eine unpraktische Notlösung: mit mathescape=true und

* $\color{javaDocTags}\mbox{@author}$ XY
listings handhabt die Stile kumulativ oder nicht, aber da noch zwischen emph und keywordstyle zu unterscheiden... vielleicht gibts ja noch von jemandem eine Idee.

Stefan

Mic_81
27-08-2008, 21:44
Hm...leider ist diese Lösung für mich unpraktikabel, da ich alle meine listings nicht wie im Minimalbeispiel einfüge, sondern wie in meinem ersten post beschrieben, direkt aus der entsprechenden Datei (\lstinputlisting).
Wäre halt das Sahnetüpfelchen, wenn auch die JavaDocTags "richtig" eingefärbt wären...

edico
28-08-2008, 14:59
... und so geht's bei mir - oder was habe ich übersehen (nicht verstanden):



\documentclass[paper=a5,landscape,pagesize,10pt,german]{scrreprt}
%\set \tracingparagraphs=1
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{xcolor}
% Definieren neuer Farben für den Java-Quelltext
\definecolor{javaBlue}{RGB}{42,0.0,255}
\definecolor{javaGreen}{RGB}{63,127,95}
\definecolor{javaLila}{RGB}{127,0,85}
\definecolor{javaDocBlue}{RGB}{63,95,191}
\definecolor{javaDocTags}{RGB}{127,159,191}

\usepackage{listings}
\lstset{%
basicstyle=\scriptsize\rmfamily, %\rmfamily ttfamily
keywordstyle=\color{javaLila}\bfseries,
commentstyle=\color{javaGreen},
stringstyle=\color{javaBlue},
numbers=left,
numberstyle=\tiny,
stepnumber=1,
showstringspaces=false,
captionpos=b,
breaklines=true,
morecomment=*[s][\color{javaDocBlue}]{/**}{*/},
tabsize=2,
emph={@author, @deprecated, @param, @return, @see, @since, @throws, @version, @serial, @serialField, @serialData, @link},
emphstyle=\color{javaDocTags}\bfseries,
extendedchars=true,
frame=trbl
}


\begin{document}
\chapter{Test}

%\lstset{language=java}
%\begin{lstlisting}
% oder so:
\begin{lstlisting}[language=java]
package singleton;

public class SingletonA {
/**
* Design pattern Singleton
* Implementation example 1
* More comment text: for, if and so on...here is the mistake
* @author XY
*/
private static SingletonA singleInstance = null;

private SingletonA() {} //Private Constructor if for and so on...here it works!

public synchronized static SingletonA getSingleInstance() {
if (singleInstance == null) {
singleInstance = new SingletonA();
}
return singleInstance;
}
}
\end{lstlisting}

\end{document}


edico

Stefan_K
28-08-2008, 15:23
Hi edico,

emph wirkt nicht, @author sollte mit Farbe javaDocTags und fett ausgegeben werden.

Stefan

edico
28-08-2008, 15:41
Hej Stefan,



emph wirkt nicht, @author sollte mit Farbe javaDocTags und fett ausgegeben werden.

mit Frabe wird's doch, aber da der OP anfänglich (#1) bemängelte:


die Keywords auch innerhalb eines Kommentares hervorgehoben. Das sieht leider ziemlich doof aus.

sollte es doch hiermit stimmen.

Naja - ich steh' momentan eh nur daneben ;-)

edico

Stefan_K
28-08-2008, 15:53
sollte es doch hiermit stimmen.

Ja, #1 passt schon! Mal schauen, was Mic dazu sagt.

Stefan

Mic_81
28-08-2008, 19:37
Hallo Leute,

echt toll, dass ihr euch so bemüht! hab heute auch noch mal die Doku zum listings-package durchgelesen...leider ohne Erfolg! :(
Und wenn ich das Beispiel von edico verwende, dann sind die JavaDocs alle grün...Möchte sie aber gerne blau haben und eben die Tags wie "@author" in nem helleren blau und fett...das muss doch irgendwie gehen!?!? :confused:

edico
29-08-2008, 00:38
... möchte sie aber gerne blau haben und eben die Tags wie "@author" in nem helleren blau und fett ...

Du hast aber

commentstyle=\color{javaGreen},
definiert. Auch keyword oder extrakeyword im comment ist immer noch comment.

Was soll listings also machen?

edico

P.S. Versuch otherkeywords={@author},

Mic_81
29-08-2008, 12:50
Hallo edico,

commentstyle=\color{javaGreen},
habe ich deshalb, um die zwei Kommentar-Varianten, die es in Java gibt, in der Frabe grün abzudecken. Also "//" und die Variante "/* ... */" sollen grün sein!
Aber die JavaDocs hätte ich gern blau! Alles mit "/** /*" soll blau sein und sämtliche JavaDocTags (wie z.B. @author, @param usw.) sollen fett und hellblau dargestellt werden. Also so wie du es in meinem angehängten screenshot von post #1 sehen kannst! Leider habe ich eben das Problem, das Keywords innerhalb meines JavaDocs im Keywordstyle angezeigt werden und nicht wie es im Kommentar üblich ist, in blau/grün.

Mic_81
01-09-2008, 13:29
Hi Leute,

ich hab es immer noch nicht geschafft, das Listing so anzupassen, dass die Keywords nicht in meinen definierten "morecomments" im Keywordstyle hervorgehoben werden. :confused:
Gibt es da denn wirklich keine Lösung???

Stefan_K
01-09-2008, 19:53
Wenn Du statt emph otherkeywords nutzt: otherkeywords={@author, @deprecated, ...} und morecomment ohne *, werden keywords in den Kommentaren nicht hervorgehoben, die in otherkeywords deklarierten tags jedoch schon. Sie haben dann jedoch die keyword-Farbe.

Stefan

Mic_81
02-09-2008, 10:03
Hallo Stefan,

danke dass du dir über meine Sorgen noch Gedanken machst! :)
Leider ist diese Variante auch nicht das Wahre. Hab auch gestern nochmals mit morecomment rumexperimentiert...dachte es wäre möglich einfach alles mit @ als weiteren Kommentar zu definieren und da eben meine hellblaue Farbe zu definieren, aber irgendwie ging das nicht. Echt doof! :(