Tikzmark,箭头(指数和底数)

Tikzmark,箭头(指数和底数)

我想改进这个程序。例如,让箭头更像半圆形,并把单词 base 和 exponent 放下来。有什么建议我可以从这个开始/最小示例开始做这些吗?

 \documentclass{article}
 \usepackage{amsmath} % loaded automatically by beamer
 \usepackage{tikz}
 \usetikzlibrary{positioning}
 \tikzset{>=stealth}

 \newcommand{\tikzmark}[3][]{\tikz[overlay,remember picture,baseline] \node 
 [anchor=base,#1](#2) {#3};}

 \begin{document}

  \begin{equation*}
  \tikzmark[blue]{base}{$b^{\,\,\tikzmark[red]{exponent}{a}}$}
  \end{equation*}
 \begin{tikzpicture}[overlay, remember picture,node distance =.2cm]
 \node[blue] (basedescr) [below right=of base]{base};
 \draw[,->,thick] (basedescr.west) to [in=315,out=225] (base.south);
  \node[red] (exponentdescr) [above right=of exponent] {exponent};
  \draw[->,thick] (exponentdescr.west) to [in=65,out=135] (exponent.north);
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案1

在您的示例中,您正在嵌套 tikzpictures,因为您将 tikzpicture 放在另一个 tikzpicture 的节点中。这通常是不是一个好主意。然后我替换了\tikzmark,这实际上是包中定义明确的命令tikzmark,用稍微修改后的版本替换Torbjørn T. 的\tikznode命令。至于弧线,可以用弧语法轻松绘制,个人比较喜欢弯曲的箭头。

\documentclass{article}
 \usepackage{amsmath}
 \usepackage{tikz}
 \usetikzlibrary{positioning,calc,arrows.meta,bending}
 \newcommand{\tikznode}[3][]{\relax
\ifmmode%
  \tikz[remember picture,baseline=(#2.base),inner sep=0pt]{\node[#1] (#2) {$#3$};}
\else
  \tikz[remember picture,baseline=(#2.base),inner sep=0pt]{\node[#1] (#2) {#3};}%
\fi}
\begin{document}

\begin{equation*}
  \tikznode[blue]{base}{b}^{\tikznode[red]{exponent}{a}}
\end{equation*}
\begin{tikzpicture}[overlay, remember picture,node distance =.2cm,inner sep=0pt]
 \node[blue] (basedescr) [below right=of base]{base};
 \draw[-{Stealth[bend]},thick] let  \p1=($(basedescr.west)-(base.south)$),
 \n1={ifthenelse(\x1>0,atan2(\y1,\x1),atan2(\y1,\x1)-180)},
 \n2={veclen(\x1,\y1)/sqrt(2)}
  in 
  (basedescr.west) arc(\n1-45:\n1-135:\n2) ;
 \node[red] (exponentdescr) [above right=of exponent] {exponent};
 \draw[-{Stealth[bend]},thick] let  \p1=($(exponentdescr.west)-(exponent.north)$),
 \n1={ifthenelse(\x1>0,atan2(\y1,\x1),atan2(\y1,\x1)-180)},
 \n2={veclen(\x1,\y1)/sqrt(2)}
 in  (exponentdescr.west) arc(\n1+45:\n1+135:\n2);
\end{tikzpicture}
\end{document}

在此处输入图片描述

编辑:回答您的问题。

  1. 你有\tikzmark[blue]{base}{$b^{\,\,\tikzmark[red]{exponent}{a}}$}。这扩展为\tikz[...]{\node[...]{...\tikz[...]{\node[...]{...};}};},这是一个 TiTi 里面的 Z 图片Z 图,又称嵌套tikzpicture
  2. 如果您使用below right键,例如,您可以向其传递两个相隔 的距离and,例如,将仅向下但向右below right=2pt and 2mm of base移动该物体。如果您希望节点进一步向上,您可以使用负尺寸,或类似。2pt2mmbasedescrright=2mm of base,yshift=-6pt

这是更新后的代码。使用 LoopSpace 的 tikzmark 库,您很有可能会得到更好的答案。它有优于(尽管如此,非常好用)的新命令\tikznode由 Torbjørn T. 指挥。

\documentclass{article}
 \usepackage{amsmath}
 \usepackage{tikz}
 \usetikzlibrary{positioning,calc,arrows.meta,bending}
 \newcommand{\tikznode}[3][]{\relax
\ifmmode%
  \tikz[remember picture,baseline=(#2.base),inner sep=0pt]{\node[#1] (#2) {$#3$};}
\else
  \tikz[remember picture,baseline=(#2.base),inner sep=0pt]{\node[#1] (#2) {#3};}%
\fi}
\begin{document}

\begin{equation*}
  \tikznode[blue]{base}{b}^{\tikznode[red]{exponent}{a}}
\end{equation*}
\begin{tikzpicture}[overlay, remember picture,inner sep=0pt]
 \node[blue] (basedescr) [below right=2pt and 2mm of base]{base};
 \draw[-{Stealth[bend]},thick] let  \p1=($(basedescr.west)-(base.south)$),
 \n1={ifthenelse(\x1>0,atan2(\y1,\x1),atan2(\y1,\x1)-180)},
 \n2={veclen(\x1,\y1)/sqrt(2)}
  in 
  (basedescr.west) arc(\n1-45:\n1-135:\n2) ;
 \node[red] (exponentdescr) [above right=2pt and 2mm of exponent] {exponent};
 \draw[-{Stealth[bend]},thick] let  \p1=($(exponentdescr.west)-(exponent.north)$),
 \n1={ifthenelse(\x1>0,atan2(\y1,\x1),atan2(\y1,\x1)-180)},
 \n2={veclen(\x1,\y1)/sqrt(2)}
 in  (exponentdescr.west) arc(\n1+45:\n1+135:\n2);
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

我刚刚将 Torbjørn 的一个版本\tikznode(它本身就是原版的一个版本\tikzmark)添加到tikzmark库中。在发送到 CTAN 之前需要进行一些测试,所以我借此机会对其进行了测试。目前,您可以从github有了它,marmot的解决方案就变成了:

\documentclass{article}
%\url{https://tex.stackexchange.com/q/450135/86}
 \usepackage{amsmath}
 \usepackage{tikz}
 \usetikzlibrary{positioning,calc,arrows.meta,bending,tikzmark}

\begin{document}

\begin{equation*}
  \tikzmarknode[blue]{base}{b}^{\tikzmarknode[red]{exponent}{a}}
\end{equation*}

\begin{tikzpicture}[overlay, remember picture,node distance =.2cm,inner sep=0pt]
 \node[blue] (basedescr) [below right=.5cm of base]{base};
 \draw[-{Stealth[bend]},thick,shorten >=2pt] let  \p1=($(basedescr.west)-(base.south)$),
 \n1={ifthenelse(\x1>0,atan2(\y1,\x1),atan2(\y1,\x1)-180)},
 \n2={veclen(\x1,\y1)/sqrt(2)}
  in 
  (basedescr.west) arc(\n1-45:\n1-135:\n2) ;
 \node[red] (exponentdescr) [above right=.5cm of exponent] {exponent};
 \draw[-{Stealth[bend]},thick,shorten >=2pt] let  \p1=($(exponentdescr.west)-(exponent.north)$),
 \n1={ifthenelse(\x1>0,atan2(\y1,\x1),atan2(\y1,\x1)-180)},
 \n2={veclen(\x1,\y1)/sqrt(2)}
 in  (exponentdescr.west) arc(\n1+45:\n1+135:\n2);
\end{tikzpicture}

\end{document}

(我在项目和它们的解释之间添加了一点空间,并且缩短了箭头。)

数学中的 tikzmark

相关内容