LaTeX-Liste - „\keywordsprefix“-Schlüsselwörter werden auch in Zeichenfolgen und Kommentaren hervorgehoben

LaTeX-Liste - „\keywordsprefix“-Schlüsselwörter werden auch in Zeichenfolgen und Kommentaren hervorgehoben

Ich versuche, SAS-Code in einem LaTeX-Dokument anzuzeigen. Zu diesem Zweck möchte ich eine angepasste LST-Sprache verwenden. Ich habe es geschafft, alles zu implementieren, außer den benutzerdefinierten Variablen, die mit einem "&"-Zeichen beginnen. Jedes Wort, das mit "&" beginnt, sollte fett und blau gedruckt werden, AUSSER es erscheint in einer Zeichenfolge oder einem Kommentar. In meinem Beispiel wird es immer fett und blau geschrieben. Andere Schlüsselwörter werden in Zeichenfolgen oder Kommentaren nicht hervorgehoben. Haben Sie eine Idee, warum es sich in meinem Beispiel nicht so verhält, wie es sollte? Irgendwelche Ideen, wie ich meinen Code reparieren kann?

Dank im Voraus!

\usepackage{listings}
\usepackage{color}
\usepackage[svgnames]{xcolor}
\definecolor{spYellow}{HTML}{ADAD00}

% ---------------------------------------------------------------------
% SAS language definition

\lstdefinelanguage{SAS}{
  sensitive=false,
  alsoletter={\%\&},
  %
  % User variables
  keywordsprefix={\&},
  %
  % Comments
  morecomment=[f][\color{Green}\slshape][0]*,
  morecomment=[s]{/*}{*/},
  %
  % Strings
  morestring=[b]",
  morestring=[d]',
  %
  % Datalines and cards
  morecomment=[s][\itshape\color{spYellow}]{datalines;}{;},
  morecomment=[s][\itshape\color{spYellow}]{cards;}{;},
  %
  % Distinct highlight for proc <proc>, data, run, quit
  morecomment=[s][\bfseries\color{DarkBlue}]{proc\ }{\ },
  morekeywords={keyword1},
  morekeywords=[2]{
    data ,proc ,run ,quit
  },
  %
  % Macros
  morekeywords=[3]{
    \%include ,\%let
  },
  %
  % Statements
  morekeywords=[4]{libname}
}

% ---------------------------------------------------------------------
% SAS enhanced editor style

\providecommand{\textcolordummy}[2]{#2}
\lstalias{sas}{SAS}
\lstdefinestyle{sas-editor}{
  language          = SAS,
  showstringspaces  = false,   % Don't underline spaces in strings
  showspaces        = false,   % Don't underline spaces
  breaklines        = true,    % automatic line b\color{Blue}\color{Blue}reaking
  breakatwhitespace = true,    % breaks only at white space.
    basicstyle        = \footnotesize\ttfamily,
    tabsize           = 4,      % Tab size
    lineskip          = 1.5pt,  % Sparing between lines of code
    numbers                     = left,
    commentstyle      = \color{black!50}\itshape \let\textcolor\textcolordummy,
  %
  % User variables
  keywordstyle = {\bfseries\color{NavyBlue}},
  %
  % Distinct highlight for proc <proc>, data, run, quit
  keywordstyle = [2]{\bfseries\color{DarkBlue}},
  %
  % Built-in macro functions
  keywordstyle = [3]{\color{Blue}},
  %
  % Statements
  keywordstyle = [4]{\color{Blue}},
  %
  % Strings and comments
  stringstyle  = \color{Purple},
  commentstyle = \color{Green}\slshape
}

\lstset{style=sas-editor}

\begin{document}

Text before the code.

\renewcommand{\ttdefault}{pcr}
\begin{lstlisting}%[language=SAS]
/******************Macros************************/
/* Compile all macros   */
%include "&incodes.keyword1.makro1.sas";
%include '&incodes.keyword1.makro2.sas';
/*%include "&incodes.keyword1.makro3.sas";*/
/*%include &incodes.keyword1.makro4.sas;*/
%include &incodes.keyword1.makro5.sas;
\end{lstlisting}

Some text after the code.

\end{document}

verwandte Informationen