在阅读 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