\ 正在转义列表列表中的“字符,从而产生错误输出

\ 正在转义列表列表中的“字符,从而产生错误输出

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}

相关内容