嵌入代码中的字符串颜色错误

嵌入代码中的字符串颜色错误

我的问题是,当我使用正确的引号 ``'' 时,lstset 无法识别我代码中的字符串,因此无法对它们进行颜色编码。当我使用标准双引号 "" 时,前导引号是反向的。有什么想法吗?

\documentclass[12pt, letterpaper]{article}
\usepackage [english]{babel}
\usepackage [autostyle, english = american]{csquotes}
\MakeOuterQuote{"}

 \usepackage{listings}
 \newcommand{\dbllq}{``}
 \newcommand{\dblrq}{''}
 \lstset{
    literate={``}{\dbllq}1 {''}{\dblrq}1  % so that double quotes appear correctly in the code
 }

 \usepackage{color}
 \definecolor{mygreen}{rgb}{0,0.6,0}
 \definecolor{mygray}{rgb}{0.5,0.5,0.5}
 \definecolor{mymauve}{rgb}{0.58,0,0.82}
 \lstset{ %
    basicstyle=\normalsize,        % the size of the fonts that are used for the code
    commentstyle=\color{mygreen},    % comment style
    keywordstyle=\color{blue},       % keyword style
    language=C,                     % the language of the code
    stringstyle=\color{mymauve},     % string literal style
    showspaces=false, 
 }

\begin{document}
    "Quotes in the document work properly."

\begin{lstlisting}
    displayTextLine(1, "Right color, wrong quotes"); // comments are green
    for(1, ``Right quotes, wrong color''); // nonsensical code but keywords are blue
\end{lstlisting}

\end{document}

答案1

对于第一个使用错误引号的示例,您可以通过将所有引号变为中性(非花括号)来纠正它们。请参阅如何在列表中获得直双引号?或者,您可以简单地在基本样式或字符串样式中使用打字机字体。我通常会对列表这样做:

basicstyle=\normalsize\ttfamily, 

当使用正确的 LaTeX 引号时,您需要告诉列表使用这些分隔符识别字符串,因此添加

morestring=[s]{``}{''},

到您的 lstset 命令。

相关内容