我有同样的问题这个问题,但答案只是围绕着如何最好使用引号。只要你确实想要引号,这就可以了。但是,我明确地不想要它。
并且有一个合法的理由:我想显示代码。逐字。没有任何变化。所以我把它放在了 中\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}