使用LaTeX'listing'包时,如何显示直引号而不是弯引号?

时间:2009-01-11 04:25:29

标签: latex miktex

我正在使用LaTeX的“listings”包来格式化源代码。不幸的是,我得到的是引号而不是直引号。由于卷曲引号并不总是指向正确的方向,因此它看起来很糟糕。我怎样才能得到直引号呢?

我不想更改或过滤源代码本身。过滤代码以正确地改变“to”或“'会起作用,但这比在一行上使用多个引号或跨越多行的引号更容易完成。或者你可以使用符号或许多其他东西。但我我真的想保持源不变。

示例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}

示例输出(在Windows上使用Miktex): Image of source code

Direct link to image of incorrect output

6 个答案:

答案 0 :(得分:20)

我在文档中看到了(应该在http://www.ctan.org/tex-archive/macros/latex/contrib/listings/listings.pdf下分发,但在{{3}}处可用),listings有一个名为 upquote <的可设置属性/ strong>要照顾好这个。

来自文档:

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

执行类似

的操作
\lstset{upquote=true}
begin列表环境之前

,或使用

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

也可能已使用适当的语言为您设置了tis属性 定义(请参阅文档,第12页的预定义语言的大列表)。

使用:

\lstloadlanguages{<dialects you need>}
标题中的

。然后使用上述任一惯例设置语言以选择选项。

答案 1 :(得分:7)

上面的

dmckee's answer可能有效。如果你放弃你的最后一个条件,即你允许更改代码,那么有一个更通用的解决方案,我倾向于使用它(La)TeX渲染一个字符的方式与我预期的不同是使用{{ 1}}命令。我在这里列出它,因为它在其他情况下也很有用:

\symbol

然后你的例子:

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

请注意大括号,这些大括号应该将列表恢复为LaTeX模式(请参阅包的\begin{lstlisting} ... print{\qq}The temperature is{\qq},Celsius,{\qq}degrees Celsius{\qq} ... \end{lstlisting} 选项。)

答案 2 :(得分:5)

您是否考虑过使用等宽(打字机)字体进行商品定位?以下示例有效:

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

答案 3 :(得分:5)

这是一个解决方案

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

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

答案 4 :(得分:5)

我遇到了同样的问题,使用的是fontspec,解决方案是设置\defaultfontfeatures{Mapping=tex-text},而是专门设置Mapping=tex-text仅使用main和sans字体,并且将tt字体留给自己的设备。 :)

答案 5 :(得分:0)

也许是因为我早期作为LaTeX用户安装了列表,但我很惊讶地发现,如果没有列表包,行为会有所不同。

我的解决方案类似于David Hanak,但是我使用了LaTeX备忘单(http://stdout.org/~winston/latex

中描述的双引号符号
\newcommand{\QQ}[1]{``#1''}