带有 \ifinner 的条件分支和高阶导数中的间距(2 个独立问题)

带有 \ifinner 的条件分支和高阶导数中的间距(2 个独立问题)

我制作了一些如下所示的宏,它们输出普通/偏导数。我正在检查它们是否按预期工作,发现在环境中\dif{y}{x}扩展为。 我只想在句子中使用,而不是在任何显示数学模式中使用。我应该如何更改定义才能在环境、环境等中扩展到?\tfrac{\difd y}{\difd x}align
\tfrac\dif{y}{x}\dfrac{\difd y}{\difd x}aligngather

我还有一个问题。我认为用我的命令编写的高阶导数(尤其是部分导数)在 f 之前留出了太多空间。
就数学排版而言,哪个是正确的:\frac{〈operator〉^{#1}#2}{〈operator〉#3^{#1}}\frac{〈operator〉^{#1}\!#2}{〈operator〉#3^{#1}}

高阶导数的例子

编辑(2015 年 6 月 13 日 23:28 日本标准时间):
第一个问题已经解决。

编辑(2015 年 6 月 15 日 14:21 JST):
正如 David Carlisle 指出的那样,我的问题与commath 和 \ifinnercommath包不应该使用。然后,我还有一个问题。在链接的页面中,有一个名为 的宏\spx,其定义在下面。从{^{#1}}定义中我们可以看出,它似乎是一个改进的。这和和^之间有什么区别,我应该使用“和”还是“不带”?\spx\^\(p)dif@nth\@(p)dif\spx\@ifnextchar

我的宏

% ----- differential operator -----
\def\difd@rm{\mathop{\mathrm{d}\!}\mathstrut}
\def\difd@it{\mathop{d\!}\mathstrut}
\def\makedifdrm{\let\difd=\difd@rm}
\def\makedifdit{\let\difd=\difd@it}
\makedifdit % default setting
%
% ----- ordinary derivative -----
\def\dif{\@ifnextchar[\dif@nth\@dif}
\def\dif@nth[#1]#2#3{
    \ifinner
    \tfrac{\difd^{#1}#2}{\difd#3^{#1}}
    \else
    \dfrac{\difd^{#1}#2}{\difd#3^{#1}}
    \fi
}
\def\@dif#1#2{
    \ifinner
    \tfrac{\difd#1}{\difd#2}
    \else
    \dfrac{\difd#1}{\difd#2}
    \fi
}
%
% ----- partial derivative -----
\def\pdif{\@ifnextchar[\pdif@nth\@pdif}
\def\pdif@nth[#1]#2#3{
    \ifinner
    \tfrac{\partial^{#1}#2}{\partial#3^{#1}}
    \else
    \dfrac{\partial^{#1}#2}{\partial#3^{#1}}
    \fi
}
\def\@pdif#1#2{
    \ifinner
    \tfrac{\partial#1}{\partial#2}
    \else
    \dfrac{\partial#1}{\partial#2}
    \fi
}

定义\spx及其用法

\newcommand{\spx}[1]{%
    \if\relax\detokenize{#1}\relax
        \expandafter\@gobble
    \else
        \expandafter\@firstofone
    \fi
    {^{#1}}%
}
\newcommand\pd[3][]{\frac{\partial\spx{#1}#2}{\partial#3\spx{#1}}}

答案1

\over使用的原语\frac会自动切换样式。\tfrac\dfrac宏用于特殊情况,以强制文本或显示样式。\ifinner不测试文本/显示区别,因此解决方案很简单,只需替换所有

\ifinner
\tfrac{..}{..}
\else
\dfrac{..}{..}
\fi

经过

\frac{..}{..}

对于您的第二个问题,我不会使用负间距,当然您的图像显示的\!太多了,您几乎可以使用它,f但其他字符不太适合上标。

相关内容