列表:改变 R 语言下划线的含义(定制语言)

列表:改变 R 语言下划线的含义(定制语言)

我真的很喜欢这个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}

结果如下: 在此处输入图片描述

这是问题

  1. 即使在评论短跑突出显示
  2. 下划线变量名称是突出显示也。

我尝试过使用该deletekeywords={_,/}选项 - 但没有成功。我也尝试过alsoletter。也许有人可以指出我的错误。

编辑1: 如果可能的话,我不想像第一个答案中那样更改实际代码(列表)。因为这样代码就不再适合我的编程语言(在我的情况下是 R)。

编辑2: 任何帮助都非常感谢。我怎样才能更轻松地提供帮助?

结论

  • 根据(非常好的)接受的答案,这是由中的错误引起的listings
  • 同一错误的其他示例似乎是

答案1

R 语言突出显示在 中定义lstdrvrs.dtx。如果你在那里查找,你会发现

otherkeywords={!,!=,~,$,*,\&,\%/\%,\%*\%,\%\%,<-,<<-,_,/}

因此,您只需将其添加到您的\lstset默认值即可,但要删除下划线和斜线:

otherkeywords={!,!=,~,$,*,\&,\%/\%,\%*\%,\%\%,<-,<<-}

不过,这样做会阻止斜线和下划线被突出显示,因此如果您需要在其他上下文中突出显示它们,这将不起作用。为了使除法和乘法之间保持一致,您可能还希望*从列表中删除星号。(您可能还需要删除一些其他内容以保持数学的统一;我不了解 R。)

不幸的是,Pygments 似乎没有提供像listingsR 那样多的关键字突出显示功能,所以如果这是您所需要的,那么基于 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}

在此处输入图片描述

我在这里添加这个是因为我遇到了同样的问题并且最终找到了这个问题的解决方案。

相关内容