如何在列表中获得直双引号?

如何在列表中获得直双引号?

我的问题与以下两个有关

但我特别想问的是双引号字符(ASCII 十进制代码 34)。它们在我的列表中显示为弯曲的。我怎样才能改为使用直双引号?

梅威瑟:

\documentclass{article}
\usepackage{textcomp,upquote,listings}
\lstset{upquote=true}
\begin{document}
\begin{lstlisting}
echo "Hello, world!"
\end{lstlisting}
\end{document}

生产

提供的 MWE 的输出;包含右花引号

我了解该upquote包仅适用于单引号。我怎样才能让它也适用于双引号?

答案1

只需添加到您的序言中即可。请注意,如果您加载并将' key 设置为 ,\usepackage[T1]{fontenc}则不需要该包。upquotetextcomplistingsupquotetrue

在此处输入图片描述

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{listings}
\lstset{upquote=true}
\begin{document}
\begin{lstlisting}
echo "Hello, world!"
\end{lstlisting}
\end{document}

答案2

对我来说,上述解决方案不起作用。

主要问题出现在listings.sty第 922-943 行,其中创建了处理特殊字符的调度表,但 upquote 仅针对单引号进行。

您可以通过在序言中添加以下内容来解决这个问题:

\usepackage{listings}
\lstset{upquote=true}
% ...
\makeatletter
\lst@CCPutMacro
    \lst@ProcessOther {"22}{\lst@ifupquote \textquotedbl
                                     \else \char34\relax \fi}
    \@empty\z@\@empty
\makeatother
% ...

对该表进行 monkey-patches 修补。

买者自负:这是一个糟糕的黑客行为,它依赖于修改 listings 包的内部宏。这可能会任意彻底破坏,甚至可能无法在您的 TeX 发行版上运行。

答案3

如果您正在使用 XeLaTeX 并且想要更改字体(例如,使用默认的打字机字体),请使用该fontspec包关闭 TeX 连字,如下所示:

% !TEX TS-program = xelatex
% !TEX encoding = UTF-8 Unicode
\documentclass{article}

\usepackage{fontspec}
\usepackage{listings}

\lstset{basicstyle=\ttfamily\addfontfeature{Mapping=no-mapping-ligtex}}

\begin{document}

\begin{lstlisting}
echo "Hello, world!"
\end{lstlisting}

\end{document}

答案4

双引号显示为花括号的一个可能原因是使用了 TeX 连字符 — — 这已经在AthanasiusOfAlex 的回答我发现,启用这些连字符的一种方式(通常是无意中)是通过使用如下的行

\defaultfontfeatures{Ligatures=TeX}

此行确保 TeX 连字已启用全部字体,包括随后使用 定义的任何等宽字体\setmonofont。这会导致列表中出现花括号,而使用任何其他答案都无法解决该问题。

如果你有这样的一行,请删除它。该fontspec软件包已经默认为\setmainfont\setsansfont命令启用了 TeX 连字,这可能与你使用的字体相对应想要连字符。(这在第二部分第一节中提到过包装文档

例如,如果您想在代码清单中输入一个破折号,只需使用实际的 Unicode 符号 ( ),而不是输入三个连字符---

相关内容