如果我理解的正确方法是可以全局以及逐个列表地指定列表的编程语言,那么以下方法应该有效:
\documentclass[11pt,letterpaper]{book}
\usepackage{listings}
\begin{document}
\lstloadlanguages{SQL,Basic} %Listings manual, pp. 11, 13
\lstset{
frameround=fttt
,language=SQL
,numbers=left
,breaklines=true
,showstringspaces=false
,basicstyle=\small
}
\begin{lstlisting}[language=Basic,label={lst:ssrscurmon}]
=MonthName(DatePart(DateInterval.Month, Today()))
\end{lstlisting}
\end{document}
但它却抛出了
Package Listings Error: Couldn't load requested language \lstloadlanguages{SQL,Basic}
如何为文档中的一些列表指定 Basic,其中大多数都是 SQL?
答案1
listings
这可以被认为是;中的一个错误lstdvrs.dtx
, 进一步来说。
这lstdvrs.dtx
文件是所有listings
语言和方言进行了定义。特别地,其中定义了一种称为 的语言Basic
(以及一种方言)。Visual
问题是,尽管该Basic
语言只有一种方言(Visual
),默认方言对于 Basic 在 中没有定义lstdvrs.dtx
。因此,如果你只是指定
language=Basic
listings
Assembler
不知道您指的是哪种语言!如果您尝试加载语言而不指定方言,则会出现相同的问题,原因也相同。
要解决此问题,您有两个选择:
无论何时想要使用 Basic,
Visual
也请指定其唯一的方言():language={[Visual]Basic}
listings
通过定义默认方言来修复自己的错误Basic
:\lstset{defaultdialect=[Visual]Basic}
(正如彼得所说,这最好在序言中完成。您应努力将风格与内容分开;前者应放在序言中,而后者应放在文档正文中。)
然后你应该能够
Basic
顺利地使用该语言。根本不需要使用\lstloadlanguages
(尽管,彼得指出,出于效率原因,您可能仍希望在加载包之后立即加载您使用的语言listings
;请参阅文档中 2.2 节底部的注释)。
\documentclass[11pt,letterpaper]{book}
\usepackage{listings}
\lstset{
defaultdialect=[Visual]Basic
,frameround=fttt
,language=SQL
,numbers=left
,breaklines=true
,showstringspaces=false
,basicstyle=\small
}
\begin{document}
\begin{lstlisting}[language=Basic,label={lst:ssrscurmon}]
=MonthName(DatePart(DateInterval.Month, Today()))
\end{lstlisting}
\end{document}
答案2
正如您在文档的表 1(第 13 页)中看到的listings
,仅支持 Visual Basic;这也可以在文件中看到lstlang1.sty
,您可以在其中找到定义
\lst@definelanguage[Visual]{Basic}
{
...
}
您需要加载[Visual](Basic)
;完整代码:
\documentclass[11pt,letterpaper]{book}
\usepackage{listings}
\lstloadlanguages{SQL,[Visual]Basic} %Listings manual, pp. 11, 13
\lstset{
frameround=fttt
,language=SQL
,numbers=left
,breaklines=true
,showstringspaces=false
,basicstyle=\small
}
\begin{document}
\begin{lstlisting}[language={[Visual]Basic},label={lst:ssrscurmon}]
=MonthName(DatePart(DateInterval.Month, Today()))
\end{lstlisting}
\end{document}
输出: