2009-01-11 5 views
18

J'utilise le package "listings" de LaTeX pour mettre en forme le code source. Malheureusement, je reçois des guillemets au lieu de guillemets. Depuis les citations frisées ne pointent pas toujours dans la bonne direction, il semble mauvais. Comment puis-je obtenir des guillemets à la place?Comment afficher des guillemets au lieu de guillemets lorsque vous utilisez le paquet 'listings' de LaTeX?

Je préférerais ne pas changer ou filtrer le code source lui-même. Filtrer le code pour qu'il change correctement "to` `ou" 'fonctionnerait, mais c'est plus facile que de le faire avec plusieurs guillemets sur une ligne, ou des guillemets couvrant plusieurs lignes, ou vous pouvez utiliser un symbole ou une foule d'autres choses. « D vraiment à maintenir inchangée la source

Exemple 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} 

Exemple sortie (en utilisant Miktex sur les fenêtres): Image of source code

(Direct link to image of incorrect output)

+0

Il modifie le code source, mais vous pouvez fixer la direction des guillemets en utilisant la touche '' (juste à gauche de votre clé) sur le côté gauche de la citation et '' (sur la clé de citation régulière) sur la droite. – Alex

Répondre

4

Avez-vous envisagé d'utiliser une police monospace (typewriter) pour la liste?L'exemple suivant fonctionne:

\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} 
+1

L'utilisation de \ ttfamily dans le style de base fonctionne très bien pour moi aussi, bien que cela me permette de perdre le style fourni par le paquet listing pour ma langue (comme les mots-clés en gras). Des pensées autres que la redéfinition du style de langue? – jasonb

18

Je vois dans la documentation (qui aurait dû être distribué avec le packge, mais est disponible à http://www.ctan.org/tex-archive/macros/latex/contrib/listings/listings.pdf) pour listings qu'il existe une propriété réglable appelée upquote pour prendre soin de cela.

De la documentation:

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

faire quelque chose comme

\lstset{upquote=true} 

avant begin ing l'environnement de liste, ou

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

Il est également possible que tis la propriété est déjà définie pour vous dans la langue appropriée définition (voir à nouveau la documentation, grande liste de langues prédéfinies à la page 12).

Utilisation:

\lstloadlanguages{<dialects you need>} 

dans l'en-tête. Et puis définissez la langue en utilisant l'une des conventions ci-dessus pour choisir les options.

+0

Cela semblait prometteur, mais malheureusement, cela n'a pas fonctionné quand je l'ai essayé. Les guillemets bouclés apparaissent toujours pour moi sur Linux et Windows avec Miktex de j'ai mis à true. Le définir sur false ne fonctionnait pas non plus. –

+0

C'est ce que je reçois juste pour écrémer les docs. ChrisN semble avoir la bonne propriété, mais je vous encourage à utiliser les langues prédéfinies si cela est approprié. Et, lisez les docs, tout est là. À votre santé. – dmckee

+0

J'utilise le langage prédéfini dans mon travail actuel. J'ai enlevé beaucoup de ce que je fais pour rendre l'exemple minimal. Ce PDF est une bonne ressource, mais en cherchant à travers elle je n'ai toujours pas trouvé la réponse. Merci quand même. –

7

dmckee's answer ci-dessus fonctionne probablement. Si vous laissez tomber votre dernière condition, c.-à-d. Vous permettez des changements au code, alors il y a une solution plus générique, que j'ai tendance à utiliser quand (La) TeX rend un caractère différemment que je le souhaite est d'utiliser la commande \symbol . Je liste ici parce qu'il peut être utile dans d'autres situations:

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

Et votre exemple:

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

Notez les accolades qui prennent soi-disant retour à mode LaTeX (voir escapechars options du paquet.)

+1

Cela a fonctionné pour moi, merci! –

+0

comment le faire fonctionner en texte libre? il n'utilise pas actuellement –

0

Peut-être parce que j'ai installé annonces au début en tant qu'utilisateur LaTeX, mais je suis surpris d'apprendre que, sans les listes de paquets le comportement est différent.

Ma solution était semblable à David Hanak de, mais j'utilisé les symboles pour guillemet comme décrit dans la Cheat Sheet LATEX (http://stdout.org/~winston/latex)

\newcommand{\QQ}[1]{``#1''} 
3

Voici une solution

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

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

I avait le même problème, en utilisant fontspec, et la solution était de pas mis \defaultfontfeatures{Mapping=tex-text}, mais au lieu de définir Mapping=tex-text spécifiquement sur seulement la police principale et sans, et en laissant la police tt o c'est ses propres appareils. :)

Questions connexes