Neue, mit dem Newverbs-Paket definierte Verbatim-Umgebungen erzeugen Fehler, wenn sie im Mathematikmodus verwendet werden

Neue, mit dem Newverbs-Paket definierte Verbatim-Umgebungen erzeugen Fehler, wenn sie im Mathematikmodus verwendet werden

Das newverbsPaket ermöglicht es dem Benutzer, Varianten des verbBefehls zu definieren, die beispielsweise zum Anwenden von Farben auf wörtlichen Text verwendet werden können. Genau wie die alten verbfunktionieren die benutzerdefinierten Varianten im Mathematikmodus einwandfrei. Die Verwendung der benutzerdefinierten Varianten im Mathematikmodus führt jedoch beim Kompilieren zu folgendem Fehler:

LaTeX Error: Command \ttfamily invalid in math mode.

Was kann ich tun, wenn ich Varianten davon definieren möchte, verbdie ohne Fehler kompiliert werden?

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}

Wenn wir den Kompilierungsfehler ignorieren, erhalten wir die gewünschte Ausgabe, nämlich:

Bildbeschreibung hier eingeben

Antwort1

Der Unterschied besteht darin, dass ; genauer \verbgesagt\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}

Die mit definierten Befehle \newverbcommandführen diese Prüfung nicht durch. Sie können dies beheben, indem Sie den entsprechenden Befehl patchen und die Umhüllung \hboxim Mathematikmodus hinzufügen.

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

Antwort2

Sie können den wörtlichen Text in eine Box einfügen:

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

Das Ergebnis ist das gleiche wie bei Ihnen, jedoch ohne den Fehler.

Korrektur: Wie egreg anmerkte, funktioniert dieser Ansatz bei neueren newverbsVersionen nicht. Bei 1.3a (08.05.2012) funktioniert er, bei 1.4 (09.09.2019) nicht.

verwandte Informationen