25 Stimmen

Wie stellt man gerade Anführungszeichen anstelle von geschweiften Anführungszeichen dar, wenn man das LaTeX-Paket "listings" verwendet?

Ich benutze LaTeX 's " Inserate "Paket, um den Quellcode zu formatieren. Leider erhalte ich geschweifte Anführungszeichen anstelle von geraden Anführungszeichen. Da die geschweiften Anführungszeichen nicht immer in die richtige Richtung zeigen, sieht es schlecht aus. Wie kann ich stattdessen gerade Anführungszeichen erhalten?

Ich würde es vorziehen, den Quellcode selbst nicht zu ändern oder zu filtern. Den Code so zu filtern, dass " in `` oder '' umgewandelt wird, würde funktionieren, aber das ist einfacher als mit mehreren Anführungszeichen in einer Zeile oder Anführungszeichen, die sich über mehrere Zeilen erstrecken, zu sagen. Man könnte auch Symbole oder eine Vielzahl anderer Dinge verwenden. Aber ich würde den Quellcode wirklich gerne unverändert lassen.

Beispiel LaTeX:

\documentclass{article}
\usepackage{listings}
\begin{document}
\begin{lstlisting}
Fahrenheit=input("What is the Fahrenheit temperature?")
Celsius=(5.0/9.0)*(Fahrenheit-32)
print"The temperature is",Celsius,"degrees Celsius"
\end{lstlisting}
\end{document}

Beispielhafte Ausgabe (mit Miktex unter Windows): Image of source code

( Direkter Link zum Bild der fehlerhaften Ausgabe )

27voto

Ich sehe in der Dokumentation (die mit dem Paket hätte verteilt werden sollen, aber verfügbar ist unter http://www.ctan.org/tex-archive/macros/latex/contrib/listings/listings.pdf ) für listings dass es eine einstellbare Eigenschaft namens upquote um sich darum zu kümmern.

Aus der Dokumentation:

upquote=true|false                                                false
  determines whether the left and right quote are printed ‘’ or `'. This 
  key requires the textcomp package if true. 

Machen Sie etwas wie

\lstset{upquote=true}

vor begin in der Listenumgebung, oder verwenden Sie

\begin{lstlisting}[upquote=true]
...
\end{lstlisting}

Es ist auch möglich, dass diese Eigenschaft bereits für Sie in der entsprechenden Sprache eingestellt ist Definition festgelegt ist (siehe wieder die Dokumentation, große Liste der vordefinierten Sprachen auf Seite 12).

Verwendung:

\lstloadlanguages{<dialects you need>}

in der Kopfzeile. Stellen Sie dann die Sprache ein, indem Sie eine der oben genannten Konventionen für die Auswahl der Optionen verwenden.

11voto

ChrisN Punkte 16165

Haben Sie in Erwägung gezogen, eine einzeilige (Schreibmaschinen-)Schrift für den Eintrag zu verwenden? Das folgende Beispiel funktioniert:

\documentclass{article}
\usepackage{listings}
\lstset{basicstyle=\ttfamily} % <<< This line added
\begin{document}
\begin{lstlisting}
Fahrenheit=input("What is the Fahrenheit temperature?")
Celsius=(5.0/9.0)*(Fahrenheit-32)
print"The temperature is",Celsius,"degrees Celsius"
\end{lstlisting}
\end{document}

10voto

David Hanak Punkte 10304

dmckee's Antwort funktioniert wahrscheinlich. Wenn Sie die letzte Bedingung fallen lassen, d.h. Änderungen am Code zulassen, dann gibt es eine allgemeinere Lösung, die ich immer dann verwende, wenn (La)TeX ein Zeichen irgendwie anders darstellt, als ich es erwarte, nämlich die Verwendung der \symbol Befehl. Ich führe ihn hier auf, weil er auch in anderen Situationen nützlich sein kann:

\newcommand{\qq}{\symbol{34}} % 34 is the decimal ascii code for "

Und dann Ihr Beispiel:

\begin{lstlisting}
...
print{\qq}The temperature is{\qq},Celsius,{\qq}degrees Celsius{\qq}
...
\end{lstlisting}

Beachten Sie die geschweiften Klammern, die die Listings in den LaTeX-Modus zurückversetzen sollen (siehe escapechars Option des Pakets).

9voto

Buğra Gedik Punkte 674

Hier ist eine Lösung

\usepackage[T1]{fontenc}  
\usepackage{textcomp}  
\usepackage{lmodern}  

% in the listings package configuration, try:  
literate={"}{\textquotedbl}1,

7voto

Lennart Regebro Punkte 157632

Ich hatte das gleiche Problem, indem ich fontspec verwendete, und die Lösung war pas einstellen. \defaultfontfeatures{Mapping=tex-text} sondern setzen stattdessen Mapping=tex-text und zwar nur für die Haupt- und die Sans-Schrift, während die tt-Schrift sich selbst überlassen wird :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X