我有同樣的問題這個問題,但答案只是圍繞著如何最好使用引號。只要您確實想要引號就可以。然而,我明確不想要它。
有一個合理的理由:我想顯示程式碼。逐字。沒有任何改變。所以我把它放在\texttt
, 或我定義的一個特殊命令中,它也可以做到這一點。
微量元素:
\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 片段:ë提到的範例字串": "yes no"
ökay"
"yikes"
öhno"
顯然這很糟糕。顯然我不想使用印刷正確的引號。
已經嘗試過:
- 轉義為
{"}
(導致顯示錯誤並在控制台中顯示錯誤) 或 as\"
(沒有幫助)。 - 實際上逃避
{e}
inexample
– 也不起作用。 \shorthandoff
是一個很好的推薦從已經連結的問題並提供協助。不幸的是,如果您取消上面的註釋,它仍然會與e
: We do not get moreökay
, but we do get 混淆ëxample
。- 這個答案向我指出
\verb
。雖然這有效,但這意味著我 a) 不能再把它放進去它可以防止行尾出現任何換行符。\texttt
,它拒絕這樣做,更糟的是,b)
編輯:它已經意外地使用了打字機(同寬)字體,在這種情況下我想要這種字體,但在其他用例中可能不需要這種字體。
1 實際上,它似乎強制換行並顯示了以下內容:
\language@active@arg" 的參數有額外的 }。
我基本上只是想要`.
換句話說:我該如何真的在 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
使用間接方法來改變 active 的意思("
如果它是 active 的話);如果沒有,則該程式碼不會產生任何有害影響。
\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|.
逐字顯示字符本身。其中包括空格,這意味著沒有換行符。 (而且這些逐字空間不像普通空間那樣有彈性。)
包含程式碼的另一種方法是使用專用的套件,例如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
分隔|
字元都可以是其他字元。一些流行的選擇是/
、+
和!
,取決於文本中的內容。
像這樣的包的一大功能listings
就是程式碼突出顯示。但它不知道開箱即用的 JSON 語法。如果您有興趣自訂它(即使問題中沒有提到),您可以看到例如這和這問題。
更重要的是,這裡有一個允許換行的選項。只需添加
breaklines=true,
到\lstset
設定。
"
如果您使用上述的普通打字機字體,則無需為直字元執行任何額外操作。但你會發現直'
字仍然顯示為彎引號!有一個包可以避免逐字文本中出現這種情況。添加:
\usepackage{upquote}