\eval 没有正确缩放其参数

\eval 没有正确缩放其参数

这里一位用户建议使用该commath包来分离演示和内容。我喜欢分离演示和内容,所以我阅读了文档并开始在工作中使用这个包。

遗憾的是,我注意到最常用的宏之一 - (偏导数) -与\pd普通的旧宏相比产生的结果非常丑陋: \frac\partial顶部:\eval,底部:\frac

\begin{equation}
\eval{\pd{\hat{\boldsymbol{a}}_\text{c}}{\xi}}_{\xi = 0} =
42
\end{equation}

\begin{equation}
\frac{\partial \hat{\boldsymbol{a}}_\text{c}}{\partial \xi}\sVert[3]_{\xi = 0} =
42
\end{equation}

(实际上,这个例子虽然是 MWE,但还不够说明问题,所以这里还有另外几个:\eval

\评估

对比\frac

\分数

)我使用更新的TeXLive2016。

所以,问题是(1)我做错了什么吗,因为这不可能是预期的排版风格,以及(2)如果它commath真的坏了并且无人维护(嘿,它仍然处于 10 年前的 v0.3 版本),你能否建议另一个类似的包。

答案1

宏将\eval其内容放入参数中\mathinner。另一方面,当返回 true 时,当返回 false 时。\pd\tfrac\ifinner\dfrac\ifinner

现在,这里有一个以简单的纯 TeX 文件形式呈现的问题:

$$
\mathinner{\ifinner a\else b\fi}
$$
\bye

如果我们运行pdftex它,输出将显示“a”而不是“b”。换句话说,\ifinner当中的子公式\mathinner被排版时返回 true。

这就是您获得一小部分的原因。

很抱歉,再次声明,这commath是无法修复的。如果您需要保留语法,可以查看https://tex.stackexchange.com/a/135985/4427

未删节的版本,仅包含您的代码的宏,如下所示:

\documentclass{article}
\usepackage{amsmath}

\makeatletter
\newcommand{\spx}[1]{%
  \if\relax\detokenize{#1}\relax
    \expandafter\@gobble
  \else
    \expandafter\@firstofone
  \fi
  {^{#1}}%
}
\makeatother

\newcommand\pd[3][]{\frac{\partial\spx{#1}#2}{\partial#3\spx{#1}}}

\newcommand{\genericdel}[4]{%
  \ifcase#3\relax
  \ifx#1.\else#1\fi#4\ifx#2.\else#2\fi\or
  \bigl#1#4\bigr#2\or
  \Bigl#1#4\Bigr#2\or
  \biggl#1#4\biggr#2\or
  \Biggl#1#4\Biggr#2\else
  \left#1#4\right#2\fi
}

\newcommand{\eval}[2][-1]{\genericdel.|{#1}{#2}}
\newcommand{\sVert}[1][0]{%
  \ifcase#1\relax
  \rvert\or\bigr|\or\Bigr|\or\biggr|\or\Biggr
  \fi
}

\begin{document}

\begin{equation}
\eval{\pd{\hat{\boldsymbol{a}}_\text{c}}{\xi}}_{\xi = 0} =
42
\end{equation}

\begin{equation}
\frac{\partial \hat{\boldsymbol{a}}_\text{c}}{\partial \xi}\sVert[3]_{\xi = 0} =
42
\end{equation}

\end{document}

在此处输入图片描述

答案2

好吧,看来我有点小题大做,因为commath我链接的答案确实讨论了破碎的问题(非常感谢@cfr)。我会试试cool

[编辑] 我试过了cool,就是这样。

相关内容