Hallo zusammen,
ist es möglich beim Definieren einer eigenen Sprache mittels \lstdefinelanguage verschiedene strings zu unterscheiden und somit unterschiedlich hervorzuheben? Z.B. "Strings mit doppelten Hochkomma" anders als 'Strings in einzelnen Hochkomma'.
Kommentare benötige ich aber seperat.
Viele Grüße und besten Dank!
listings: verschiedene Strings unterscheiden
Hi, dank dir für die schnelle antwort.
Anbei ein funktionierendes Minimalbeispiel das an sich bereits alles tut was es soll. Nun hätte ich es allerdings gerne, dass bei den Strings die " nicht mit eingefärbt werden.
Hat dazu jemand einen Tipp, oder ist das gar nicht so einfach möglich?
listing1.xml
Anbei ein funktionierendes Minimalbeispiel das an sich bereits alles tut was es soll. Nun hätte ich es allerdings gerne, dass bei den Strings die " nicht mit eingefärbt werden.
Hat dazu jemand einen Tipp, oder ist das gar nicht so einfach möglich?
\documentclass{scrreprt} \usepackage[usenames,dvipsnames]{color} \usepackage{listings} \usepackage{color} \definecolor{gray}{rgb}{0.4,0.4,0.4} \definecolor{darkblue}{rgb}{0.0,0.0,0.6} \definecolor{cyan}{rgb}{0.0,0.6,0.6} \lstset{ basicstyle=\ttfamily, columns=fullflexible, showstringspaces=false, commentstyle=\color{gray}\upshape } \lstdefinelanguage{XML} { morecomment=[s][\color{red}]{"}{"}, morestring=[s]{>}{<}, morecomment=[s]{<?}{?>}, stringstyle=\color{black}, identifierstyle=\color{darkblue}, keywordstyle=\color{cyan}, morekeywords={xmlns,version,type,TimeStamp,TempUnit,Interval,IntervalUnit,StartTime,serializeAs} % name } \begin{document} \lstinputlisting[language=XML]{listing1.xml} \end{document}
listing1.xml
<?xml version="1.0" encoding="utf-8"?> <TempLog TempUnit="Celsius" Interval="1" IntervalUnit="Second" StartTime="21.05.11 20:13" EndTime="21.05.11 20:14"> <probe TimeStamp="21.05.11 20:13:40">21</probe> </TempLog>
Gutes Beispiel. Man hätte noch ein paar Zeilen sparen können, wenn man die vordefinierten Farben nimmt. Und warum lädst du color zweimal? Es wird ohnehin empfohlen xcolor stattdessen zu benutzen.
Hier eine mögliche Lösung, in der die farbigen " einfach ersetzt (literate) werden durch schwarze Zeichen.
Außerdem habe ich dein Beispiel mal so geändert, dass das Listing direkt eingebunden ist. Mehr zu filecontents findest du auch im Wiki des Forums …
Tobi
Hier eine mögliche Lösung, in der die farbigen " einfach ersetzt (literate) werden durch schwarze Zeichen.
\begin{filecontents*}{listing1.xml} <?xml version="1.0" encoding="utf-8"?> <TempLog TempUnit="Celsius" Interval="1" IntervalUnit="Second" StartTime="21.05.11 20:13" EndTime="21.05.11 20:14"> <probe TimeStamp="21.05.11 20:13:40">21</probe> </TempLog> \end{filecontents*} \documentclass{scrreprt} \usepackage{listings} \usepackage{xcolor} \lstset{ basicstyle=\ttfamily, columns=fullflexible, showstringspaces=false, commentstyle=\color{gray}\upshape } \lstdefinelanguage{XML} { morecomment=[s][\color{red}]{"}{"}, morestring=[s]{>}{<}, morecomment=[s]{<?}{?>}, stringstyle=\color{black}, identifierstyle=\color{blue}, keywordstyle=\color{green}, morekeywords={xmlns,version,type,TimeStamp,TempUnit,Interval,IntervalUnit,StartTime,serializeAs}, % name literate={"}{\textcolor{black}{"}}{1}, } \begin{document} \lstinputlisting[language=XML]{listing1.xml} \end{document}
Tobi
Das du „in echt“ mit deinen Listings bzw. dem Einbinden selbiger anders umgehst ist klar, die filecontents-Umgebung wollte ich dir nur für Minimalbeispiele zeigen.
Das das Rot dann verschwindet hab’ ich nicht gesehen, sorry. Dann fällt mir nur ein, mit zwei Zeichen zu arbeiten.
Das i in der Definition vom Plus, sorgt dafür, dass es nicht ausgegeben wird.
Das das Rot dann verschwindet hab’ ich nicht gesehen, sorry. Dann fällt mir nur ein, mit zwei Zeichen zu arbeiten.
\documentclass{scrreprt} \usepackage{listings} \usepackage{xcolor} \lstset{ basicstyle=\ttfamily, columns=fullflexible, showstringspaces=false, commentstyle=\color{gray}\upshape } \lstdefinelanguage{XML} { moredelim=*[is][\color{red}]{+}{+}, morestring=[s]{>}{<}, morecomment=[s]{<?}{?>}, stringstyle=\color{black}, identifierstyle=\color{blue}, keywordstyle=\color{green}, morekeywords={xmlns,version,type,TimeStamp,TempUnit,Interval,IntervalUnit,StartTime,serializeAs,"}, % name % literate={"}{+"}{1}, } \begin{document} \begin{lstlisting}[language=XML] <probe TimeStamp="+21.05.11 20:13:40+">21</probe> \end{lstlisting} \end{document}