我的問題與以下兩個相關
但我特別詢問雙引號字元(ASCII 十進位代碼 34)。它們在我的清單中看起來是捲曲的。我怎麼才能得到直雙引號?
微量元素:
\documentclass{article}
\usepackage{textcomp,upquote,listings}
\lstset{upquote=true}
\begin{document}
\begin{lstlisting}
echo "Hello, world!"
\end{lstlisting}
\end{document}
產生
據我所知,該upquote
包僅適用於單引號。我怎麼能讓它也適用於雙引號?
答案1
只需添加\usepackage[T1]{fontenc}
到您的序言中即可。請注意,upquote
如果載入textcomp
並將listings
' upquote
key 設為 ,則不需要該套件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 符號 ( —
) 而不是鍵入三個連字元---
。