使用列表包名称中包含点的关键字

使用列表包名称中包含点的关键字

我正在使用列表大多数情况下,该包都像魔法一样有效。

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}}

相关内容