Anzeige:
Ergebnis 1 bis 5 von 5

Thema: Listings: literate und moredelim konkurieren

  1. #1
    Registrierter Benutzer
    Registriert seit
    07.05.2009
    Beiträge
    6

    Listings: literate und moredelim konkurieren

    Hallo zusammen,

    ich habe folgende Sprachdefinition:

    Code:
    \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:

    Code:
    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

  2. #2
    Registrierter Benutzer
    Registriert seit
    28.06.2005
    Ort
    Karlsruhe
    Beiträge
    1.407
    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

  3. #3
    Registrierter Benutzer
    Registriert seit
    07.05.2009
    Beiträge
    6

    lauffähiges Beispiel

    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:

    Code:
    \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}

  4. #4
    Registrierter Benutzer Avatar von rais
    Registriert seit
    18.07.2005
    Beiträge
    5.862
    Moin moin,
    Zitat Zitat von rwalter Beitrag anzeigen
    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 ...
    Code:
    \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
    Rainer
    There's nothing a good whack with a hammer won't fix!

  5. #5
    Registrierter Benutzer
    Registriert seit
    07.05.2009
    Beiträge
    6

    Das klappt!

    Cool, das klappt! Danke, das ist absolut direkt genug für mich

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •