为什么在样式文件中 \lst@definelanguage 应该优于 \lstdefinelanguage?

为什么在样式文件中 \lst@definelanguage 应该优于 \lstdefinelanguage?

手册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@definelanguagelistings包就会抛出两个错误:

Couldn't load requested language.

language mylanguage undefined.

这似乎与手册的说法相矛盾,即\lstdefinelanguage\lst@definelanguage具有相同的语法;至少基于我的简单测试,在扩展它们的第一个参数时,它们似乎并不等效。

我应该使用\lst@definelanguage而不是吗\lstdefinelanguage?如何让前者在我的 MWE 中发挥作用?

相关内容