使用 newverbs 包定义的新逐字环境在数学模式下使用时会产生错误

使用 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),它无效。

相关内容