Как отображать прямые кавычки вместо фигурных кавычек при использовании пакета LaTeX «списки»? - PullRequest
20 голосов
/ 11 января 2009

Я использую пакет LaTeX" lists " для форматирования исходного кода. К сожалению, я получаю фигурные кавычки вместо прямых кавычек. Поскольку фигурные кавычки не всегда указывают в правильном направлении, это выглядит плохо. Как я могу получить прямые кавычки вместо этого?

Я бы предпочел не изменять или фильтровать сам исходный код. Фильтрация кода для правильного изменения "на" или "будет работать, но это легче сделать, чем сказать с несколькими кавычками в строке или кавычками, охватывающими несколько строк. Или вы можете использовать символ или множество других вещей. очень хотелось бы сохранить исходный код без изменений.

Пример 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}

Пример вывода (с использованием Miktex на окнах): Image of source code

( Прямая ссылка на изображение с неверным выводом )

Ответы [ 6 ]

21 голосов
/ 11 января 2009

Я вижу в документации (которая должна была распространяться вместе с пакетом, но доступна по адресу http://www.ctan.org/tex-archive/macros/latex/contrib/listings/listings.pdf) для listings, что существует настраиваемое свойство с именем 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}

перед begin в среде списка или используйте

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

Также возможно, что это свойство уже установлено для вас на соответствующем языке. определение (см. снова документы, большой список предопределенных языков на стр. 12).

Использование:

\lstloadlanguages{<dialects you need>}

в шапке. А затем установите язык, используя одно из приведенных выше соглашений для выбора параметров.

8 голосов
/ 11 января 2009

Ответ 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 пакета.)

6 голосов
/ 13 января 2011

У меня была та же проблема, с использованием fontspec, и решение было не установить \defaultfontfeatures{Mapping=tex-text}, а вместо этого установить Mapping=tex-text специально только для основного шрифта и шрифта sans, и оставить шрифт tt в это собственные устройства. :)

6 голосов
/ 28 июля 2010

Вот решение

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

% in the listings package configuration, try:  
literate={"}{\textquotedbl}1,  
6 голосов
/ 11 января 2009

Рассматривали ли вы использование моноширинного (пишущая машинка) шрифта для листинга? Следующий пример работает:

\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 голос
/ 07 ноября 2009

Может быть, это потому, что я установил листинги в раннем возрасте, как пользователь LaTeX, но я удивлен, узнав, что без пакета листингов поведение будет другим.

Мое решение было похоже на решение Дэвида Ханака, но я использовал символы для двойных кавычек, как описано в Шпаргалке LaTeX (http://stdout.org/~winston/latex)

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