用附加关键字来扩展语言?

用附加关键字来扩展语言?

我正在使用listings一种语言,我想用额外的关键字来扩展它以突出显示。我知道有一个morekeywords可用的选项,但它只适用于特定的lstset声明,我不想将所有关键字复制粘贴到所有列表中。我试过将关键字声明为命令的一部分,但那不起作用(可能是因为命令没有展开,我不知道如何解决这个问题)。

那么,有没有办法通过复制现有语言并添加更多关键字来声明一种新语言?

答案1

您可以在单独的文件中定义关键字,并将其包含在序言中。以下是添加fordownto作为新关键字的示例:

在此处输入图片描述

\documentclass{article}
\usepackage{listings}%
\usepackage{xcolor}

\lstset{%
    backgroundcolor=\color{yellow!20},%
    basicstyle=\small\ttfamily,%
    numbers=left, numberstyle=\tiny, stepnumber=2, numbersep=5pt,%
    }%

% Add your keywords here, and have this in a separate file
% and include it in your preamble
\lstset{emph={%  
    downto, for%
    },emphstyle={\color{red}\bfseries\underbar}%
}%

\begin{document}
\begin{lstlisting}
y = 0
for i = n downto 0
    y = a_i + x * y
\end{lstlisting}
\end{document}

答案2

似乎这morekeywords也适用于扩展语言。例如,Python 关键字super不在默认关键字列表中。在我的序言中,我可以通过执行以下操作将其设置为关键字:

\lstset{language=Python}
\lstset{
 morekeywords={super}
}

当然,如果能将这些缺失的关键词贡献给列表包那就再好不过了。

答案3

正如多米尼克所说,

\lstset{language=Python}
\lstset{
morekeywords={super}
}

有效,但这样做首先要将 Python 语言添加到所有列表中,然后将关键字添加到所有语言中。

仅添加一种语言使用的关键字

\lstdefinestyle{Python}{
morekeywords={super}
}

反而。

答案4

虽然总结经过阿萨卡大多数其他答案都是一个很好的解决方法,我想展示如何实际扩展现有语言,如提问者所要求的那样。鉴于语言HTMLlisting突出显示 HTML 5 元素,让我们通过一些关键字对其进行扩展:

\lstdefinelanguage{HTML5}[]{HTML}{
    morekeywords={audio, video, canvas, embed, source}
}

当您向文档添加 HTML 列表时,只需使用HTML5语言标签,而不是HTML

\begin{lstlisting}[language=HTML5]
<video src="" controls></video>
\end{lstlisting}

相关内容