我正在使用列表大多数情况下,该包都像魔法一样有效。
morekeywords
我尝试在 中的选项的帮助下定义满足我需求的新语言\lstset
,但输入名称中带有点的特殊关键字不起作用。例如:
\lstset{morekeywords={read.table}}
我知道我可以将这个关键字设置为两个并设置读和桌子也是关键词,但我不希望每一个读在源代码中突出显示。
您知道如何设置这个关键字或如何转义点吗?
答案1
尝试将 catcode 改为.
字母并快速浏览listings
代码后,我决定阅读手册并alsoletter
很快找到了该选项。您可能还想使用该alsodigit
选项。
\documentclass{article}
\usepackage{listings}
\lstset{alsoletter={.},morekeywords={read.table}}
\begin{document}
\begin{lstlisting}
read read.table table read-table
test
\end{lstlisting}
\end{document}
答案2
我的回答比其他帖子晚了一点,但我决定把它放在这里,以展示如何定义一种新语言(示例中为 Javascript)以及如何按照 OP 的意愿只强调部分代码。我也使用过alsoletter
(如其他示例一样)。
\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\gdef\emphasis#1{\lstset{emph={write,void,writeln,Hello,#1},
emphstyle={\ttfamily\textcolor{red}}}}
\begin{document}
\lstdefinelanguage{JavaScript} {
morekeywords={
break,const,continue,delete,do,while,export,for,in,function,
if,else,import,in,instanceOf,label,let,new,return,switch,this,
throw,try,catch,typeof,var,void,with,yield,
},
sensitive=false,
morecomment=[l]{//},
morecomment=[s]{/*}{*/},
morestring=[b]",
morestring=[d]',
alsoletter={.}
}
\lstset{
%frame=tb,
framesep=5pt,
basicstyle=\normalsize, %\ttfamily,
showstringspaces=false,
keywordstyle=\ttfamily\color{blue},
identifierstyle=\ttfamily,
stringstyle=\ttfamily\color{orange},
commentstyle=\color{orange},
rulecolor=\color{black},
xleftmargin=5pt,
xrightmargin=5pt,
aboveskip=\bigskipamount,
belowskip=\bigskipamount,
backgroundcolor=\color{gray!.50},
alsoletter={.}
}
\emphasis{document.createElement, headline.appendChild}
\begin{lstlisting}[language=JavaScript]
// some comments
// about your code
var headline = document.createElement(h1);
var text = document.createTextNode(A text node)
// "offline" node manipulation
headline.appendChild(text);
// adding node to DOM
document.getElementsByTagName("body")[0].appendChild(headline);
\end{lstlisting}
\end{document}
总是最好突出显示所讨论的代码部分,而不是对整个脚本进行颜色编码。
答案3
您可以使用
\lstset{alsoletter={.},morekeywords={read.table}}