# How can I delete non-letter keywords (such as '<-')?

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
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}[caption={A first example}, label=list:ex]
x <- c(1, 2, 3, 4, 5, 6)
xmat <- matrix(x, byrow = TRUE, nrow = 3)
xmat %*% t(xmat)
\end{lstlisting}

\end{document}

-
Welcome to TeX.SX! Usually, we don't put a greeting or a “thank you” in our posts. While this might seem strange at first, it is not a sign of lack of politeness, but rather part of our trying to keep everything very concise. Accepting and upvoting answers is the preferred way here to say “thank you” to users who helped you. –  Jubobs Jun 22 '14 at 19:50

# A bit of background...

The listings package has different mechanisms to define keywords. Two keys you're likely to use most often are keywords and morekeywords. 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 the deletekeywords key.

Besides, there is another key, called otherkeywords, that can be used to define special keywords. The manual (subsection 4.18) describes it thus:

otherkeywords={⟨keywords⟩}

Defines keywords that contain other characters, or start with digits. Each given 'keyword' is printed in keyword style, but without changing the 'letter', 'digit' and 'other' status of the characters. This key is designed to define keywords like =>, ->, -->, --, ::, and so on. If one keyword is a subsequence of another (like -- and -->), you must specify the shorter first.

# So, what's going on here?

The incriminated "keywords" (* and <-) are defined with the otherkeywords key in the definition of the R language by the listings package (do a search for "definelanguage{R}" in the lstdvrs.dtx file):

otherkeywords={!,!=,~,$,*,\&,\%/\%,\%*\%,\%\%,<-,<<-,_,/}  "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 the otherkeywords key otherkeywords={},  preferably 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, otherkeywords={!,!=,~,$,*,\&,\%/\%,\%*\%,\%\%,<-,<<-,_,/}


and edit it to your taste.

# Complete 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
%otherkeywords={!,!=,~,\$,*,\&,\%/\%,\%*\%,\%\%,<-,<<-,_,/}, % default in the R language defined by the listings package
otherkeywords={}, % resets the list of "other keywords"
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
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}[caption={A first example}, label=list:ex]
x <- c(1, 2, 3, 4, 5, 6)
xmat <- matrix(x, byrow = TRUE, nrow = 3)
xmat %*% t(xmat)
\end{lstlisting}

\end{document}

-