Mi pregunta está relacionada con los dos siguientes.
- Cómo tener comillas simples rectas en lstlistings
- En el paquete acuñado, ¿cómo hago cumplir las comillas simples?
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
Entiendo que el upquote
paquete 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 upquote
paquete si carga textcomp
y configura la clave listings
' upquote
en true
.
\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.sty
las 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 fontspec
paquete 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 fontspec
paquete ya habilita ligaduras TeX de forma predeterminada para los comandos \setmainfont
y \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 ---
.