![\eval 没有正确缩放其参数](https://linux22.com/image/339274/%5Ceval%20%E6%B2%A1%E6%9C%89%E6%AD%A3%E7%A1%AE%E7%BC%A9%E6%94%BE%E5%85%B6%E5%8F%82%E6%95%B0.png)
这里一位用户建议使用该commath
包来分离演示和内容。我喜欢分离演示和内容,所以我阅读了文档并开始在工作中使用这个包。
遗憾的是,我注意到最常用的宏之一 - (偏导数) -与\pd
普通的旧宏相比产生的结果非常丑陋:
\frac
\partial
\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
,就是这样。