在我的文档中,我需要包含用 编写的代码Macaulay2
,这不是 中的预定义语言listings
。
为了自己定义它,我开始寻找关键字列表,并找到了描述 Emacs 语法高亮的变量。我已上传文件这里。
这包含一个关键字列表,这很棒,但它也包含正则表达式。我对正则表达式一无所知,所以我不知道如何处理它们。我当然可以删除正则表达式,然后以通常的方式添加关键字:
\lstdefinelanguage{Macaulay2}
{
morekeywords = {FirstKeyword,
SecondKeyword}
}
但是如果正则表达式为 Emacs 提供了关于如何处理关键字的附加信息,那么我listings
也希望获得这些信息。
答案1
我可以验证,中的正则表达式M2-symbols.el
除了单词含义之外,不会为 Emacs 提供任何其他信息。中列出了四个类别M2-mode-font-lock-keywords
:
- 类型(
ComplexField
,...) - 函数名称 (
associatedPrimes
, ...) - 常量(
CallLimit
,...) - 通用关键字(,,,
and
... )break
catch
这是 Emacs 唯一的“额外”信息(并且该额外信息与正则表达式本身无关)。
在 中listings
,我认为没有办法提供内置的此信息(例如,在morefunctions
键中)。请参阅文档(特别是第 4 节)以了解将这些关键字区分开的其他方法(例如emph
和moreemph
键)。
答案2
除了使用,您还可以尝试使用依赖于外部程序的listings
包minted
pygmentize
(http://pygments.org/)正如主页所述:
可以轻松添加对新语言和格式的支持;大多数语言使用简单的基于正则表达式的词法分析机制
答案3
我创建了一个lstlang0.sty使用来自 的关键字列表M2-symbols.el
。当存储在本地时,listings
将自动导入文件,然后可以使用 突出显示关键字language = Macaulay2
。
关键字分为四组,如 Sean 的回答中所述。默认情况下,这些关键字的排版方式相同。但是,您可以\lsetset{}
像这样区分它们:
keywordstyle = [1]\color{red},
keywordstyle = [2]\color{blue},
keywordstyle = [3]\color{green},
keywordstyle = [4]\color{yellow}