我想定义一个命令来检查它是否在某个环境中执行。就像这样:
\documentclass{article}
\newenvironment{myenv}[0]{at start}{ at end}
\newcommand{\inner}[0]{%
% if iside a myenv
(inner)
% else
\begin{myenv}
(inner)%
\end{myenv}
% end
}
\begin{document}
\begin{myenv}
\inner
\end{myenv}
\inner
\end{document}
参见 的定义\inner
。这种形式的 if 条件可能吗?
答案1
LaTeX 将当前环境保留在宏中\@currenvir
\makeatletter
\newcommand{\inner}{%
\ifx\@currenvir\@myenvname
(inner)
\else
\begin{myenv}(inner)\end{myenv}
\fi}
\newcommand*\@myenvname{myenv}
\makeatother
另一种方法是定义一个全局条件,通过myenv
起始代码将其设置为 true,通过myenv
结束代码将其设置为 false。这主要取决于您对环境的期望myenv
:它是否可以嵌套在自身内部?
答案2
如果您使用pdftex
,etex
或xetex
(我的意思是引擎),您可以定义一个完全可扩展的测试:
\makeatletter \def\IfEnvir #1%
% implicit #2 "what if true"
% implicit #3 "what if false"
{%
\ifnum \strcmp{\@currenvir}{#1}=0
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
}
\makeatother
这样的条件在包中定义gmutils
: ,但是由于某种原因\@ifenvir
它在那里。\protected