如果方程环境与其他方程环境嵌套,我怎么知道我是否处于其中?

如果方程环境与其他方程环境嵌套,我怎么知道我是否处于其中?

我想定义一些偏导数命令,\partial y/\partial x如果它在内联方程中,则为,\frac{\partial y}{\partial x}如果在方程环境中则为。我四处搜索,想出了(老实说,可能是来自 TeX.SE,但我不记得是哪个问题/答案):

\makeatletter
\newcommand{\pd}[2]{%
\def\@tempa{document}
\ifx\@tempa\@currenvir \partial {#1}/\partial{#2} \else
\def\@tempa{equation}
\ifx\@tempa\@currenvir \frac{\partial {#1}}{\partial {#2}}\else
\fi\fi
}

这太棒了!但后来我尝试在里面使用它:

\begin{equation}
   \begin{aligned}
      f &= \pd{y}{x} \\
      g &= \pd{y}{z}
   \end{aligned}
 \end{equation}

并且它无法正确呈现,因为当前环境是aligned而不是equation。我可以添加aligned到我的 if 语句中,但随后我需要为所有种类的*matrix和谁知道还有什么添加分支。我可以添加一个默认值,这样如果它不在,document它总是以表单呈现\frac{}{}

但所有这些似乎都不是正确的做法。有没有办法查看命令是否在equation环境内部的某个地方发出,即使它在环境树的某个地方?

答案1

使用\mathchoice{displaystyle}{textstyle}{scriptstyle}{scriptscriptstyle}是根据当前数学风格提供不同数学答案的规范方法(无论调用数学的环境名称是什么)。

\documentclass{article}
\usepackage{amsmath}
\newcommand\pd[2]{\mathchoice%
  {\frac{\partial #1}{\partial #2}}%
  {\partial #1/\partial #2}%
  {\partial #1/\partial #2}%
  {\partial #1/\partial #2}%
}
\begin{document}
Inline it looks like $f =\pd{y}{x} $
\begin{equation}
   \begin{aligned}
      f &= \pd{y}{x} \\
      g &= \pd{y}{z}
   \end{aligned}
\end{equation}

\end{document}

在此处输入图片描述

相关内容