Новые среды verbatim, определенные с помощью пакета newverbs, генерируют ошибки при использовании в математическом режиме

Новые среды verbatim, определенные с помощью пакета newverbs, генерируют ошибки при использовании в математическом режиме

Пакет newverbsпозволяет пользователю определять варианты команды verb, которые могут использоваться для таких вещей, как применение цветов к дословному тексту. Как и старый verb, пользовательские варианты отлично работают в математическом режиме. Однако использование пользовательских вариантов в математическом режиме приводит к следующей ошибке при компиляции:

LaTeX Error: Command \ttfamily invalid in math mode.

Что делать, если я хочу определить варианты verbэтой компиляции без ошибок?

МВЭ:

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

Если проигнорировать ошибку компиляции, то получится желаемый результат, а именно:

введите описание изображения здесь

решение1

Разница в том, что \verbделает \ifmmode\hbox; точнее

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

Команды, определенные с помощью , \newverbcommandне выполняют эту проверку. Вы можете исправить это, исправив соответствующую команду и добавив обертку \hboxв математическом режиме.

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

решение2

Вы можете поместить дословный текст в поле:

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

Результат такой же, как у вас, но без ошибки.

Исправление: Как указал egreg, этот подход не работает для новых newverbsверсий. Для 1.3a (2012/05/08) он работает, для 1.4 (2019/09/09) — нет.

Связанный контент