Eu tenho o mesmo problema que emessa questão, mas as respostas apenas giram em torno de comomelhor usar aspas. Isso é bom, desde que você realmente queira colocar aspas. No entanto, eu explicitamentenãoeu quero isso.
E há um motivo legítimo: quero exibir o código.Literalmente. Sem qualquer alteração. Então coloquei isso em \texttt
, ou em um comando especial que defini que também faz isso.
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}
Isso resulta nisso:
Este é um snippet JSON: ëexemplo de string mencionada": "yes no"
ökay"
"yikes"
öhno"
Obviamente isso é ruim. Obviamente não quero usar aspas tipograficamente corretas.
Já tentei:
- Escape como
{"}
(causou erros de exibição e mostrou erros no console)¹ ou como\"
(não ajudou). - Na verdade, escapar da
{e}
entradaexample
também não funcionou. \shorthandoff
é uma boa recomendaçãoda pergunta já vinculadae ajuda. Infelizmente, se você descomentar acima, ele ainda fica confuso come
: Nós não conseguimosökay
mais, mas conseguimosëxample
.- Esta respostame indicou
\verb
. Embora funcione, significaque a) não posso mais inseri-loevita quebras de linha no final da linha.\texttt
, ele recusa e, pior, b)
Editar:Ele acidentalmente já usa fonte de máquina de escrever (mesma largura), o que eu quero neste caso, mas que pode não ser desejado em outros casos de uso.
¹ Na verdade, parece forçar uma quebra de linha e mostrou o seguinte:
O argumento de \idioma@ativo@arg" possui um } extra.
Basicamente, eu só quero um comportamento semelhante ao Markdown do arquivo `.
Em outras palavras: como faço pararealmenteescapar "
em LaTeX?
TexLive 2019
Responder1
Você pode desativar os atalhos localmente com \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}
Responder2
Use um método indireto que altere o significado do active "
, se estiver ativo; caso contrário, o código não fará nada prejudicial.
\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}
Responder3
Mesmo que a questão se concentre no "
personagem, parece realmente ser sobre como exibir o código inline literalmente (JSON).
A maneira padrão de incluir texto literal embutido é com \verb
, como
In our \textsc{json} we do this with \verb|"otter": 5|.
Com caracteres literais são mostrados como eles próprios. Isso inclui espaços, o que significa que não há quebras de linha. (Além disso, esses espaços literais não são elásticos como os espaços normais.)
Outra forma de incluir código é usar pacotes destinados a isso, como listings
. Esse pacote inclui comandos para mostrar listagens de código fornecidas no arquivo TeX ou retiradas de um arquivo externo, e também para código in-line curto, como este:
\documentclass{article}
\usepackage{listings}
\lstset{
basicstyle=\ttfamily\small,
}
\begin{document}
In our \textsc{json} we do this with \lstinline|"otter": 5|.
\end{document}
(É claro que a configuração de estilo básico aqui é apenas um exemplo.)
Tanto aqui quanto para \verb
o |
caractere delimitador pode haver algum outro caractere. Algumas escolhas populares são /
, +
e !
, dependendo do que está no texto.
Um grande recurso de um pacote como esse listings
é realçar o código. No entanto, ele não conhece a sintaxe JSON imediatamente. Se você estiver interessado em customizar isso (mesmo que não tenha sido mencionado na pergunta), você pode ver, por exemploesseeessepergunta.
Mais especificamente aqui, existe uma opção para permitir quebras de linha. Basta adicionar
breaklines=true,
para as \lstset
configurações.
Não há nada extra que você precise fazer para o "
caractere simples se usar uma fonte normal de máquina de escrever com o acima. Mas você descobrirá que o '
caractere reto ainda é mostrado como uma aspa curva! Existe um pacote para evitar isso em texto literal. Adicionar:
\usepackage{upquote}