Comment échapper un caractère / glyphe guillemet?
J'ai le même problème que dans cette question , mais les réponses tournent simplement autour de la meilleure façon d' utiliser les guillemets . C'est très bien tant que vous voulez réellement un guillemet. Cependant, je n'en veux explicitement pas .
Et il y a une raison légitime: je veux afficher du code. Verbatim . Sans aucun changement. Donc je mets cela dans \texttt, ou dans une commande spéciale que j'ai définie qui fait aussi cela.
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}
Cela revient à ceci:
Ceci est un extrait de code JSON: ë exemple de chaîne mentionnée ":" oui non "
ökay"
"yikes"
öhno "
De toute évidence, c'est mauvais. De toute évidence, je ne souhaite pas utiliser de guillemets typographiquement corrects.
Déjà essayé:
- Escape as
{"}(a provoqué des erreurs d'affichage et affiché des erreurs dans la console) ¹ ou as\"(n'a pas aidé). - En fait échapper à l'
{e}enexample- ne fonctionnait pas non plus . \shorthandoffest une bonne recommandation de la question déjà liée et aide. Malheureusement, si vous le décommentez ci-dessus, il se dégrade toujours avec lee: Nous n'obtenonsökayplus, mais nous obtenonsëxample.- Cette réponse m'a pointé du doigt
\verb. Bien que cela fonctionne, cela signifie queje a) ne peux plus le mettrecela empêche tout saut de ligne à la fin de la ligne.\texttt, cela refuse, et pire, b)
Edit: Il utilise déjà accidentellement une police de machine à écrire (même largeur), ce que je veux dans ce cas, mais qui peut ne pas être souhaité dans d'autres cas d'utilisation.
¹ En fait, il semble forcer un saut de ligne et a montré ceci:
L'argument de \ language @ active @ arg "a un supplément}.
En gros, je veux juste un comportement similaire à Markdown du fichier `.
En d'autres termes: comment m'échapper vraiment" dans LaTeX?
TexLive 2019
Réponses
Vous pouvez désactiver les raccourcis localement avec \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}
Utilisez une méthode indirecte qui change la signification de l'actif ", s'il est actif; sinon, le code ne fait rien de nocif.
\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}
Même si la question se concentre sur le "caractère, elle semble vraiment concerner la façon d'afficher du code verbatim en ligne (JSON).
La manière standard d'inclure du texte textuel en ligne est avec \verb, comme
In our \textsc{json} we do this with \verb|"otter": 5|.
Les caractères textuels sont affichés comme eux-mêmes. Cela inclut les espaces, ce qui signifie qu'il n'y a pas de sauts de ligne. (De plus, ces espaces textuels ne sont pas extensibles comme le sont les espaces normaux.)
Une autre façon d'inclure du code consiste à utiliser des packages destinés à cela, comme listings. Ce package comprend des commandes pour afficher les listes de codes données dans le fichier TeX ou extraites d'un fichier externe, ainsi que pour le code en ligne court, comme ceci:
\documentclass{article}
\usepackage{listings}
\lstset{
basicstyle=\ttfamily\small,
}
\begin{document}
In our \textsc{json} we do this with \lstinline|"otter": 5|.
\end{document}
(Bien sûr, le paramètre de style de base ici n'est qu'un exemple.)
Ici et pour \verble |caractère de délimitation , il peut y avoir un autre caractère. Certains choix populaires sont /, +et !, en fonction de ce qui est dans le texte.
Une grande caractéristique d'un package comme la listingsmise en évidence du code. Cependant, il ne connaît pas la syntaxe JSON par défaut. Si vous souhaitez personnaliser cela (même si cela n'a pas été mentionné dans la question), vous pouvez voir par exemple ceci et cette question.
Plus précisément ici, il existe une option pour autoriser les sauts de ligne. Ajoutez simplement
breaklines=true,
aux \lstsetparamètres.
Il n'y a rien de plus à faire pour le "caractère droit si vous utilisez une police de machine à écrire normale avec ce qui précède. Mais vous constaterez que le 'caractère droit est toujours affiché comme une citation bouclée! Il existe un package pour éviter cela dans un texte textuel. Ajouter:
\usepackage{upquote}