listings: verschiedene Strings unterscheiden

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: listings: verschiedene Strings unterscheiden

von iTob » Sa 28. Mai 2011, 12:50

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.
\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}
Das i in der Definition vom Plus, sorgt dafür, dass es nicht ausgegeben wird.

von knox » Sa 28. Mai 2011, 12:39

Vielen Dank. Nun Sind die Strings aber wieder blau statt rot. Das mit den XML-Files ist so gewollt, da sie aus anderen Programmen exportiert werden und etwas länger sind als hier angegeben.

von iTob » Sa 28. Mai 2011, 11:52

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.
\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}
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

von knox » Sa 28. Mai 2011, 10:59

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?
\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>

von iTob » Sa 28. Mai 2011, 09:55

Du kannst die Optionen morecomment und moredelim verwenden. Mehr dazu in der Anleitung. Wenn du damit Probleme hast, fertige bitte ein vollständiges Minimalbeispiel mit einer konkreten Fragestellung an,

listings: verschiedene Strings unterscheiden

von knox » Sa 28. Mai 2011, 00:48

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!

Nach oben