LaTeX lstlisting - palavras-chave “\keywordsprefix” também são enfatizadas em strings e comentários

LaTeX lstlisting - palavras-chave “\keywordsprefix” também são enfatizadas em strings e comentários

Estou tentando mostrar algum código SAS em um documento LaTeX. Para esse fim, quero usar uma linguagem lst personalizada. Consegui implementar tudo, menos as variáveis ​​definidas pelo usuário que começam com um sinal "&". Cada palavra que começa com "&" deve ser impressa em negrito e azul, A MENOS que apareça em uma string ou comentário. No meu exemplo, estará escrito em negrito e azul o tempo todo. Outras palavras-chave não são enfatizadas em strings ou comentários. Você tem alguma idéia de por que ele não se comporta como deveria no meu exemplo? Alguma idéia de como consertar meu código?

Desde já, obrigado!

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

informação relacionada