请考虑以下示例:
\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
\lstset{language=R,
morecomment=[l]{>},
commentstyle=\color{blue},
alsoletter={*}
}
\begin{document}
\begin{lstlisting}
> q_A=0:6
> q_B=6-q_A
> N_A=6
> N_B=4
> (factorial(q_A+N_A-1)/(factorial(q_A)*factorial(N_A-1)))
[1] 1 6 21 56 126 252 462
\end{lstlisting}
\end{document}
上述代码编译为下图的简化版本(来自主文档):
在编译此代码时,星号*
、下划线_
和斜线/
仍将被视为特殊字符,应不是突出显示。我已经包含了alsoletter
包含例如的键*
,但该键似乎被忽略了。我怎样才能让以 a 开头的整行>
变成蓝色?
我已经检查过了如何才能使标识符样式应用于‘%’(在 Perl 列表中)?对于特殊标识符,但这似乎在这里不起作用。简单使用alsoletter=*
或alsoletter={/}
等的“正常”方法也不行。
到底哪里出了问题?
答案1
问题在于listings
语言是如何R
定义的。如果你在列表文件(搜索\lst@definelanguage{R}
),你会看到*
,,/
和_
都被定义为“其他关键词”:
otherkeywords={!,!=,~,$,*,\&,\%/\%,\%*\%,\%\%,<-,<<-,_,/},%
我建议你参考一下我的另一个答案了解为什么这是一个问题,以及可以采取什么措施来解决。
我认为您实际上并不想在*
这里将其声明为“字母”(至少,*
对于像行的其余部分一样用蓝色着色而言,这没有必要)。这样做会产生令人讨厌的副作用;请参阅https://tex.stackexchange.com/a/164634/21891。
\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
\lstset{
language=R,
otherkeywords={},
otherkeywords={!,!=,~,$,\&,\%/\%,\%*\%,\%\%,<-,<<-},
morecomment=[l]{>},
commentstyle=\color{blue},
}
\begin{document}
\begin{lstlisting}
> q_A=0:6
> q_B=6-q_A
> N_A=6
> N_B=4
> (factorial(q_A+N_A-1)/(factorial(q_A)*factorial(N_A-1)))
[1] 1 6 21 56 126 252 462
\end{lstlisting}
\end{document}