我的问题是,当我使用正确的引号 ``'' 时,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 命令。