为什么这里的非字母数字字符(*/_)没有变成蓝色?

为什么这里的非字母数字字符(*/_)没有变成蓝色?

请考虑以下示例:

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

上述代码编译为下图的简化版本(来自主文档):

http://i.imgur.com/D3rkYpZ.png?1

在编译此代码时,星号*、下划线_和斜线/仍将被视为特殊字符,应不是突出显示。我已经包含了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}

相关内容