Novos ambientes literais definidos com o pacote newverbs geram erros quando usados ​​no modo matemático

Novos ambientes literais definidos com o pacote newverbs geram erros quando usados ​​no modo matemático

O newverbspacote permite ao usuário definir variantes do verbcomando que podem ser usadas para coisas como aplicar cores a texto literal. Assim como o antigo verb, as variantes definidas pelo usuário funcionam bem no modo matemático. No entanto, usar as variantes definidas pelo usuário no modo matemático gera o seguinte erro na compilação:

LaTeX Error: Command \ttfamily invalid in math mode.

O que posso fazer se quiser definir variantes dessa verbcompilação sem erros?

MWE:

\documentclass{article}
\usepackage{newverbs}

\newverbcommand{\myverb}{}{}

\begin{document}
Old \verb|verb|, works in math: $+\verb|foo|+$.

New \myverb|verb|, gives error in math: $+\myverb|foo|+$.
\end{document}

Quando ignoramos o erro de compilação, isso fornece a saída desejada, a saber:

insira a descrição da imagem aqui

Responder1

A diferença é que \verbsim \ifmmode\hbox; mais precisamente

% latex.ltx, line 5775:
\def\verb{\relax\ifmmode\hbox\else\leavevmode\null\fi
  \bgroup
    \verb@eol@error \let\do\@makeother \dospecials
    \verbatim@font\@noligs
    \language\l@nohyphenation
    \@ifstar\@sverb\@verb}

Os comandos definidos com \newverbcommandnão fazem esta verificação. Você pode consertar isso corrigindo o comando relevante e adicionando o envelope \hboxno modo matemático.

\documentclass{article}
\usepackage{newverbs}
\usepackage{etoolbox}

\makeatletter
\patchcmd{\new@@verbcommand}
  {\bgroup}
  {\ifmmode\hbox\fi\bgroup}
  {}{}
\makeatother

\newverbcommand{\myverb}{}{}

\begin{document}

Old \verb|verb|, works in math: $+\verb|foo|+$.

New \myverb|verb|, gives error in math: $+\myverb|foo\\|+$.

\end{document}

Responder2

Você pode colocar o texto literal em uma caixa:

\documentclass{article}
\usepackage{newverbs}

\newverbcommand{\myverb}{\hbox\bgroup}{\egroup}

\begin{document}
Old \verb|verb|, works in math: $+\verb|foo|+$.

New \myverb|verb|, gives error in math: $+\myverb|foo|+$.
\end{document}

O resultado é igual ao seu, mas sem o erro.

Correção: Como apontou egreg, esta abordagem não funciona para newverbsversões mais recentes. Para 1.3a (08/05/2012) funciona, para 1.4 (09/09/2019) não.

informação relacionada