我正在尝试创建一个宏,它抓取到当前环境结束前的所有内容并进行解析。起初,我只想将它放在!
我的宏之后,并将另一个!
放在当前环境结束之前。
纯 TeX 分隔参数宏方法
\def\scanNext#1\end{#1\end}
LaTeX3 奇怪的论证方法
\ExplSyntaxOn
\cs_set:Npn \scan_next:w #1 \end {
#1\end
}
\newcommand{\scanNext}[1]{\scan_next:w #1}
\ExplSyntaxOff
如果分隔标记与 不同\end
,则它们都可以正常工作,但使用 会\end
导致错误。我相信那是因为在 执行之前\begin{...}
查找。\end{...}
\scanNext
是否有可能创建这样一个不会省略的宏\end
?
除了它导致的错误之外,嵌套环境也可能存在问题。我想我\@currenvir
也需要以某种方式使用 check for。
完整 MWE:
\documentclass{article}
\usepackage{amsmath}
\usepackage{expl3}
\ExplSyntaxOn
\cs_set:Npn \scan_next:w #1 \end {
!#1!\end
}
\newcommand{\scanNext}[2]{\scan_next:w #1}
\ExplSyntaxOff
\def\scanNext#1c{!#1c!}
\begin{document}
\begin{gather} % \label{eq:abcd}
x = \scanNext y
\\
\begin{cases}
a\\
b
\end{cases}
\\
c=d
\end{gather}
\end{document}
这是预期结果