我正在尝试定义一个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}
会起作用。但总是很难理解你真的需要。