
我試圖在 LaTeX 文件中顯示一些 SAS 程式碼。為此我想使用客製化的 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}