使用 newenvironment/NewEnviron 的不平衡支撑

使用 newenvironment/NewEnviron 的不平衡支撑

我正在尝试定义一个myEnv环境

\begin{myEnv}
text1
\end{myEnv} text2}

扩展为

\renewcommand{\myCommand}{
text1
} { text2}

第一个代码示例中明显表达不平衡的原因是 LyX 在定义多个段落的宏参数时能力有限 - 我目前必须应对它。我已经尝试过

\NewEnviron{myEnv}{\expandafter\newcommand\csname myCommand \endcsname{\BODY} \bgroup}

然而,这根本不起作用。

编辑: 根据 egreg 的回答,我给出了一个最小的、不起作用的例子:

\documentclass{scrartcl}
\usepackage{environ}

\newcommand{\myCommand}{}

\NewEnviron{myEnv}{%
  \expandafter\gdef\expandafter\myCommand\expandafter{\BODY}}

\begin{document}

\begin{myEnv}
text1
\end{myEnv} text2}

testing \myCommand testing

\end{document}

这给出了错误

! Too many }'s.
l.13 \end{myEnv} text2}

预期的文档输出为

text2 testing text1 testing

答案1

\usepackage{environ}
\NewEnviron{myEnv}{%
  \expandafter\gdef\expandafter\myCommand\expandafter{\BODY}}

然而,要理解你需要实现什么却相当困难。如果你想写多个段落,你可以简单地说

\newcommand{\myCommand}{text of first paragraph\par text of second paragraph\par}

为了应对你想要使用的奇怪语法,那么

\NewEnviron{myEnv}{%
  \expandafter\gdef\expandafter\myCommand\expandafter{\BODY}%
  \aftergroup\bgroup}

会起作用。但总是很难理解你真的需要。

相关内容