如何转义引号字符/字形?

如何转义引号字符/字形?

我有同样的问题这个问题,但答案只是围绕着如何最好使用引号。只要你确实想要引号,这就可以了。但是,我明确地想要它。

并且有一个合法的理由:我想显示代码。逐字。没有任何变化。所以我把它放在了 中\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“

显然这很糟糕。显然我不想使用印刷正确的引号。

已经尝试过:

  • {"}以(导致显示错误并在控制台中显示错误)¹ 或\"(没有帮助)的形式退出。
  • {e}实际上逃脱example也没有用。
  • \shorthandoff是一个很好的建议来自已经链接的问题并有帮助。不幸的是,如果您取消上面的注释,它仍然会破坏e:我们不再得到ökay,但我们确实得到了ëxample
  • 这个答案指出我\verb。虽然这有效,但这意味着a) 我无法再将其放入\texttt,它拒绝这样做,更糟糕的是,b)它会阻止在行尾处进行任何换行。
    编辑:它意外地已经使用了打字机(相同宽度)字体,在这种情况下这是我想要的,但在其他用例中可能并不想要。

¹实际上,它似乎强制换行并显示以下内容:

\language@active@arg" 的参数有一个额外的}。

我基本上只是想要类似 Markdown 的“。”行为。

换句话说:我该如何真的在 LaTeX 中逃脱"

2019年TexLive展会

答案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 处于活动状态,则使用间接方法改变其含义";如果不是,则代码不会执行任何有害操作。

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

相关内容