考虑以下 MWE:
\documentclass[a4paper]{article}
\usepackage{environ}
\NewEnviron{myitemize} {
\show\BODY
\begin{itemize}
\BODY
\end{itemize}
}
\begin{document}
\begin{itemize}
\item \verb|test|
\end{itemize}
\begin{myitemize}
\item \verb|test|
\end{myitemize}
\end{document}
第一个列表有效,但第二个列表会抛出 Latex 错误(缺少 } 插入、额外的 }、\verb 非法...)。这可能与 NewEnviron 收集其主体的方式有关,但有人可以详细说明这个问题吗?
日志文件显示:
> \BODY=macro:
->\item \verb |test|.
那么为什么会出现问题呢?当然,解决方案是什么?
答案1
此问题类似于将\verb
参数传递给宏,例如
\newcommand{\mymacro}[1]{#1}
\mymacro{\verb|test|}
在这种情况下,您的解决方案是不使用environ
:
\documentclass{article}
\newenvironment{myitemize}
{\begin{itemize}}
{\end{itemize}}
\begin{document}
\begin{itemize}
\item \verb|test|
\end{itemize}
\begin{myitemize}
\item \verb|test|
\end{myitemize}
\end{document}
为什么一开始就会有问题?内容集合修复了类别代码 -\verb
需要verbatim
访问(或更改)才能正常运行。