tengo el mismo problema que enesta pregunta, pero las respuestas simplemente giran en torno a cómomejor uso de comillas. Esto está bien siempre y cuando realmente quieras poner comillas. Sin embargo, explícitamentenolo quiero.
Y hay una razón legítima: quiero mostrar el código.Literal. Sin ningún cambio. Así que lo puse en \texttt
, o en un comando especial que he definido y que también hace esto.
MWE:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
% you may add magic here to make it ignore/escape any special characters
\newcommand{\inlinecode}{\texttt}
% disable " making strange characters, it breaks our code quotations
% \shorthandoff{"} % does not fully work (see below)
\title{shorthandoff}
\date{August 2020}
\begin{document}
\maketitle
\section{Introduction}
This is a JSON snippet:
\inlinecode{"example\_string\_mentioned": "yes\_no"} \\
\inlinecode{"okay"} \\
\inlinecode{"yikes"}\\
\inlinecode{"ohno"}\\
\end{document}
Esto da como resultado esto:
Este es un fragmento de código JSON: "cadena de ejemplo mencionada": "yes no"
ökay"
"yikes"
öhno"
Obviamente esto es malo. Obviamente no quiero utilizar comillas tipográficamente correctas.
Ya probado:
- Escape como
{"}
(causó errores de visualización y mostró errores en la consola)¹ o como\"
(no ayudó). - En realidad, escapar del
{e}
interiorexample
tampoco funcionó. \shorthandoff
es una buena recomendacionde la pregunta ya vinculaday ayuda. Desafortunadamente, si lo descomentas arriba, todavía se altera con el mensajee
: Ya no entendemosökay
, pero sí entendemosëxample
.- esta respuestame señaló
\verb
. Si bien esto funciona, esto significaque a) ya no puedo insertarloevita cualquier salto de línea al final de la línea.\texttt
, lo rechaza y, peor aún, b)
Editar:Accidentalmente ya utiliza una fuente de máquina de escribir (del mismo ancho), lo que quiero en este caso, pero que puede que no sea deseable en otros casos de uso.
¹ En realidad, parece forzar un salto de línea y mostró esto:
El argumento de \language@active@arg" tiene un }.
Básicamente solo quiero un comportamiento similar al de Markdown del archivo `.
En otras palabras: ¿Cómo puedoen realidad¿Escapar "
en LaTeX?
TexLive 2019
Respuesta1
Puede desactivar las taquigrafías localmente con \languageshorthands{none}
:
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\newcommand{\inlinecode}[1]{{\languageshorthands{none}\ttfamily #1}}
\begin{document}
This is a JSON snippet:
\inlinecode{"example\_string\_mentioned": "yes\_no"} \\
\inlinecode{"okay"} \\
\inlinecode{"yikes"}\\
\inlinecode{"ohno"}
\end{document}
Respuesta2
Utilice un método indirecto que cambie el significado de active "
, si está activo; si no, el código no hace nada dañino.
\documentclass{article}
\usepackage[ngerman]{babel}
\newcommand{\inlinecode}{}% just to warn if it is already defined
\DeclareRobustCommand{\inlinecode}{%
% don't propagate this outside the argument
\begingroup
% define the active quote to yield a normal "
\begingroup\lccode`~=`" \lowercase{\endgroup\edef~}{\string"}%
% call an auxiliary command to do the typesetting and close the group
\doinlinecode
}
\newcommand{\doinlinecode}[1]{\texttt{#1}\endgroup}
% disable " making strange characters, it breaks our code quotations
% \shorthandoff{"} % does not fully work (see below)
\title{shorthandoff}
\date{August 2020}
\begin{document}
\maketitle
\section{Introduction}
This is a JSON snippet:
\inlinecode{"example\_string\_mentioned": "yes\_no"} \\
\inlinecode{"okay"} \\
\inlinecode{"yikes"}\\
\inlinecode{"ohno"}
\end{document}
Respuesta3
Aunque la pregunta se centra en el "
carácter, parece que en realidad se trata de cómo mostrar código textual en línea (JSON).
La forma estándar de incluir texto textual en línea es con \verb
, como
In our \textsc{json} we do this with \verb|"otter": 5|.
Con los personajes textuales se muestran como ellos mismos. Eso incluye espacios, lo que significa que no hay saltos de línea. (Además, estos espacios textuales no son elásticos como lo son los espacios normales).
Otra forma de incluir código es utilizar paquetes diseñados para eso, como listings
. Ese paquete incluye comandos para mostrar listados de códigos proporcionados en el archivo TeX o tomados de un archivo externo, y también para código corto en línea, como este:
\documentclass{article}
\usepackage{listings}
\lstset{
basicstyle=\ttfamily\small,
}
\begin{document}
In our \textsc{json} we do this with \lstinline|"otter": 5|.
\end{document}
(Por supuesto, la configuración de estilo básico aquí es sólo un ejemplo).
Tanto aquí como para \verb
el carácter delimitador |
puede haber algún otro carácter. Algunas opciones populares son y /
, según el contenido del texto.+
!
Una característica importante de un paquete como listings
es resaltar el código. Sin embargo, no conoce la sintaxis JSON de fábrica. Si está interesado en personalizar eso (aunque no se mencionó en la pregunta), puede ver, por ejemploesteyestepregunta.
Más concretamente aquí, existe una opción para permitir saltos de línea. Solo agrega
breaklines=true,
a la \lstset
configuración.
No hay nada más que deba hacer con el "
carácter recto si usa una fuente de máquina de escribir normal con lo anterior. ¡Pero descubrirás que el '
carácter recto todavía se muestra como una cita rizada! Hay un paquete para evitar eso en texto textual. Agregar:
\usepackage{upquote}