如何使用 \listings 包中的 alsolanguage?

如何使用 \listings 包中的 alsolanguage?

我为 JavaScript 编程语言和 HTML 定义了关键字。

我读到过可以在\listings代码片段中使用两种语言的关键字。但在我的示例中,JavaScript 关键字未显示为蓝色。

在此处输入图片描述

这是我的代码示例。我的用法是否alsolanguage不正确?

代码:

\documentclass{scrreprt}
\usepackage{color}
\usepackage{upquote}
\usepackage{listings}
\makeatletter
\lstdefinelanguage{JavaScript}{
  keywords={var, function}
}

\lstdefinelanguage{HTML5}{
    language=HTML,
    sensitive=true,
    tagstyle=\color{blue}\bfseries,
    usekeywordsintag=true
}

\lstset{%
    % Basic design
    basicstyle={\small\ttfamily},
    % Code design   
    keywordstyle=\color{blue}\bfseries,
    % Code
    language=HTML5,
    tabsize=2,
    showtabs=false,
    showspaces=false,
    showstringspaces=false,
    extendedchars=true,
    breaklines=true
}
\makeatother
\begin{document}
    \begin{lstlisting}[language=HTML5,alsolanguage=JavaScript]
<!DOCTYPE html>
<html>
  <head>
    <title>Canvas-Rotation</title>
    <meta charset="UTF-8" />
  </head>
  <body>
    <canvas id="square" width="200" height="200"></canvas>
    <script>
            var canvas = document.createElement('canvas');
            canvas.width = 200;
            canvas.height = 200;

            var image = new Image();
            image.src = 'images/card.png';
            image.width = 114;
            image.height = 158;
            image.onload = window.setInterval(function() {
                rotation();
            }, 1000/60);
   </script>
  </body>
</html>
    \end{lstlisting}
\end{document}

答案1

已加载 JavaScript 语言,但由于 html 语言的定义方式,listings其中的内容<script>被格式化为文本。它由键控制tag。我不知道它到底是做什么的,但通过让 HTML5 继承 HTML 中的所有内容并覆盖它,它tag似乎适用于这个简单的示例。

当使用多种语言时,只需使用morekeywordsJavaScript 的关键字,否则它将覆盖 HTML 的关键字列表。此外,alsolanguages不会在两种语言之间切换,而只是将两种语言统一起来。因此,当我将 canvas 定义为 HTML5 的关键字时,JavaScript 中的变量 canvas 仍然被格式化为关键字。

\documentclass{scrreprt}
\usepackage{color}
\usepackage{upquote}
\usepackage{listings}
\lstdefinelanguage{JavaScript}{
  morekeywords={var, function},
  morecomment=[s]{/*}{*/},%
  morecomment=[l]//,%
  morestring=[b]",%
  morestring=[b]'%
}

\lstdefinelanguage{HTML5}[]{HTML}{
    sensitive=false,
    morekeywords={canvas},
    tag=[s]
}

\lstset{%
    % Basic design
    basicstyle={\small\ttfamily},
    % Code design   
    keywordstyle=\color{blue}\bfseries,
    stringstyle=\color{red},
    % Code
    language=HTML5,
    tabsize=2,
    showtabs=false,
    showspaces=false,
    showstringspaces=false,
    extendedchars=true,
    breaklines=true
}
\begin{document}
    \begin{lstlisting}[language=HTML5,alsolanguage=JavaScript]
<!DOCTYPE html>
<html>
  <head>
    <title>Canvas-Rotation</title>
    <meta charset="UTF-8" />
  </head>
  <body>
    <canvas id="square" width="200" height="200"></canvas>
    <script>
            var canvas = document.createElement('canvas');
            canvas.width = 200;
            canvas.height = 200;

            var image = new Image();
            image.src = 'images/card.png';
            image.width = 114;
            image.height = 158;
            image.onload = window.setInterval(function() {
                rotation();
            }, 1000/60);
   </script>
  </body>
</html>
    \end{lstlisting}
\end{document}

在此处输入图片描述

相关内容