¿Cómo escapar de un carácter/glifo de comillas?

¿Cómo escapar de un carácter/glifo de comillas?

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}interior exampletampoco funcionó.
  • \shorthandoffes una buena recomendacionde la pregunta ya vinculaday ayuda. Desafortunadamente, si lo descomentas arriba, todavía se altera con el mensaje e: Ya no entendemos ökay, pero sí entendemos ëxample.
  • esta respuestame señaló \verb. Si bien esto funciona, esto significa que a) ya no puedo insertarlo \texttt, lo rechaza y, peor aún, b) evita cualquier salto de línea al final de la línea.
    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}

ingrese la descripción de la imagen aquí

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}

ingrese la descripción de la imagen aquí

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 \verbel 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 listingses 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 \lstsetconfiguració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}

información relacionada