我想结合问题中提供的以下两种解决方案:如何在等式各部分之间画箭头来显示数学分配律(乘法)?
第一个是不可重复使用的(至少我没有找到一种方法可以在一个文档中重复使用多个实例,因为只能定义一个源。)第二个是。我正在寻找的是组合命令\target
(这提供了相关节点的北部或南部,因此直接针对字符,就像或排序\target{x^2}
相反x\tikzmark{a}^2
。)第二个我可以在下面显示的示例中重复使用:
\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}
\newcommand{\tikzmark}[1]{\tikz[overlay,remember picture] \node ({#1}) {};}
\tikzset{square arrow/.style={to path={-- ++(0,-.125) -| (\tikztotarget)}}}
\newcommand{\sn}[2]{\ensuremath{{#1}\times 10^{#2}}}
\begin{document}
\begin{align*}
\sn{23,900,00\tikzmark{b}0.\tikzmark{a}}{0} &= \sn{2,390,00\tikzmark{d}0.\tikzmark{c}0}{1}\\
&= \sn{239,000}{2}\\
&= \sn{23,900}{3}\\
&= \sn{2,390}{4}\\
&= \sn{239}{5}\\
&= \sn{23.9}{6}\\
&= \sn{2.39}{7}
\tikz[overlay,remember picture] {\draw[->,square arrow] (a.south) to (b.south);}
\tikz[overlay,remember picture] {\draw[->,square arrow] (c.south) to (d.south);}
\end{align*}
\end{document}
得出:
当然,这不是一种系统的方法(我欢迎系统的反应。),但可以完成工作。如果箭头可以设置为曲线或正方形,那就没问题了。如果箭头可以更接近目标角色,那也很好。我想要实现的是以下效果:
答案1
看来你只需要稍微调整一下点就可以得到想要的结果,这可以使用tikz
calc
库来完成。我还定义了一个宏,\DrawArrow
它有一个可选的第一个参数来控制线条样式。现在你可以制作方形箭头或弯曲箭头,只需将选项更改为\DrawArrow
:
还显示了一个版本,该版本用于\,
插入一个小空格作为千位分隔符,而不是逗号。
笔记:
- 我定义了两个调整
\PeriodAdjust
,\DigitAdjust
用于稍微移动这两个点,这是最简单的方法。另一种方法是计算tikz
适当的宽度,但不确定是否值得付出努力。 - 根据 egreg 的建议,我使用
{,}
逗号,这样就不会插入额外的空格。
代码:
\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{calc}
\newcommand{\PeriodAdjust}{0,0.60ex}%
\newcommand{\DigitAdjust}{-0.15em,0.60ex}%
\newcommand{\DrawArrow}[3][]{%
\tikz[overlay,remember picture] {\draw[->,square arrow, thick, #1]
($(#2.south)+(\DigitAdjust)$) to ($(#3.south)+(\PeriodAdjust)$);}
}
\newcommand{\tikzmark}[1]{\tikz[overlay,remember picture] \node ({#1}) {};}
\tikzset{square arrow/.style={to path={-- ++(0,-.125) -| (\tikztotarget)}}}
\newcommand{\sn}[2]{\ensuremath{{#1}\times 10^{#2}}}
\begin{document}
\begin{align*}
\sn{23{,}900{,}00\tikzmark{b}0.\tikzmark{a}}{0} &= \sn{2{,}390{,}00\tikzmark{d}0.\tikzmark{c}0}{1}\\
\sn{23\,900\,00\tikzmark{f}0.\tikzmark{e}}{0} &= \sn{2\,390\,00\tikzmark{h}0.\tikzmark{g}0}{1}
\end{align*}
\DrawArrow[blue]{a}{b}
\DrawArrow[red, out=-110, in=-70, distance=0.19cm, shorten >= -0.1ex]{c}{d}
\DrawArrow[orange]{e}{f}
\DrawArrow[cyan, out=-110, in=-70, distance=0.19cm, shorten >= -0.1ex]{g}{h}
\end{document}