为什么 (列表) ⟨language⟩s 的 ⟨dialect⟩s 在 \lstset{alsolanguage=...} 中被考虑,但在 \lstloadlanguages{...} 中却没有被考虑?

为什么 (列表) ⟨language⟩s 的 ⟨dialect⟩s 在 \lstset{alsolanguage=...} 中被考虑,但在 \lstloadlanguages{...} 中却没有被考虑?

考虑到( listings)⟨language⟩的情况:⟨dialect⟩

  • \lstset{alsolanguage=[⟨dialect⟩]⟨language⟩}
  • 但不与\lstloadlanguages{[⟨dialect⟩]⟨language⟩}

以下 MCE 显示了这一点:

  • \def是来自语言的控制序列TeX
  • \LoadClassAlLaTeX是来自该语言方言的控制序列TeX

为什么?

\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}

\lstset{
  basicstyle=\ttfamily,
  language=TeX,
  texcsstyle=*\color{red},
}

\begin{document}
\lstloadlanguages{[AlLaTeX]TeX}

\begin{lstlisting}
\def
\LoadClass
\end{lstlisting}

\lstset{alsolanguage=[AlLaTeX]TeX}

\begin{lstlisting}
\def
\LoadClass
\end{lstlisting}
\end{document}

在此处输入图片描述

答案1

引用listings包文档:

加载软件包后,建议使用以下命令加载所有使用的编程语言方言。使用一个命令加载多种语言比按需加载每种语言更快。

\lstloadlanguages{⟨comma separated list of languages⟩}

每种语言的形式都是[⟨dialect⟩]⟨language⟩。如果没有可选的, [⟨dialect⟩]包将加载默认方言。因此,[Visual]C++如果您想要 Visual C++,请写下 ,[ISO]C++如果您想要 ISO C++,请写下 。两者可以通过命令一起加载\lstloadlanguages{[Visual]C++,[ISO]C++}

本质上,\lstloadlanguages除了声明文档中将要使用的所有语言(并且为了加速,正如文档所声称的那样)之外什么也不做。

您仍然需要(或直接在块lstset中指定语言)才能使用它。lstlistings[language={...}]

相关内容