Как вы отображаете прямые кавычки вместо фигурных кавычек при использовании пакета "списки" LaTeX?

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

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

Пример 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): Image of source code

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

6 ответов


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

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

Я вижу в документации (которая должна была быть распространена с packge, но доступна по адресу 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}

до begining среды списка, или использовать

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

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

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

\lstloadlanguages{<dialects you need>}

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


ответ dmckee выше, вероятно, работает. Если вы отбросите свое последнее условие, то есть разрешите изменения в коде, тогда есть более общее решение, которое я обычно использую, когда (La)TeX отображает символ как-то иначе, чем я ожидаю, это использовать . Я перечисляю его здесь, потому что он может быть полезен в других ситуациях:

\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 (см. пакета.)


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


вот решение

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

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

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

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

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