VB 中的以下代码由于\
转义了字符串的结束而输出错误"
。其余代码则被打印出来,就像在字符串中一样。
知道如何纠正吗?
\documentclass{article}
\usepackage[svgnames,table]{xcolor}
\usepackage{listingsutf8}
\begin{document}
\lstset
{
language={[Visual]Basic},
basicstyle=\scriptsize\color{Black}\ttfamily,
keywordstyle=\bfseries\color{Orange},
identifierstyle=\color{Blue},
stringstyle=\color{Red},
commentstyle=\color{Green}
}
\begin{lstlisting}
Function filtre1(chaine As String) As String
If Left(chaine, 1) = "\" And Not Right(chaine, 1) = "{" Then
filtre1 = chaine + " "
Else
filtre1 = chaine
End If
End Function
\end{lstlisting}
\end{document}
答案1
看来 Basic 的定义有点错误,因为它包括了以下行
morestring=[b]"
文档listings
有点难以理解,但它说对于[b]
类型注释/字符串分隔符,可以使用 或 重复来转义字符\
。但 Basic 并非如此:您无法"
使用 进行转义\
。所以你似乎想要的是
morestring=[s]""
这是一对不可嵌套的不可转义的分隔符。
您可以在加载标准基本定义后通过添加适当的行来更改设置:
\documentclass{article}
\usepackage[svgnames,table]{xcolor}
\usepackage{listingsutf8}
\begin{document}
\lstset
{
language={[Visual]Basic},
basicstyle=\scriptsize\color{Black}\ttfamily,
keywordstyle=\bfseries\color{Orange},
identifierstyle=\color{Blue},
stringstyle=\color{Red},
commentstyle=\color{Green},
morestring=[s]""
}
\begin{lstlisting}
Function filtre1(chaine As String) As String
If Left(chaine, 1) = "\" And Not Right(chaine, 1) = "{" Then
filtre1 = chaine + " "
Else
filtre1 = chaine
End If
End Function
\end{lstlisting}
\end{document}