I am using the package to try and format my R code, and I don't like some of the things that are being treated as keywords (for the coloring scheme). However, when I specify deletekeywords={*,<-}
in the \lstset
, it refuses to remove them. Here is the code:
\documentclass{scrartcl}
\usepackage{courier}
\usepackage{listings}
\usepackage{xcolor}
\xdefinecolor{gray}{rgb}{0.4,0.4,0.4}
\xdefinecolor{blue}{RGB}{58,95,205}% R's royalblue3; #3A5FCD
\lstset{ %
language=R, % the language of the code
basicstyle=\ttfamily\footnotesize, % the size of the fonts that are used for the code
deletekeywords={*, <-},
numbers=left, % where to put the line-numbers
numberstyle=\tiny\color{gray}, % the style that is used for the line-numbers
stepnumber=2, % the step between two line-numbers. If it's 1, each line
% will be numbered
numbersep=5pt, % how far the line-numbers are from the code
backgroundcolor=\color{white}, % 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
frame=single, % adds a frame around the code
rulecolor=\color{black}, % if not set, the frame-color may be changed on line-breaks within not-black text (e.g. commens (green here))
tabsize=2, % sets default tabsize to 2 spaces
captionpos=b, % sets the caption-position to bottom
breaklines=true, % sets automatic line breaking
breakatwhitespace=false, % sets if automatic breaks should only happen at whitespace
title=\lstname, % show the filename of files included with \lstinputlisting;
% also try caption instead of title
keywordstyle=\color{blue}, % keyword style
commentstyle=\color{gray}, % comment style
stringstyle=\color{gray}, % string literal style
escapeinside={}, % if you want to add a comment within your code
morekeywords={byrow} % if you want to add more keywords to the set
}
\begin{document}
\begin{lstlisting}
x <- c(1, 2, 3, 4, 5, 6)
xmat <- matrix(x, byrow = TRUE, nrow = 3)
xmat %*% t(xmat)
\end{lstlisting}
\end{document}
Best Answer
A bit of background...
The
listings
package has different mechanisms to define keywords. Two keys you're likely to use most often arekeywords
andmorekeywords
. The former defines a list of keywords from scratch (overwriting any existing list), whereas the latter adds to the existing list (if any). You can also delete existing keywords by using thedeletekeywords
key.Besides, there is another key, called
otherkeywords
, that can be used to define special keywords. The manual (subsection 4.18) describes it thus:So, what's going on here?
The incriminated "keywords" (
*
and<-
) are defined with theotherkeywords
key in the definition of theR
language by thelistings
package (do a search for "definelanguage{R}" in the lstdvrs.dtx file):"Other keywords" defined with that key cannot be deleted using the
deletekeywords
key.A solution
Sadly, there is no
deleteotherkeywords
key. The only way to delete such "other keywords" is to reinitialise the value associated to theotherkeywords
keypreferably right after invoking
language=R
.Edit: If you want to preserve a subset of those "other keywords", you need to copy the line from the original language definition,
and edit it to your taste.
Complete code