PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Listings: literate und moredelim konkurieren



rwalter
08-05-2009, 12:33
Hallo zusammen,

ich habe folgende Sprachdefinition:



\lstdefinelanguage{Xpand2}{
basicstyle = \color{myBlue}\ttfamily\footnotesize,
stringstyle = \color{myBlue},
keywordstyle = \bfseries\color{myRed},
commentstyle = \color{myGreen}\textit,
morekeywords = {AROUND, this, DEFINE, FOREACH, FOR, AS, SEPARATOR, EXPAND, IMPORT, ENDDEFINE, ENDFOREACH, ENDAROUND, LET, ENDLET, EXTENSION, FILE},

%literate = {<<}{\flqq}2 {>>}{\frqq}2,
moredelim = *[s][\color{black}]{<<}{>>}
}


Ich möchte also als Basis ne blaue Schrift, die Schlüsseworte rot und fett usw...
Alles, was in den doppelten spitzen Klammern (french quotation marks) steht, soll aber schwarz sein. Das funktioniert so, wie es oben definiert ist auch super.
Jetzt möcht ich aber die "normalen" doppelten spitzen Klammern durch die Symbole \flqq und \frqq ersetzen, was durch das "literate" property (momentan auskommentiert) auch super klappt, nur leider werden die Spitzen Klammern dann nicht mehr als delimiter erkannt, sprich die Klammern und alles dazwischen wird nicht mehr schwarz dargestellt. Ich hab auch schon sowas probiert, aber das klappt auch nicht:



literate = {<<}{\flqq}2 {>>}{\frqq}2,
moredelim = *[s][\color{black}]{\flqq}{\frqq}


Da bekomme ich den Fehler: "Improper alphabetic constant" -> \flqq (bzw. \frqq)

Hat das was mit der verwendeten Codierung zu tun (ich benutze \usepackage[T1]{fontenc}, also standard)... oder weiß jemand, wie ich es schaffe, sowohl die Zeichen zu ersetzen als sie auch als delimiter zu nutzen?

Danke,
Bob

cookie170
09-05-2009, 22:00
Hallo und willkommen im Forum,

nachdem eineinhalb Tage niemand auf Dein Posting geantwortet hat, möchte ich Dich bitten, ein lauffähiges Beispiel zu senden. Du scheinst nicht so der typische Anfänger zu sein, dem man den Weg zur Doku (RTFM!!!) weisen muss. Aber zumindest ich kann Deine Codeschnipsel nicht einordnen.

Gruß,
Alexander

rwalter
11-05-2009, 10:50
Hallo,

Du hast natürlich recht. Ich hoffe, ich konnte das Problem auf das minimale reduzieren (siehe Anhang).

Mein Ziel ist es, die Kolorierung des ersten Listings beizubehalten, und die french quotation marks aus dem zweiten Listing einzusetzen. Das Beispiel jetzt nochmal eingebettet:



\documentclass{article}

\usepackage[english]{babel}
\usepackage{listings}
\usepackage{color}

\definecolor{MyKeywordColor}{rgb}{0.5,0,0.3}
\definecolor{MyBaseColor}{rgb}{0,0,1}

% Allgemeine Einstellungen für Listings
\lstset{
framexleftmargin = 1mm,
frame = single,
numbers = left,
numberstyle = \tiny\color{black},
rulecolor = \color{black},
xleftmargin = 5.5mm,
xrightmargin = 2.5mm,
tabsize = 2
}

% Sprachdefinition für Xpand2
\lstdefinelanguage{Xpand2}{
basicstyle = \color{MyBaseColor}\ttfamily\footnotesize,
stringstyle = \color{MyBaseColor},
keywordstyle = \bfseries\color{MyKeywordColor},
commentstyle = \color{JavaComment}\textit,
morekeywords = {AROUND, this, DEFINE, FOREACH, FOR, AS,
SEPARATOR, EXPAND, IMPORT, ENDDEFINE, ENDFOREACH,
ENDAROUND, LET, ENDLET, EXTENSION, FILE},
%literate = {<<}{\flqq}2 {>>}{\frqq}2,
moredelim = *[s][\color{black}]{<<}{>>},
morestring = *[s]{"}{"},
}


\begin{document}
Ein Xpand2 Listing mit gewuenschten Farben aber ohne french quotation marks {\tt \flqq} und {\tt \frqq}:

\lstset{language=Xpand2}

\begin{lstlisting}[caption={Xpand2 Listing (1)}, label=lst:1, captionpos = b]
<< DEFINE logTemplate FOR fancyType >>
log entry : fancy type << this.name >> found ;
<< ENDDEFINE >>
\end{lstlisting}

Dasselbe Listing, jetzt mit den gewuenschten french quotation marks, aber mit falscher Kolorierung:

\lstset{
literate = {<<}{\flqq}2 {>>}{\frqq}2,
deletedelim = *[s][\color{black}]{<<}{>>}
}

\begin{lstlisting}[caption={Xpand2 Listing (2)}, label=lst:2, captionpos = b]
<< DEFINE logTemplate FOR fancyType >>
log entry : fancy type << this.name >> found ;
<< ENDDEFINE >>
\end{lstlisting}
Ich hätte gern die Formatierung von Listing 2 mit der Kolorierung von Listing 1.
Setzt man bei de Properties (literate und moredelim) gibt's einen Fehler beim Übersetzen.
\end{document}

rais
11-05-2009, 21:25
Moin moin,


Mein Ziel ist es, die Kolorierung des ersten Listings beizubehalten, und die french quotation marks aus dem zweiten Listing einzusetzen.
einen direkten Weg kann ich Dir derzeit nicht anbieten, aber mit einem kleinen Umweg vllt ...


\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{listings}
\usepackage{color}

\definecolor{MyKeywordColor}{rgb}{0.5,0,0.3}
\definecolor{MyBaseColor}{rgb}{0,0,1}

% Allgemeine Einstellungen für Listings
\lstset{
framexleftmargin = 1mm,
frame = single,
numbers = left,
numberstyle = \tiny\color{black},
rulecolor = \color{black},
xleftmargin = 5.5mm,
xrightmargin = 2.5mm,
tabsize = 2
}

% Sprachdefinition für Xpand2
\lstdefinelanguage{Xpand2}{
basicstyle = \color{MyBaseColor}\ttfamily\footnotesize,
stringstyle = \color{MyBaseColor},
keywordstyle = \bfseries\color{MyKeywordColor},
commentstyle = \color{JavaComment}\textit,
morekeywords = {AROUND, this, DEFINE, FOREACH, FOR, AS,
SEPARATOR, EXPAND, IMPORT, ENDDEFINE, ENDFOREACH,
ENDAROUND, LET, ENDLET, EXTENSION, FILE},
literate = {<<}{\flqq}2 {>>}{\frqq}2,
moredelim = *[is][\color{black}]{<}{>},
morestring = *[s]{"}{"},
}


\begin{document}
Ein Xpand2 Listing mit gewünschten Farben mit french quotation marks {\ttfamily \flqq} und {\ttfamily \frqq}:

\lstset{language=Xpand2}

\begin{lstlisting}[caption={Xpand2 Listing}, label=lst:foo, captionpos=b]
< << DEFINE logTemplate FOR fancyType >> >
log entry : fancy type << this.name >> found ;
< << ENDDEFINE >> >
\end{lstlisting}
\end{document}

MfG

rwalter
12-05-2009, 07:39
Cool, das klappt! Danke, das ist absolut direkt genug für mich :)