LaTeX lstlisting - ключевые слова "\ keywordsprefix" также выделяются в строках и комментариях - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь показать код SAS в документе LaTeX. Для этого я хочу использовать собственный язык lst. Мне удалось реализовать все, кроме пользовательских переменных, которые начинаются со знака «&». Каждое слово, начинающееся с «&», должно быть напечатано жирным шрифтом и синим цветом, ЕСЛИ оно не появится в строке или в комментарии. В моем примере это будет написано жирным шрифтом и синим цветом все время. Другие ключевые слова не выделяются в строках или комментариях. У вас есть идеи, почему он не ведет себя так, как должен в моем примере? Есть идеи как исправить мой код?

Заранее спасибо!

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