引用符文字/グリフをエスケープするにはどうすればよいですか?

引用符文字/グリフをエスケープするにはどうすればよいですか?

私も同じ問題を抱えていますこの質問しかし、答えはただ、引用符を使用するのがベスト引用符が必要なのであれば、これで問題ありません。しかし、私は明示的にしない欲しい。

正当な理由が 1 つあります。コードを表示したいのです。逐語的\texttt. 変更なし。そのため、これを 、または私が定義した特別なコマンドに挿入して、これを実行します。

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}

結果は次のようになります:

これは JSON スニペットです: ëexample string mentioned": "yes no"
ökay"
"yikes"
öhno"

明らかにこれは良くありません。明らかに私は印刷上正しい引用符を使いたくありません。

すでに試しました:

  • としてエスケープします{"}(表示エラーが発生し、コンソールにエラーが表示されます)¹ または としてエスケープします\"(役に立ちません)。
  • 実際に脱出を試みた{e}example、これもうまくいかなかった。
  • \shorthandoff良い推薦ですすでにリンクされている質問から役立ちます。残念ながら、上記のコメントを解除すると、 がまだ壊れてしまいますe。 はもう取得できませんökayが、 は取得できますëxample
  • この答えを指摘しました\verb。これは機能しますが、a) これ以上挿入でき\textttず、拒否され、さらに悪いことに、b)行末での改行ができなくなります。
    編集:誤ってタイプライター(等幅)フォントが既に使用されていますが、この場合はそれが必要なのですが、他の使用例では望ましくない可能性があります。

¹ 実際には、強制的に改行が行われ、次のように表示されます。

\language@active@arg" の引数に余分な } があります。

基本的に、` の Markdown のような動作が欲しいだけです

言い換えれば、どうすれば本当に"LaTeX でエスケープするには?

テックスライブ2019

答え1

ローカルでショートカットを無効にするには、次のようにします\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}

ここに画像の説明を入力してください

答え2

アクティブな場合は、アクティブな意味を変更する間接的な方法を使用します。"そうでない場合は、コードは何も害を及ぼしません。

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

ここに画像の説明を入力してください

答え3

質問は"文字に焦点を当てていますが、実際にはインライン逐語的 (JSON) コードを表示する方法に関するようです。

インラインの逐語的テキストを含める標準的な方法は\verb、次のようにします。

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

verbatim では、文字はそのまま表示されます。これにはスペースも含まれるため、改行はありません。(また、これらの verbatim スペースは、通常のスペースのように伸縮しません。)

コードを組み込む別の方法は、 のような、そのためのパッケージを使用することですlistings。このパッケージには、TeX ファイルで指定されたコード リストや外部ファイルから取得したコード リストを表示するためのコマンドや、次のような短いインライン コードを表示するためのコマンドが含まれています。

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

(もちろん、ここでの basicstyle 設定は単なる例です。)

ここでも の\verb区切り|文字には、他の文字を使用できます。テキストの内容に応じて/+、 、 などが一般的な選択肢になります。!

パッケージの大きな特徴の1つは、listingsコードのハイライト表示です。ただし、JSON構文についてはそのままではわかりません。カスタマイズに興味がある場合は(質問では言及されていませんが)、たとえば以下を参照してください。これそしてこれ質問。

ここでさらに重要なことは、改行を許可するオプションがあることです。

  breaklines=true,

設定に\lstset

上記の通常のタイプライター フォントを使用する場合、直線文字に対して特別な操作を行う必要はありません"。ただし、直線文字がまだカーリー引用符として表示されることに気付くでしょう'。逐語テキストでこれを回避するパッケージがあります。以下を追加します。

\usepackage{upquote}

関連情報