
O newverbs
pacote permite ao usuário definir variantes do verb
comando 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 verb
compilaçã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:
Responder1
A diferença é que \verb
sim \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 \newverbcommand
não fazem esta verificação. Você pode consertar isso corrigindo o comando relevante e adicionando o envelope \hbox
no 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 newverbs
versões mais recentes. Para 1.3a (08/05/2012) funciona, para 1.4 (09/09/2019) não.