代码:

代码:

我想结合问题中提供的以下两种解决方案:如何在等式各部分之间画箭头来显示数学分配律(乘法)?

  1. https://tex.stackexchange.com/a/35721/10898
  2. https://tex.stackexchange.com/a/61990/10898

第一个是不可重复使用的(至少我没有找到一种方法可以在一个文档中重复使用多个实例,因为只能定义一个源。)第二个是。我正在寻找的是组合命令\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}

相关内容