编辑:这个问题对我来说已经不再重要了,我决定改用包highlight
将R
代码导出为 LaTeX 输出。这仍然需要手动修改,但至少我可以让它工作。也许这个问题仍然可以保持开放和“未解答”,以防有人想出解决方案。
我正在使用 listings 包将一些 R 代码包含在 LaTeX 中。现在,一些 R 函数(如date()
或 )start
被突出显示(以蓝色显示)。但是,不幸的是,我的一些变量包含字符串(如 date 或 start)。我希望只突出显示函数,而不突出显示变量名称中的内容。例如,在下面的代码中,只date
应突出显示第一行中的
\documentclass{scrreprt}
\usepackage[utf8]{inputenc}
\usepackage{color}
\definecolor{lightgray}{gray}{0.95}
\definecolor{darkgray}{gray}{0.5}
\definecolor{mauve}{rgb}{0.58,0,0.82}
\usepackage{listings}
\lstset{
language=R, % the language of the code
basicstyle=\footnotesize, % the size of the fonts that are used for the code
numbers=none, % where to put the line-numbers
backgroundcolor=\color{lightgray}, % choose the background color. You must add \usepackage{color}
showspaces=false, % show spaces adding particular underscores
showstringspaces=false, % underline spaces within strings
showtabs=false, % show tabs within strings adding particular underscores
tabsize=2, % sets default tabsize to 2 spaces
breaklines=true, % sets automatic line breaking
keywordstyle=\color{blue}, % keyword style
commentstyle=\color{darkgray}, % comment style
stringstyle=\color{mauve}, % string literal style
}
\begin{document}
\begin{lstlisting}[language=R]
a <- date(123)
date.a <- 123
a.start <- 456
a_start <- 456
\end{lstlisting}
\end{document}
输出结果如下:
有没有办法将 的其他出现date
或 的一般出现排除start
在突出显示之外?我尝试deletekeywords={start}
向 中添加一个选项\lstset
,但它并没有改变输出
如果没有这样的选择,我也会很乐意删除任何突出显示date
,start
但该deletekeywords={start}
选项似乎不起作用。
此外,我尝试了命令,该命令可以将“。”和“_”添加到字母列表中,但这也没有改变任何东西。也许是一些奇怪的交互。我找到了一个完全不同的解决方案,现在highlight
直接在 中使用包R
。不是一个真正优雅的解决方案,但至少我可以让它工作
答案1
在' (in )listings
的定义中我们发现:R
lstlang3.sty
otherkeywords={!,!=,~,$,*,\&,\%/\%,\%*\%,\%\%,<-,<<-,_,/},%
alsoother={._$},%
您会看到,它既_
是关键字本身,又具有类别代码 other。还.
具有类别代码 other。如果我们撤消此操作,即删除关键字(对于用 定义的关键字,这otherkeywords
显然意味着我们必须重新设置整个列表,但没有我们想要删除的关键字)并将两个字符指定为字母
alsoletter={._},
otherkeywords={!,!=,~,$,*,\&,\%/\%,\%*\%,\%\%,<-,<<-,/} %$
然后您就会得到所需的输出。带有.
和_
字母的listings
不会将start
或date
视为变量名称中的函数,因为它现在将整个字符串date.a
(包括.
)视为一个单词:
\documentclass{scrreprt}
\usepackage[utf8]{inputenc}
\usepackage{color}
\definecolor{lightgray}{gray}{0.95}
\definecolor{darkgray}{gray}{0.5}
\definecolor{mauve}{rgb}{0.58,0,0.82}
\usepackage{listings}
\lstdefinestyle{mystyle}{
language=R, % the language of the code
basicstyle=\ttfamily, % the size of the fonts that are used for the code
numbers=none, % where to put the line-numbers
backgroundcolor=\color{lightgray}, % choose the background color. You must
% add \usepackage{color}
columns=fullflexible,
showspaces=false, % show spaces adding particular underscores
showstringspaces=false, % underline spaces within strings
showtabs=false, % show tabs within strings adding particular underscores
tabsize=2, % sets default tabsize to 2 spaces
breaklines=true, % sets automatic line breaking
keywordstyle=\color{blue}, % keyword style
commentstyle=\color{darkgray}, % comment style
stringstyle=\color{mauve}, % string literal style
alsoletter={._},
otherkeywords={!,!=,~,$,*,\&,\%/\%,\%*\%,\%\%,<-,<<-,/}
}
\begin{document}
\begin{lstlisting}[style=mystyle]
a <- date(123)
date.a <- 123
a.start <- 456
a_start <- 456
\end{lstlisting}
\end{document}