我为 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
似乎适用于这个简单的示例。
当使用多种语言时,只需使用morekeywords
JavaScript 的关键字,否则它将覆盖 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}