私も同じ問題を抱えていますこの質問しかし、答えはただ、引用符を使用するのがベスト引用符が必要なのであれば、これで問題ありません。しかし、私は明示的にしない欲しい。
正当な理由が 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}