列表:从 Emacs 高亮定义新语言

列表:从 Emacs 高亮定义新语言

在我的文档中,我需要包含用 编写的代码Macaulay2,这不是 中的预定义语言listings

为了自己定义它,我开始寻找关键字列表,并找到了描述 Emacs 语法高亮的变量。我已上传文件这里

这包含一个关键字列表,这很棒,但它也包含正则表达式。我对正则表达式一无所知,所以我不知道如何处理它们。我当然可以删除正则表达式,然后以通常的方式添加关键字:

\lstdefinelanguage{Macaulay2}
{
    morekeywords = {FirstKeyword, 
                    SecondKeyword}
}

但是如果正则表达式为 Emacs 提供了关于如何处理关键字的附加信息,那么我listings也希望获得这些信息。

答案1

我可以验证,中的正则表达式M2-symbols.el除了单词含义之外,不会为 Emacs 提供任何其他信息。中列出了四个类别M2-mode-font-lock-keywords

  • 类型(ComplexField,...)
  • 函数名称 ( associatedPrimes, ...)
  • 常量(CallLimit,...)
  • 通用关键字(,,,and... )breakcatch

这是 Emacs 唯一的“额外”信息(并且该额外信息与正则表达式本身无关)。

在 中listings,我认为没有办法提供内置的此信息(例如,在morefunctions键中)。请参阅文档(特别是第 4 节)以了解将这些关键字区分开的其他方法(例如emphmoreemph键)。

答案2

除了使用,您还可以尝试使用依赖于外部程序的listingsmintedpygmentizehttp://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}

相关内容