取消使用下支撑的计算但忽略额外高度

取消使用下支撑的计算但忽略额外高度

我经常使用该cancel包来抵消数学表达式中的项,但有时这些项包含下括号。请看以下(人为的)示例:

\[abc + \cancel{d \underbrace{(e - e)}_{0} f}\]

因高度不正确而取消

在这里,我取消了项 $d(e - e)f$,下括号强调了是 $(e - e)$ 使得整个项为 0。但是,如您所见,对角线延伸得太低,理想情况下它应该忽略下括号增加的额外高度。使用\smash和,\vphantom这个帖子适用于简单的情况,但有时额外的高度不能完全忽略:

\documentclass{article}

\usepackage{amsmath}
\usepackage{cancel}

\DeclareDocumentCommand{\underbracesmash}{mm}{\vphantom{#1} \smash{\underbrace{#1}_{#2}}}

\begin{document}

\begin{align*}
    &= abc + \cancel{d \underbracesmash{(e - e)}{0} f} + ghi + jkl\\
    &= abc + ghi + jkl
\end{align*}

\end{document}

取消正确的高度,但下支撑与以下数学线相交

可以继续使用\smash\vphantom使其工作,但这似乎不必要地重复。即使我要定义更多命令来减少重复,就像我上面对所做的那样\underbracesmash,这仍然看起来太过黑客了。有没有更简单/更有效的方法来实现这一点?

答案1

定义命令有用。

由于\underbrace\overbrace在各种场合都可能被粉碎,我们可以一举两得:

  1. 在很多情况下,周围的间距\underbrace\overbrace零件是错误的,所以我们会修复它;

  2. 我们可以处理它们被粉碎的情况,但仍然保持它们占据的垂直空间。

\documentclass{article}
\usepackage{amsmath,cancel}

% better \ubrace{x}{y} than \underbrace{x}_{y}
\NewDocumentCommand{\ubrace}{mm}{\perhapssmash{\underbrace{#1}_{#2}}}
\NewDocumentCommand{\obrace}{mm}{\perhapssmash{\overbrace{#1}^{#2}}}
\NewDocumentCommand{\perhapssmash}{m}{{#1}}
% smash and add
\NewDocumentCommand{\smashcancel}{m}{%
  \begingroup
  \RenewCommandCopy\perhapssmash\smash
  \cancel{#1}%
  \endgroup
  \vphantom{#1}%
}

\begin{document}

\begin{align*}
uvw &= abc + \smashcancel{d \ubrace{(e - e)}{0} f} + ghi + jkl \\
    &= abc + ghi + jkl \\
uvw &= abc + \smashcancel{d \obrace{(e - e)}{0} f} + ghi + jkl \\
    &= abc + ghi + jkl
\end{align*}

\end{document}

始终使用\ubrace\obrace

在此处输入图片描述

答案2

重新建立行的整体高度和深度的代码\vphantom{...}块不能位于 的参数中\cancel

除非您的文档中有大量这样的术语,否则我认为不值得您花时间定义快捷宏。

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath,cancel}

\begin{document}

\begin{align*}
uvw    &= abc 
       + \cancel{d \smash{\underbrace{(e - e)}_{0}} f}\vphantom{\underbrace{(e - e)}_{0}} 
       + ghi + jkl\\
       &= abc + ghi + jkl
\end{align*}

\end{document}

相关内容