我正在使用listings
一种语言,我想用额外的关键字来扩展它以突出显示。我知道有一个morekeywords
可用的选项,但它只适用于特定的lstset
声明,我不想将所有关键字复制粘贴到所有列表中。我试过将关键字声明为命令的一部分,但那不起作用(可能是因为命令没有展开,我不知道如何解决这个问题)。
那么,有没有办法通过复制现有语言并添加更多关键字来声明一种新语言?
答案1
您可以在单独的文件中定义关键字,并将其包含在序言中。以下是添加for
和downto
作为新关键字的示例:
\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
虽然总结经过阿萨卡大多数其他答案都是一个很好的解决方法,我想展示如何实际扩展现有语言,如提问者所要求的那样。鉴于语言HTML
不listing
突出显示 HTML 5 元素,让我们通过一些关键字对其进行扩展:
\lstdefinelanguage{HTML5}[]{HTML}{
morekeywords={audio, video, canvas, embed, source}
}
当您向文档添加 HTML 列表时,只需使用HTML5
语言标签,而不是HTML
:
\begin{lstlisting}[language=HTML5]
<video src="" controls></video>
\end{lstlisting}