\cancel 或 \bcancel 在数学模式下绘制非平行线;寻找更好的解决方案

\cancel 或 \bcancel 在数学模式下绘制非平行线;寻找更好的解决方案

我在某个环境下的数学模式下画出了非常相似的线条\align。当我使用\cancel或时,\bcancel它不会为宽度应该相似的项绘制平行线。

我认为一个简单的再现是:

\begin{align}
    f &= \left(\cancel{\frac{\partial v}{\partial x}}\right) \\
    g &= \left(\cancel{\frac{\partial v}{\partial z}}\right)
\end{align}

取消非平行

我尝试制作一些基于 tikz 的解决方案这个问题,但不能很好地与说\left(\frac{\partial u}{\partial y} + \cancel{\frac{\partial v}{\partial z}}\right)和产生类似的东西tikz 数学

编辑:

答案1

\cancel宏内部使用图片模式,测量其参数的宽度和高度来决定笔画的斜率。代码

\documentclass{article}
\begin{document}
\setbox0=\hbox{$x$}\showthe\wd0
\setbox0=\hbox{$z$}\showthe\wd0
\end{document}

返回

> 5.71527pt.
l.3 \setbox0=\hbox{$x$}\showthe\wd0
> 5.0903pt.
l.4 \setbox0=\hbox{$z$}\showthe\wd0

因此 的x宽度至少比 的宽度要宽z;至少要宽,但足以触发不同的斜率。最快(也是最不优雅)的解决方案是在符号周围添加一些手动字距调整。

我在这里通过以下解决方法实现了这个“解决方案”:\cancelin的原始定义cancel.sty

\DeclareRobustCommand\cancel[1]{\ifmmode
  \mathpalette{\@cancel{\@can@slash{}}}{#1}\else 
  \@cancel{\@can@slash{}}\hbox{#1}\fi}

我修补了这个问题(希望唐纳德不会介意),通过添加一个可选参数,该参数在参数中添加一些字距\cancel,并在取消的表达式之外减去它,以使总宽度保持不变。

\documentclass{article}

\usepackage{cancel}

\makeatletter
\DeclareRobustCommand\cancel[2][0]{%
  \ifmmode
    \mkern-#1mu
    \mathpalette{\@cancel{\@can@slash{}}}{\mkern#1mu #2 \mkern#1mu}%
    \mkern-#1mu
  \else
    \dimen@=\dimexpr 1em*#1/18\relax
    \kern-\dimen@
    \@cancel{\@can@slash{}}\hbox{\kern\dimen@ #2\kern\dimen@}%
    \kern-\dimen@
  \fi}
\makeatother

\begin{document}

\[
\cancel{\frac{\partial v}{\partial x}}
\quad
\cancel[1]{\frac{\partial v}{\partial z}}
\quad
\cancel[-1]{\frac{\partial v}{\partial x}}
\quad
\cancel{\frac{\partial v}{\partial z}}
\]

\end{document}

在此处输入图片描述

您是否想为包含的分数添加一些宽度z或从包含的分数中减去一些宽度x,正如 Barbara Beeton 在她的评论),这是一个品味问题。(我同意芭芭拉的观点,但是德古斯蒂布斯...)

相关内容