我真的很喜欢这个listings
包,但它经常让我抓狂 :)。我想要 R 编程语言(统计资料)的列表。这是一个最简单的例子:
\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\lstset{
language=R,
basicstyle=\ttfamily,
keywordstyle=\color{red}\bfseries,
}
\begin{document}
\begin{lstlisting}
my_Variable <- qnorm(0.05/2, mean=0, sd=1)
>> 1.959964
\end{lstlisting}
\end{document}
结果如下:
这是问题:
- 即使在评论这短跑是突出显示。
- 这下划线变量名称是突出显示也。
我尝试过使用该deletekeywords={_,/}
选项 - 但没有成功。我也尝试过alsoletter
。也许有人可以指出我的错误。
编辑1: 如果可能的话,我不想像第一个答案中那样更改实际代码(列表)。因为这样代码就不再适合我的编程语言(在我的情况下是 R)。
编辑2: 任何帮助都非常感谢。我怎样才能更轻松地提供帮助?
结论
答案1
R 语言突出显示在 中定义lstdrvrs.dtx
。如果你在那里查找,你会发现
otherkeywords={!,!=,~,$,*,\&,\%/\%,\%*\%,\%\%,<-,<<-,_,/}
因此,您只需将其添加到您的\lstset
默认值即可,但要删除下划线和斜线:
otherkeywords={!,!=,~,$,*,\&,\%/\%,\%*\%,\%\%,<-,<<-}
不过,这样做会阻止斜线和下划线被突出显示,因此如果您需要在其他上下文中突出显示它们,这将不起作用。为了使除法和乘法之间保持一致,您可能还希望*
从列表中删除星号。(您可能还需要删除一些其他内容以保持数学的统一;我不了解 R。)
不幸的是,Pygments 似乎没有提供像listings
R 那样多的关键字突出显示功能,所以如果这是您所需要的,那么基于 Pygments 的突出显示包(如minted
和)pythontex
可能不是一种替代方案(至少,在没有编写自定义词法分析器的情况下不是)。
答案2
您可以escapeinside
通过以下方式寻求内部庇护:
\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\lstset{
language=R,
basicstyle=\ttfamily,
keywordstyle=\color{red}\bfseries,
escapeinside=||
}
\begin{document}
\begin{lstlisting}
my|\_|Variable <- qnorm(0.05/2, mean=0, sd=1)
# even inside comments |/| doesn't highlight.
>> 1.959964
\end{lstlisting}
\end{document}
答案3
如果您想要为 Hadley 函数添加突出显示,您还应该查看该选项alsoletter
。这定义了哪些字符也被视为字母(因此也可以是姓名的一部分)。
\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\lstset{
language=R,
basicstyle=\ttfamily,
keywordstyle=\color{red}\bfseries,
alsoletter ={_},
otherkeywords = {!,!=,~,$,*,\&,\%/\%,\%*\%,\%\%,<-,<<-},
morekeywords = {str_extract}
}
\begin{document}
\begin{lstlisting}
my_Variable <- qnorm(0.05/2, mean=0, sd=1)
# even inside comments _ doesn't highlight.
str_extract("Hello", "e")
\end{lstlisting}
\end{document}
我在这里添加这个是因为我遇到了同样的问题并且最终找到了这个问题的解决方案。