Anzeige:
Ergebnis 1 bis 3 von 3

Thema: Listings, Eigene Sprachdefinition: # bei Direktiven wird nicht erkannt

  1. #1
    Registrierter Benutzer
    Registriert seit
    08.06.2009
    Beiträge
    3

    Listings, Eigene Sprachdefinition: # bei Direktiven wird nicht erkannt

    Hallo,

    ich habe in meiner Bachelorarbeit relativ viele Listings mit einer Firmeneigenen Programmiersprache und ich bekomme deren Formatierung nicht richtig hin.

    Das Problem liegt bei den Compilerdirektiven. Wie in C haben diese hier ein # vor dem Namen. Leider erkennt das Paket dieses nicht und es wird nicht eingefärbt.
    Hier dazu ein Minibeispiel:
    Code:
    \documentclass[12pt,a4paper]{scrbook}
    \usepackage[utf8]{inputenc}
    \usepackage[ngerman]{babel}
    \usepackage{caption} %
    \usepackage{colortbl} %
    \usepackage{listings}
    
    \definecolor{azure}{rgb}{0.95,1,1}
    \definecolor{colKeys}{rgb}{0,0,1}
    \definecolor{colIdentifier}{rgb}{0,0,0}
    \definecolor{purple}{rgb}{0.65, 0.12, 0.82}
    \definecolor{flexgreen}{rgb}{0, 0.6, 0}
    \definecolor{flexgray}{rgb}{0.25, 0.37, 0.75}
    
    \lstset{%
        float=hbp,%
        basicstyle=\ttfamily\small, %
        identifierstyle=\color{colIdentifier}, %
        keywordstyle=\color{colKeys}, % 	  
        stringstyle=\color{flexgray}, %
        commentstyle=\color{flexgreen}, %
        columns=flexible, %
        tabsize=2, %
        frame=single, %
        extendedchars=true, %
        showspaces=false, %
        showstringspaces=false, %
        numbers=left, %
        numberstyle=\tiny, %
        numbersep=5pt,
        breaklines=true, %
        backgroundcolor=\color{azure}, %
        breakautoindent=true, %
        captionpos=b,%
       	escapeinside={/*@}{@*/}
    }
    
    \lstdefinelanguage{STX}
    {
     	morecomment = [l]{//}, 
     	morecomment = [s]{(*}{*)},
     	string=[b]", 
     	sensitive = false,
     	%delim=[l][\color{purple}\textbf]\#,
     	keywords = {var, end_var, pointer, to, array, of, at, task, end_task, autorun, loop, end_loop, when, continue },
     	keywords = [2]
     	{
     	 	\#include,
     	 	include, define, ifndef, else, endif
     	},
     	keywordstyle={[2]\color{purple}}
     }
     
    \begin{document}
    
    \begin{lstlisting}[language=STX]
    #include "Platforms.stxp"
    
    var 
    	Test_data		: FrameData;
    	Test_data2	: FrameData;
    	err				: array[10] of int at%vl 1000140;
    	Baudrate	: int;
    end_var;
    
    task LIN autorun
    	Baudrate := 1000;
    	// Slave Test
    	ucTest_data[0] := 9; // bit 1-6 LED on, bit 7 all on 
    	ucTest_data[1] := 3; // Duo LEDs
    	
    	err[0] := LinSlaveAssignFrame(30,2,1,1,&Test_data);
    	err[1] := LinSlaveAssignFrame(31,2,1,0,&Test_data2);
    	err[2] := LinSlaveInit(Baudrate);
    end_task;
    \end{lstlisting}
     
    \end{document}
    Ich habe schon verschiedene Ansätze probiert.
    Wenn ich das Zeichen über delim definiere wird die ganze Zeile Eingefärbt. Es soll aber wie C-Listings aussehen und nur die Direktive einfärben.
    Wenn ich das Schlüsselwort mit \# in Keywords reinsetzte wird es auch nicht erkannt.


    Kompiliert wurde auf Windows XP mit MiKTeX 2.9 (für die Versionen der einzelnen Pakete bin ich zu faul :P)

  2. #2
    Registrierter Benutzer
    Registriert seit
    27.11.2007
    Beiträge
    375
    Hallo,

    du musst # zu einem Buchstaben machen:

    Code:
    \lstdefinelanguage{STX}
    {
      alsoletter={#},
      ...
    }
    Christian.
    Ubuntu 16.04 -- TeX Live 2015 -- Emacs (AUCTeX, RefTeX)

  3. #3
    Registrierter Benutzer
    Registriert seit
    08.06.2009
    Beiträge
    3
    Es hat funktioniert.

    Vielen Dank

Lesezeichen

Berechtigungen

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