如何轉義引號字元/字形?

如何轉義引號字元/字形?

我有同樣的問題這個問題,但答案只是圍繞著如何最好使用引號。只要您確實想要引號就可以。然而,我明確想要它。

有一個合理的理由:我想顯示程式碼。逐字。沒有任何改變。所以我把它放在\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}in example– 也不起作用。
  • \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}

相關內容