24

我正在使用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): 源代码图片

直接链接到错误输出的图像

4

6 回答 6

25

我在文档中看到(应该与 packge 一起分发,但可在http://www.ctan.org/tex-archive/macros/latex/contrib/listings/listings.pdf获得)因为listings有一个调用 settable 属性upquote来处理这个问题。

从文档中:

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}

begining list 环境之前,或使用

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

也有可能在适当的语言定义中已经为您设置了 tis 属性(再次参见文档,第 12 页的预定义语言的大列表)。

采用:

\lstloadlanguages{<dialects you need>}

在标题中。然后使用上述任一约定来设置语言以选择选项。

于 2009-01-11T04:50:02.950 回答
10

dmckee上面的回答可能有效。如果您放弃最后一个条件,即您允许更改代码,那么有一个更通用的解决方案,每当 (La)TeX 以某种方式渲染一个字符时,我倾向于使用该解决方案,而不是使用\symbol命令。我在这里列出它是因为它在其他情况下也很有用:

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

然后你的例子:

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

请注意花括号,它可能会将列表带回 LaTeX 模式(请参阅escapechars包的选项。)

于 2009-01-11T08:26:02.123 回答
9

您是否考虑过在列表中使用等宽(打字机)字体?以下示例有效:

\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}
于 2009-01-11T13:28:42.420 回答
8

这是一个解决方案

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

% in the listings package configuration, try:  
literate={"}{\textquotedbl}1,  
于 2010-07-28T18:32:52.533 回答
6

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

于 2011-01-13T14:32:49.533 回答
1

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

我的解决方案类似于 David Hanak 的解决方案,但我使用了 LaTeX 备忘单 ( http://stdout.org/~winston/latex )中描述的双引号符号

\newcommand{\QQ}[1]{``#1''}
于 2009-11-07T03:37:11.910 回答