如何在清單中獲得直接雙引號?

如何在清單中獲得直接雙引號?

我的問題與以下兩個相關

但我特別詢問雙引號字元(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

只需添加\usepackage[T1]{fontenc}到您的序言中即可。請注意,upquote如果載入textcomp並將listings' upquotekey 設為 ,則不需要該套件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 行中看到,其中建立了處理特殊字元的調度表,但上引號僅針對單引號完成。

可以透過在序言中添加以下內容來解決此問題:

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

哪隻猴子修補了該表。

買者自負:這是一個可怕的駭客行為,它依賴於修改清單包的內部巨集。這可能會任意且完全破壞,甚至可能無法在您的 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 連字,這可能對應於您使用的字體想要連字。 (這在《條例》第二部第 1 節中提到)包文件.)

如果您隨後想要在代碼清單中鍵入長破折號(例如),只需使用實際的 Unicode 符號 ( ) 而不是鍵入三個連字元---

相關內容