PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Variablen in listings hervorheben



peethebee
11-07-2009, 09:38
Hallo,

Ich will ein bisschen mit Listings (lstlistings) zaubern.
Meine Träume:

1. Variablen highlighten: beginnen mit einem Zeichen (z.B. $) und enden an jedem nicht alphanumerischen Zeichen. Mein Versuch:
moredelim=*[s][\color{red}\bfseries]{\$}{\$}
Aber wie kodiere ich Whitespaces (insb. Zeilenumbruch)? Leerzeichen kann ich nicht einfach reinschreiben :(.

2. Funktionen highlighten. Ich hätte praktisch gerne eine zweite Liste wie die der Keywords, um Funktionen beispielsweise fett zu machen.


Minimalbeispiel:

\documentclass[11pt]{scrbook}
\usepackage[ansinew]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{xcolor}

\usepackage{listings}

\lstdefinelanguage{MyLang}
{morekeywords={Test, Var},
morecomment=[l]{\#},
morestring=[b]{"},
moredelim=*[s][\color{red}\bfseries]{\$}{\$},
% Style
backgroundcolor=\color{gray!45!white},
basicstyle=\ttfamily\color{black},
stringstyle=\ttfamily\color{gray!80!black},
keywordstyle=\bfseries\ttfamily\color{blue},
commentstyle=\color{green!60!black}}

\lstloadlanguages{MyLang}
\lstset{language=MyLang}

\begin{document}
\begin{lstlisting}
Var $string = (String)"initial"
Message("Frucht 3", $variable[2]) # Kommentar
~ Zeilenkommentar
\end{lstlisting}

Etwas mehr Text mit \lstinline!Test! als Schlüsselwort.
\end{document}

Bin für alle Ideen offen :),
peethebee

mechanicus
11-07-2009, 11:34
Hallo,

1.: Hilft dir vielleicht das:
\begin{lstlisting}[showspaces=true,showtabs=true,]

2.: Hier könntest du eine Liste in emph erstellen und mittels emphstyle das Format festlegen. Die Dokumentation von Listings auf Seite 17 bietet mehr Beispiele.

Gruß
Marco

peethebee
11-07-2009, 11:51
Hi mechanicus,

Vielen Dank, 2. ist schon mal ein perfekter Tipp :). Das dürfte das Problem lösen (und sogar mehr als einmal möglich laut Doku :)).

Geht da vllt. auch etwas in der Art "$*"? Dann wäre das auch hilfreich für 1.
(kann gerade nicht testen).

Danke auf jeden Fall schon mal, aber 1. bleibt erstmal offen für Vorschläge ;).

peethebee

peethebee
11-07-2009, 16:51
Hi,

Noch mal zur Verdeutlichung Problem 1.

moredelim=*[s][\color{red}\bfseries]{\$}{\$},

Wäre genau das, was ich brauche, WENN ich in der letzten Klammer sagen könnte: Non-Alphanumeric Character.

peethebee