Wie entkommt man einem Anführungszeichen/einer Glyphe?

Wie entkommt man einem Anführungszeichen/einer Glyphe?

Ich habe das gleiche Problem wie indiese Frageaber die Antworten drehen sich nur darum, wie manAnführungszeichen am besten verwenden. Das ist in Ordnung, solange Sie tatsächlich ein Anführungszeichen wollen. Ich habe jedoch ausdrücklichnichtwill es.

Und es gibt einen legitimen Grund: Ich möchte Code anzeigen.Wörtlich. Ohne jegliche Änderung. Also habe ich das in eingefügt \textttoder in einen speziellen Befehl, den ich definiert habe und der genau das auch macht.

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}

Das ergibt folgendes:

Dies ist ein JSON-Snippet: Beispielstring erwähnt“: „ja nein“
ökay“
„huch“
öhno“

Das ist offensichtlich schlecht. Natürlich möchte ich keine typografisch korrekten Anführungszeichen verwenden.

Schon versucht:

  • Escape als {"}(verursachte Anzeigefehler und zeigte Fehler in der Konsole an)¹ oder als \"(half nicht).
  • Eigentlich hat das {e}auch examplenicht geklappt.
  • \shorthandoffist eine gute Empfehlungaus der bereits verlinkten Frageund hilft. Wenn Sie es oben auskommentieren, wird es leider immer noch mit dem verstümmelt e: Wir bekommen nichts ökaymehr, aber wir bekommen ëxample.
  • Diese Antworthat mich darauf hingewiesen \verb. Das funktioniert zwar, aber a) kann ich es nicht mehr einfügen \texttt, da es das ablehnt, und schlimmer noch, b) es verhindert jegliche Zeilenumbrüche am Zeilenende.
    Bearbeiten:Es wird versehentlich bereits eine Schreibmaschinenschriftart (gleiche Breite) verwendet, was ich in diesem Fall möchte, in anderen Anwendungsfällen jedoch möglicherweise nicht erwünscht ist.

¹ Tatsächlich scheint es einen Zeilenumbruch zu erzwingen und zeigte Folgendes:

Das Argument \language@active@arg" hat ein zusätzliches }.

Ich möchte im Grunde nur ein Markdown-ähnliches Verhalten von `.

Mit anderen Worten: Wie kann ichWirklichFlucht "in LaTeX?

TexLive 2019

Antwort1

Sie können Abkürzungen lokal mit folgendem deaktivieren \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}

Bildbeschreibung hier eingeben

Antwort2

Verwenden Sie eine indirekte Methode, die die Bedeutung des aktiven Elements ändert ", wenn es aktiv ist. Andernfalls führt der Code nichts Schädliches aus.

\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}

Bildbeschreibung hier eingeben

Antwort3

Auch wenn sich die Frage auf das "Zeichen konzentriert, scheint es in Wirklichkeit darum zu gehen, wie Inline-Code im Wortlaut (JSON) angezeigt wird.

Die Standardmethode zum Einfügen von wörtlichem Inline-Text ist die Verwendung von \verb, wie

In our \textsc{json} we do this with \verb|"otter": 5|.

Bei wörtlichen Zeichen werden die Zeichen so wie sie sind angezeigt. Das schließt Leerzeichen ein, was bedeutet, dass es keine Zeilenumbrüche gibt. (Außerdem sind diese wörtlichen Leerzeichen nicht so dehnbar wie normale Leerzeichen.)

Eine andere Möglichkeit, Code einzubinden, besteht in der Verwendung von Paketen, die dafür vorgesehen sind, wie listingsz. B. . Dieses Paket enthält Befehle zum Anzeigen von Codelisten, die in der TeX-Datei enthalten sind oder aus einer externen Datei stammen, sowie für kurzen Inline-Code, wie diesen:

\documentclass{article}
\usepackage{listings}
\lstset{
  basicstyle=\ttfamily\small,
}
  
\begin{document}
In our \textsc{json} we do this with \lstinline|"otter": 5|.
\end{document}

(Natürlich ist die Basicstyle-Einstellung hier nur ein Beispiel.)

Sowohl hier als auch für kann \verbdas Trennzeichen |ein anderes Zeichen sein. Einige beliebte Optionen sind /, +und !, je nachdem, was im Text steht.

Ein wichtiges Feature eines Pakets wie listingsist die Hervorhebung von Code. Es kennt jedoch nicht die JSON-Syntax von Haus aus. Wenn Sie daran interessiert sind, dies anzupassen (auch wenn es in der Frage nicht erwähnt wurde), können Sie beispielsweise Folgendes sehen:DasUndDasFrage.

Um es noch wichtiger zu machen: Es gibt eine Option, die Zeilenumbrüche zulässt. Fügen Sie einfach hinzu:

  breaklines=true,

zu den \lstsetEinstellungen.

"Wenn Sie wie oben beschrieben eine normale Schreibmaschinenschrift verwenden, müssen Sie für das gerade Zeichen nichts weiter tun . Sie werden jedoch feststellen, dass das gerade 'Zeichen immer noch als Anführungszeichen angezeigt wird! Es gibt ein Paket, um dies im wörtlichen Text zu vermeiden. Fügen Sie hinzu:

\usepackage{upquote}

verwandte Informationen