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