Я пытаюсь показать код 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}