![如何使用列表获取匹配的双引号?](https://linux22.com/image/337983/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E5%88%97%E8%A1%A8%E8%8E%B7%E5%8F%96%E5%8C%B9%E9%85%8D%E7%9A%84%E5%8F%8C%E5%BC%95%E5%8F%B7%EF%BC%9F.png)
我在列表方面遇到了一个奇怪的问题。我尝试在字符串两边使用匹配的双引号,如以下最小示例所示:
\documentclass{article}
\usepackage{listings}
\lstset{
language=Java,
tabsize=2,
numbers=left,
basicstyle=\footnotesize
}
\begin{document}
\begin{lstlisting}
void my_method() {
int test = 0;
some_method(``string");
boolean b = false;
some_method(``string");
}
\end{lstlisting}
\end{document}
首先,反引号是单独呈现的,而不是像我想要的那样呈现为漂亮的左双引号。而且,更大的问题是,插入反引号后,它开始显示两个字符串之间的所有空格,即使我在设置中添加了 showspaces=false,也是如此,如以下屏幕截图所示:
我发现了很多关于如何使用直双引号的方法,但我实际上想要的是弯引号。有人知道如何正确插入左引号吗?
答案1
您可以使用 literate 获取左花括号,但恕我直言,您必须禁用字符串分隔符以避免显示空格。
\documentclass{article}
\usepackage{listings}
\lstset{
language=Java,
tabsize=2,
numbers=left,
basicstyle=\footnotesize,
literate={``}{\textquotedblleft}1,
deletestring=[b]",
,
}
\begin{document}
\begin{lstlisting}
void my_method() {
int test = 0;
some_method(``string");
boolean b = false;
some_method(``string");
}
\end{lstlisting}
\end{document}
答案2
listings
逐个字符地扫描,因此你必须教它在特殊情况下不要这样做:
\documentclass{article}
\usepackage{listings}
\lstset{
language=Java,
tabsize=2,
numbers=left,
basicstyle=\footnotesize,
literate=
{``}{\odblq}{1}
{''}{\cdblq}{1},
}
\newcommand{\odblq}{``}
\newcommand{\cdblq}{''}
\begin{document}
\begin{lstlisting}
void my_method() {
int test = 0;
some_method(``string'');
boolean b = false;
some_method(``string'');
}
\end{lstlisting}
\end{document}
用于结束引号可避免被视为分隔符的''
问题。"
然而,这可能会让你的读者感到困惑,他们可能会认为他们的代码需要反向引号。
另一种方法是使用 UTF-8
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{listings}
\lstset{
language=Java,
tabsize=2,
numbers=left,
basicstyle=\footnotesize,
literate=
{“}{\odblq}{1}
{”}{\cdblq}{1},
}
\newcommand{\odblq}{``}
\newcommand{\cdblq}{''}
\begin{document}
\begin{lstlisting}
void my_method() {
int test = 0;
some_method(“string”);
boolean b = false;
some_method(“string”);
}
\end{lstlisting}
\end{document}