我想定义一些偏导数命令,\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}