Como posso obter aspas duplas diretas nas listagens?

Como posso obter aspas duplas diretas nas listagens?

Minha pergunta está relacionada aos dois seguintes

mas estou perguntando especificamente sobre aspas duplas (código decimal ASCII 34). Eles aparecem encaracolados em minhas listagens. Como posso obter aspas duplas diretas?

MWE:

\documentclass{article}
\usepackage{textcomp,upquote,listings}
\lstset{upquote=true}
\begin{document}
\begin{lstlisting}
echo "Hello, world!"
\end{lstlisting}
\end{document}

produz

Saída do MWE fornecido; contém aspas curvas de fechamento

Entendo que o upquotepacote se aplica apenas a aspas simples. Como posso aplicá-lo também a aspas duplas?

Responder1

Basta adicionar \usepackage[T1]{fontenc}ao seu preâmbulo. Observe que você não precisa do upquotepacote se carregar textcompe definir listings' upquotekey como true.

insira a descrição da imagem aqui

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{listings}
\lstset{upquote=true}
\begin{document}
\begin{lstlisting}
echo "Hello, world!"
\end{lstlisting}
\end{document}

Responder2

Para mim, as soluções acima não funcionaram.

O principal problema pode ser visto nas listings.stylinhas 922-943, onde é criada uma tabela de despacho para tratamento de caracteres especiais, mas o upquote só é feito para aspas simples.

Pode-se corrigir isso adicionando o seguinte ao seu preâmbulo:

\usepackage{listings}
\lstset{upquote=true}
% ...
\makeatletter
\lst@CCPutMacro
    \lst@ProcessOther {"22}{\lst@ifupquote \textquotedbl
                                     \else \char34\relax \fi}
    \@empty\z@\@empty
\makeatother
% ...

qual macaco corrige aquela tabela.

Emptor de advertência: este é um hack terrível que depende da modificação de macros internas do pacote de listagens. Isso pode falhar de forma arbitrária e completa e pode até não funcionar na sua distribuição TeX.

Responder3

Se você estiver usando XeLaTeX e quiser alterar a fonte (digamos, para usar a fonte padrão da máquina de escrever), use o fontspecpacote para desligar as ligaduras TeX, como segue:

% !TEX TS-program = xelatex
% !TEX encoding = UTF-8 Unicode
\documentclass{article}

\usepackage{fontspec}
\usepackage{listings}

\lstset{basicstyle=\ttfamily\addfontfeature{Mapping=no-mapping-ligtex}}

\begin{document}

\begin{lstlisting}
echo "Hello, world!"
\end{lstlisting}

\end{document}

Responder4

Uma possível razão para as aspas duplas aparecerem como curvas é o uso de ligaduras TeX - isso já foi mencionado emResposta de AthanasiusOfAlex. Como descobri, uma maneira pela qual essas ligaduras podem ser habilitadas (muitas vezes inadvertidamente) é através do uso de uma linha como

\defaultfontfeatures{Ligatures=TeX}

Esta linha garante que as ligaduras TeX estejam habilitadas paratodosfontes, incluindo quaisquer fontes monoespaçadas definidas posteriormente usando \setmonofont. Isso leva a aspas curvas nas listagens que não puderam ser resolvidas usando nenhuma das outras respostas.

Se você tem essa linha, livre-se dela. O fontspecpacote já habilita ligaduras TeX por padrão para os comandos \setmainfonte \setsansfont, que provavelmente correspondem às fontes onde vocêfazerquero as ligaduras. (Isso é mencionado na Parte II, Seção 1 dodocumentação do pacote.)

Se você quiser digitar um travessão (por exemplo) na listagem de código, basta usar o símbolo Unicode real para ele ( ) em vez de digitar três hífens ---.

informação relacionada