我创建了一个\NewEnviron
处理一些输入的环境。为了便于讨论,它类似于
\NewEnviron{myworkingenvironment}[1]
{
\BODY % BODY is expected to define \A, \B and \C
\numericResult{\A + \B + \C}
\textResult{\A + \B + \C}
}
这些函数排版了我想要的输出,并且我广泛使用了环境(参数#1
,迄今为止未使用,应该作为ID)。
现在我想在另一个环境中使用这个环境的变量,例如:
\NewEnviron{mynewenvironment}[1]
{
\BODY
The input was \get{#1:A}, \get{#1:B} and \get{#1:C}
The result was \get{id:numericResult}.
}
我该如何实现这个get
宏?到目前为止我发现的选项(例如,\@currentlabelname
之后更改并定义标签)似乎不起作用(我总是得到引用所在部分的名称,而不是我期望的值)。
答案1
我思考这满足您的要求。
\documentclass{article}
\usepackage{environ}
\NewEnviron{myworkingenvironment}[1]{\BODY%
\global\expandafter\let\csname#1A\endcsname\A
\global\expandafter\let\csname#1B\endcsname\B}
\NewEnviron{mynewenvironment}[1]{\BODY%
\def\getrelay##1:##2{\csname##1##2\endcsname}
\def\get##1{\getrelay##1}
\get{#1:A} is a friendly clown.
\get{ABC:B} is a dangerous doll.
}
\begin{document}
%
\begin{myworkingenvironment}{ABC}
\newcommand\A{Pennywise}
\newcommand\B{Chucky}
\end{myworkingenvironment}
\begin{mynewenvironment}{ABC}
\end{mynewenvironment}
\end{document}
这个想法是,当您创建一个myworkingenvironment
名为 的宏时,会自动生成名为和ABC
的全局宏。此处实现的命令只允许您说出类似(where is ) 的内容,而不是直接输入。如果这对您有用,请告诉我,我会添加更详细的解释。\ABCA
\ABCB
\get
\get{#1:A}
#1
ABC
\ABCA