我的问题与以下两个有关
但我特别想问的是双引号字符(ASCII 十进制代码 34)。它们在我的列表中显示为弯曲的。我怎样才能改为使用直双引号?
梅威瑟:
\documentclass{article}
\usepackage{textcomp,upquote,listings}
\lstset{upquote=true}
\begin{document}
\begin{lstlisting}
echo "Hello, world!"
\end{lstlisting}
\end{document}
生产
我了解该upquote
包仅适用于单引号。我怎样才能让它也适用于双引号?
答案1
只需添加到您的序言中即可。请注意,如果您加载并将' key 设置为 ,\usepackage[T1]{fontenc}
则不需要该包。upquote
textcomp
listings
upquote
true
\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 符号 ( —
),而不是输入三个连字符---
。