Meine Frage bezieht sich auf die folgenden beiden
- So verwenden Sie gerade einfache Anführungszeichen in Listenlisten
- Wie erzwinge ich im geprägten Paket einfache Anführungszeichen?
aber ich frage speziell nach Anführungszeichen (ASCII-Dezimalcode 34). Sie erscheinen in meinen Auflistungen in Schnörkeln. Wie kann ich stattdessen gerade Anführungszeichen erhalten?
MWE:
\documentclass{article}
\usepackage{textcomp,upquote,listings}
\lstset{upquote=true}
\begin{document}
\begin{lstlisting}
echo "Hello, world!"
\end{lstlisting}
\end{document}
produziert
Ich verstehe, dass das upquote
Paket nur für einfache Anführungszeichen gilt. Wie kann ich es auch für doppelte Anführungszeichen gelten lassen?
Antwort1
Fügen Sie es einfach \usepackage[T1]{fontenc}
zu Ihrer Präambel hinzu. Beachten Sie, dass Sie das Paket nicht benötigen, upquote
wenn Sie den Schlüssel ' laden textcomp
und auf setzen .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}
Antwort2
Bei mir haben die oben genannten Lösungen nicht funktioniert.
Das Hauptproblem ist in listings.sty
den Zeilen 922-943 zu sehen, wo eine Dispatch-Tabelle zur Handhabung von Sonderzeichen erstellt wird, das Upquote jedoch nur für einfache Anführungszeichen durchgeführt wird.
Dies kann behoben werden, indem Sie Ihrer Präambel Folgendes hinzufügen:
\usepackage{listings}
\lstset{upquote=true}
% ...
\makeatletter
\lst@CCPutMacro
\lst@ProcessOther {"22}{\lst@ifupquote \textquotedbl
\else \char34\relax \fi}
\@empty\z@\@empty
\makeatother
% ...
welches diese Tabelle mit Monkey Patches repariert.
Vorbehaltlicher Käufer: Dies ist ein schrecklicher Hack, der auf der Änderung interner Makros des Listings-Pakets beruht. Dies kann willkürlich und vollständig abbrechen und funktioniert möglicherweise nicht einmal auf Ihrer TeX-Distribution.
Antwort3
Wenn Sie XeLaTeX verwenden und die Schriftart ändern möchten (zum Beispiel um die Standardschriftart für Schreibmaschinen zu verwenden), fontspec
deaktivieren Sie TeX-Ligaturen mit dem Paket wie folgt:
% !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}
Antwort4
Ein möglicher Grund für die Darstellung von doppelten Anführungszeichen ist die Verwendung von TeX-Ligaturen — dies wurde bereits erwähnt inAntwort von AthanasiusOfAlex. Wie ich herausgefunden habe, können diese Ligaturen (oft unbeabsichtigt) durch die Verwendung einer Zeile wie
\defaultfontfeatures{Ligatures=TeX}
Diese Zeile stellt sicher, dass TeX-Ligaturen aktiviert sind füralleSchriftarten, einschließlich aller Monospace-Schriftarten, die anschließend mit definiert werden \setmonofont
. Dies führt dann zu Anführungszeichen in Auflistungen, die mit keiner der anderen Antworten gelöst werden konnten.
Wenn Sie eine solche Zeile haben, entfernen Sie sie. Das fontspec
Paket aktiviert bereits standardmäßig TeX-Ligaturen für die Befehle \setmainfont
und \setsansfont
, die wahrscheinlich den Schriftarten entsprechen, in denen SieTunwollen die Ligaturen. (Dies wird in Teil II, Abschnitt 1 derPaketdokumentation.)
Wenn Sie dann beispielsweise einen Geviertstrich in die Codeliste eingeben möchten, verwenden Sie dafür einfach das tatsächliche Unicode-Symbol ( —
), anstatt drei Bindestriche einzugeben ---
.