手册listings
(v1.5b,第 4.18 小节)建议在样式文件中使用\lst@definelanguage
而不是:\lstdefinelanguage
我应该将语言定义放在哪里?如果您需要某个特定文档的语言,请将其放入该文档的序言中。否则,请创建本地文件
lstlang0.sty
或将定义添加到该文件,但使用\lst@definelanguage
而不是\lstdefinelanguage
。 [...]
但是,我在手册或开发者指南中都找不到这种区别的原因。这种区别重要\lst@definelanguage
吗?\lstdefinelanguage
您可能想知道我为什么要问这个问题...好吧,我已经设法使用 使样式文件中的所有内容正常工作\lstdefinelanguage
。也就是说,我想listings
尽可能严格地遵循文档中列出的指导原则。
但是,如果我简单地用 代替\lst@definelanguage
,\lstdefinelanguage
就会遇到问题。以下是 MWE:
\documentclass{article}
\usepackage{filecontents}
% --- generate the style file ---
\begin{filecontents*}{mystyle.sty}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{mystyle}
\DeclareOption*{\OptionNotUsed}
\ProcessOptions\relax
\RequirePackage{listings}
\def\mylanguage{Mylanguage}
\expandafter\expandafter\expandafter\lstdefinelanguage%
\expandafter{\mylanguage}{keywords={foo}}
\endinput
\end{filecontents*}
% --- end of style file ---
\usepackage{mystyle}
\begin{document}
\begin{lstlisting}[language=Mylanguage]
foo bar baz
\end{lstlisting}
\end{document}
上面的代码一切都很顺利,但如果我简单地\lstdefinelanguage
用替换\lst@definelanguage
,listings
包就会抛出两个错误:
Couldn't load requested language.
和
language mylanguage undefined.
这似乎与手册的说法相矛盾,即\lstdefinelanguage
和\lst@definelanguage
具有相同的语法;至少基于我的简单测试,在扩展它们的第一个参数时,它们似乎并不等效。
我应该使用\lst@definelanguage
而不是吗\lstdefinelanguage
?如何让前者在我的 MWE 中发挥作用?