Wie kann ich gerade Anführungszeichen in Auflistungen erhalten?

Wie kann ich gerade Anführungszeichen in Auflistungen erhalten?

Meine Frage bezieht sich auf die folgenden beiden

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

Ausgabe des bereitgestellten MWE; enthält schließende Anführungszeichen

Ich verstehe, dass das upquotePaket 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, upquotewenn Sie den Schlüssel ' laden textcompund auf setzen .listingsupquotetrue

Bildbeschreibung hier eingeben

\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.styden 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), fontspecdeaktivieren 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 fontspecPaket aktiviert bereits standardmäßig TeX-Ligaturen für die Befehle \setmainfontund \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 ---.

verwandte Informationen