Los nuevos entornos textuales definidos con el paquete newverbs generan errores cuando se usan en modo matemático

Los nuevos entornos textuales definidos con el paquete newverbs generan errores cuando se usan en modo matemático

El newverbspaquete permite al usuario definir variantes del verbcomando que se pueden usar para cosas como aplicar colores al texto palabra por palabra. Al igual que el antiguo verb, las variantes definidas por el usuario funcionan bien en modo matemático. Sin embargo, el uso de variantes definidas por el usuario en modo matemático genera el siguiente error al compilar:

LaTeX Error: Command \ttfamily invalid in math mode.

¿Qué puedo hacer si quiero definir variantes de verbesa compilación sin errores?

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}

Cuando ignoramos el error de compilación, esto da el resultado deseado, a saber:

ingrese la descripción de la imagen aquí

Respuesta1

La diferencia es que \verb\ifmmode\hbox; más 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}

Los comandos definidos con \newverbcommandno hacen esta verificación. Puede solucionarlo parcheando el comando correspondiente y agregando el envolvente \hboxen 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}

Respuesta2

Puedes poner el texto textual en un cuadro:

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

El resultado es el mismo que el tuyo, pero sin el error.

Corrección: como señaló egreg, este enfoque no funciona para newverbslas versiones más nuevas. Para 1.3a (08/05/2012) funciona, para 1.4 (09/09/2019) no.

información relacionada