我正在尝试使用listings
显示 Javascript 代码。以下是另一个问题,我制定了以下代码:
\documentclass{article}
\usepackage{listings}
\lstdefinelanguage{JavaScript}{
keywords={break, case, catch, continue, debugger, default, delete, do, else,
finally, for, function, if, in, instanceof, new, return, switch,
this, throw, try, typeof, var, void, while, with},
morekeywords={class, export, boolean, throw, implements, import, this},
comment=[l]{//},
morecomment=[s]{/*}{*/},
string=[b]",
morestring=[b]',
sensitive=true
}
\begin{document}
\begin{lstlisting}[breaklines={true}, language={Javascript}, numbers=left]
var string = "This is special' string";
var alpha = document.selection;
str = str.replace(/[!.:?,;\"]/g, '');
dictionary_access ("" + t );
var alpha = document.selection;
\end{lstlisting}
\end{document}
但是显示的列表格式不正确(字符串外的空格被突出显示)。我猜是因为字符串分隔符没有正确转义。
其他人也有一个与 Basic 有类似问题。我尝试string=[b]"
用[bd]
替换[m]
单引号和双引号中的 [b]。还尝试使用,string=[s]""
但没有成功。
答案1
看起来,问题在于listings
未能识别出第 3 行中的双引号位于“字符串”(当然,实际上是正则表达式)内。因此,第 3 行中的双引号打开了一个字符串文字,该字符串文字由第 4 行中的第一个双引号关闭,但随后第 4 行中的第二个双引号又打开了一个新的字符串文字。
我认为你应该能够解决这个问题,只需将其变成/
字符串分隔符即可。换句话说,添加
morestring=[b]/
到你的\lstdefinelanguage
。
"
和'
的交互不应该有任何问题/
,因为/
在 中不需要转义"..."
,反之亦然。