¿Cómo puedo obtener comillas dobles rectas en los listados?

¿Cómo puedo obtener comillas dobles rectas en los listados?

Mi pregunta está relacionada con los dos siguientes.

pero estoy preguntando específicamente sobre los caracteres entre comillas dobles (código decimal ASCII 34). Aparecen rizados en mis listados. ¿Cómo puedo obtener comillas dobles rectas?

MWE:

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

produce

Salida del MWE proporcionado; contiene comillas rizadas de cierre

Entiendo que el upquotepaquete sólo se aplica a comillas simples. ¿Cómo puedo hacer que se aplique también a las comillas dobles?

Respuesta1

Simplemente agréguelo \usepackage[T1]{fontenc}a su preámbulo. Tenga en cuenta que no necesita el upquotepaquete si carga textcompy configura la clave listings' upquoteen true.

ingrese la descripción de la imagen aquí

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

Respuesta2

Para mí, las soluciones anteriores no funcionaron.

El problema principal se puede ver en listings.stylas líneas 922-943, donde se crea una tabla de despacho para el manejo de caracteres especiales, pero la comilla ascendente solo se realiza para comillas simples.

Se puede solucionar este problema agregando lo siguiente a su preámbulo:

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

qué mono parchea esa mesa.

Advertencia emptor: este es un truco terrible que se basa en modificar macros internas del paquete de listados. Esto puede fallar arbitraria y completamente e incluso puede no funcionar en su distribución TeX.

Respuesta3

Si está utilizando XeLaTeX y desea cambiar la fuente (por ejemplo, usar la fuente predeterminada de la máquina de escribir), use el fontspecpaquete para desactivar las ligaduras TeX, de la siguiente manera:

% !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}

Respuesta4

Una posible razón por la que las comillas dobles aparecen rizadas es el uso de ligaduras TeX; esto ya se menciona enLa respuesta de AthanasiusOfAlex. Como descubrí, una forma en que estas ligaduras pueden habilitarse (a menudo sin darse cuenta) es mediante el uso de una línea como

\defaultfontfeatures{Ligatures=TeX}

Esta línea garantiza que las ligaduras TeX estén habilitadas paratodofuentes, incluidas las fuentes monoespaciadas definidas posteriormente mediante \setmonofont. Esto luego conduce a comillas en los listados que no se pudieron resolver con ninguna de las otras respuestas.

Si tienes esa línea, deshazte de ella. El fontspecpaquete ya habilita ligaduras TeX de forma predeterminada para los comandos \setmainfonty \setsansfont, que probablemente corresponden a las fuentes dondehacerQuiero las ligaduras. (Esto se menciona en la Parte II, Sección 1 de ladocumentación del paquete.)

Si luego desea escribir un guión largo (por ejemplo) en la lista de códigos, simplemente use el símbolo Unicode real ( ) en lugar de escribir tres guiones ---.

información relacionada