如何使用 tikz 在多项式的圆圈系数之间绘制箭头

如何使用 tikz 在多项式的圆圈系数之间绘制箭头

在阅读 Gonzalo 的回答后LaTeX 中方程各部分之间的箭头,我想我可以修改它,这样我就可以将相应的系数圈起来,并画一个从一个圆圈到另一个圆圈的箭头。例如,我想将左侧的 x^2 系数 a 圈起来,将右侧的 x^2 系数 5 圈起来,然后在两个圆圈之间画一个弯曲的箭头。我该如何实现这一点?此外,我该如何沿着箭头的路径添加一些文本?我在这里重现了他的代码。

\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{calc}

\newcommand{\tikzmark}[1]{\tikz[overlay,remember picture] \node (#1) {};}

\begin{document}

\begin{equation}
  a\tikzmark{a}x^2 + bx + c = 5\tikzmark{b}x^2 + bx + c.
  \begin{tikzpicture}[overlay,remember picture,out=315,in=225,distance=0.4cm]
    \draw[->,red,shorten >=3pt,shorten <=3pt] (a.center) to (b.center);
  \end{tikzpicture}
\end{equation}

\end{document}

答案1

编辑抱歉,我看错了问题,以为你想把指数圈起来。修改我的第一个解决方案,你可以用以下方法圈出系数:

\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{decorations.text}

\newcommand{\tikzmark}[2]{%
    \tikz[remember picture,baseline=-2pt]
    \node[circle,red,draw,text=black,anchor=center,inner sep=1pt] (#1) {$#2$};}

\begin{document}

\begin{equation}
  \tikzmark{a}{a}x^2 + bx + c = \tikzmark{b}{5}x^{2} + bx + c.
  \begin{tikzpicture}[overlay,remember picture,
         decoration={text along path,text color=red, text align=center,
         raise=2pt, text={|\scriptsize|match coefficients}}]
     \draw[->,red] (a) to [out=35,in=145](b);
     \draw[decorate] (a) to [out=35,in=145](b);
  \end{tikzpicture}
\end{equation}

\end{document}

大概是因为圆圈对基线有贡献,所以使用baseline是必要的,但这有点弄虚作假。

需要tikz 库decorations.txt来让文本跟随曲线。这给出:

在此处输入图片描述

我原来的解决方案是圈出指数:

在此处输入图片描述

这些圆圈比我想要的更狭窄。这使用了上面的一个小变化:

\newcommand{\tikzmark}[2]{%
    \tikz[overlay,remember picture] \node[circle,red,draw,text=black,
          inner sep=0pt] (#1) {\scriptsize$#2$};}

\begin{equation}
  ax^{\tikzmark{a}{2}} + bx + c = 5x^{\tikzmark{b}{2}} + bx + c.
  \begin{tikzpicture}[overlay,remember picture,
        decoration={text along path,text color=red, text align=center, 
        raise=2pt, text={|\scriptsize|match exponents}}]
     \draw[->,red] (a) to [out=25,in=155](b);
     \draw[decorate] (a) to [out=25,in=155](b);
  \end{tikzpicture}
\end{equation}

请注意,我必须在两个示例中更改红线离开和进入圆圈的角度,因为如果我使用角度 25 和 155 作为系数,那么红线就会穿过指数。

答案2

首先,您必须overlay\tikzmark定义中删除该选项。其次,修改定义以采用与标签和内容相同的参数。此外,如果您希望圆具有相同的半径,请为minimum width键固定一些值。有了这些,它就变成了,

\newcommand{\mathtikzmark}[1]{\tikz[baseline={(#1.base)},remember picture] \node[draw,circle,inner sep=0.5pt,minimum width=3ex] (#1) {$#1$};}

我已为其命名,\mathtikzmark因为内容将处于数学模式(注意内容内的$#1$)。

完整代码:

\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{calc}

\newcommand{\mathtikzmark}[1]{\tikz[baseline={(#1.base)},remember picture] \node[draw,circle,inner sep=0.5pt,minimum width=3ex] (#1) {$#1$};}

\begin{document}

\begin{equation}
  \mathtikzmark{a} x^2 + bx + c = \mathtikzmark{99} x^2 + bx + c.
  \begin{tikzpicture}[overlay,remember picture,distance=0.4cm]
    \draw[->,red,in=225,out=315] (a) to (99);
  \end{tikzpicture}
\end{equation}

\end{document}

在此处输入图片描述

如果您想要正确的数学间距并且不介意圆圈是否与相邻参数重叠,那么这里有一种方法:

\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}
\newcommand{\mathtikzmark}[1]{\tikz[remember picture] \node[inner sep=0pt,outer sep=0pt] (#1) {$#1$};}

\begin{document}

\begin{equation}
  \mathtikzmark{a}x^2 + bx + c = \mathtikzmark{99}x^2 + bx + c.
  \begin{tikzpicture}[overlay,remember picture]
    \node[draw,circle,minimum width=1.8ex]  (n1) at (a.center) {};
    \node[draw,circle,minimum width=3ex]  (n2) at (99.center) {};
    \draw[->,red,in=225,out=315] (n1) to (n2);
  \end{tikzpicture}
\end{equation}

\end{document}

在此处输入图片描述

根据需要调整minimum width节点n1和。n1

相关内容