Listado de listas de LaTeX: las palabras clave “\keywordsprefix” también se enfatizan en cadenas y comentarios

Listado de listas de LaTeX: las palabras clave “\keywordsprefix” también se enfatizan en cadenas y comentarios

Estoy intentando mostrar algún código SAS en un documento LaTeX. Para este fin, quiero utilizar un primer idioma personalizado. He logrado implementar todo menos las variables definidas por el usuario que comienzan con un signo "&". Cada palabra que comience con "&" debe imprimirse en negrita y azul A MENOS que aparezca en una cadena o comentario. En mi ejemplo estará escrito en negrita y azul todo el tiempo. Otras palabras clave no se enfatizan en cadenas ni comentarios. ¿Tiene alguna idea de por qué no se comporta como debería en mi ejemplo? ¿Alguna idea de cómo arreglar mi código?

¡Gracias de antemano!

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

información relacionada