获取节点 tikz 中字母的坐标

获取节点 tikz 中字母的坐标

我正在尝试使用 tikz 在 beamer 中制作的演示文稿中创建类似以下图像的内容

我想要创造的

现在显然使用节点创建方程很容易,但我想知道在创建节点后是否有某种方法可以访问节点中各个字母/符号的坐标,以便我可以更轻松地绘制此处看到的箭头和注释。我总是可以通过视觉反复试验来做到这一点,但我将在演示中经常做这种事情,如果可能的话,我希望避免花时间一直猜测坐标。

这是一个非常简单的 mwe,它在节点中提供方程。

\documentclass{beamer}


\usepackage{tikz}

\newcommand{\rvec}{\mathbf{r}}
\newcommand{\Cmat}{\mathbf{C}}
\newcommand{\trace}[1]{\text{Tr}\left[#1\right]}
\newcommand{\eigval}{\lambda}
\newcommand{\eigvec}{\mathbf{v}}
\newcommand{\rot}[2]{\mathbf{T}_{#1}^{#2}}
\newcommand{\Amat}{\mathbf{A}}

\begin{document}

\begin{frame}
    \centering
    \begin{tikzpicture}
        \coordinate (solution) at (0,0);

        \node (solu) at (solution) {$\rvec_I=-\text{sign}\left(v_3\right)\left[\frac{\trace{\Cmat}-\eigval\trace{\Amat}}{\eigval\left(\eigvec^T\Amat\Amat\eigvec\right)-\eigval\left(\eigvec^T\Amat\eigvec\right)\trace{\Amat}}\right]^{\frac{1}{2}}\rot{I}{C}\eigvec$};

    \end{tikzpicture}
\end{frame}

\end{document}

答案1

您可以使用tikzmark\subnode命令,但您必须对数学稍微小心一点。例如:

\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{tikzmark,scopes,decorations.pathreplacing}
\newcommand{\rvec}{\mathbf{r}}
\newcommand{\Cmat}{\mathbf{C}}
\newcommand{\trace}[1]{\text{Tr}\left[#1\right]}
\newcommand{\eigval}{\lambda}
\newcommand{\eigvec}{\mathbf{v}}
\newcommand{\rot}[2]{\mathbf{T}_{#1}^{#2}}
\newcommand{\Amat}{\mathbf{A}}
\begin{document}
\begin{frame}
  \centering
  \begin{tikzpicture}[remember picture]
    \node (solu) {$\rvec_I=-\text{sign}\left(v_3\right)\subnode{r}{$\left[\frac{\trace{\Cmat}-\eigval\trace{\Amat}}{\eigval\left(\eigvec^T\Amat\Amat\eigvec\right)-\eigval\left(\eigvec^T\Amat\eigvec\right)\trace{\Amat}}\right]$}^{\frac{1}{2}}\subnode{T}{$\rot{I}{C}$}\subnode{v}{$\eigvec$}$};
    {[draw=blue, <-]
      \draw  (v.north) -- +(-5pt,25pt) node [anchor=east, align=right] {eigenvector:\\corresponds to eigenvalue of unique sign};
      \draw (T.south) -- +(-5pt,-20pt) node [anchor=north, align=center] {rotation:\\camera to inertial};
    }
    \draw [draw=blue, decorate, decoration={brace, mirror, amplitude=5pt}] ([xshift=5pt]r.south west) -- ([xshift=-5pt]r.south east) node [midway, below, anchor=north, yshift=-2.5pt] {range};
  \end{tikzpicture}
\end{frame}
\end{document}

标记方程

答案2

我的声誉不足以添加评论,因此我将其添加为答案。截至 2019 年 5 月,\subnodetikzmark具备数学意识。因此,上述答案成本加运费导致编译错误,因为(现在)额外的 $ 符号被解释为退出并重新进入数学模式。使用最新版本时,以下内容应该足够了tikzmark

\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{tikzmark,scopes,decorations.pathreplacing}
\newcommand{\rvec}{\mathbf{r}}
\newcommand{\Cmat}{\mathbf{C}}
\newcommand{\trace}[1]{\text{Tr}\left[#1\right]}
\newcommand{\eigval}{\lambda}
\newcommand{\eigvec}{\mathbf{v}}
\newcommand{\rot}[2]{\mathbf{T}_{#1}^{#2}}
\newcommand{\Amat}{\mathbf{A}}
\begin{document}
\begin{frame}
  \centering
  \begin{tikzpicture}[remember picture]
    \node (solu) {$\rvec_I=-\text{sign}\left(v_3\right)\subnode{r}{\left[\frac{\trace{\Cmat}-\eigval\trace{\Amat}}{\eigval\left(\eigvec^T\Amat\Amat\eigvec\right)-\eigval\left(\eigvec^T\Amat\eigvec\right)\trace{\Amat}}\right]}^{\frac{1}{2}}\subnode{T}{\rot{I}{C}}\subnode{v}{\eigvec}$};
    {[draw=blue, <-]
      \draw  (v.north) -- +(-5pt,25pt) node [anchor=east, align=right] {eigenvector:\\corresponds to eigenvalue of unique sign};
      \draw (T.south) -- +(-5pt,-20pt) node [anchor=north, align=center] {rotation:\\camera to inertial};
    }
    \draw [draw=blue, decorate, decoration={brace, mirror, amplitude=5pt}] ([xshift=5pt]r.south west) -- ([xshift=-5pt]r.south east) node [midway, below, anchor=north, yshift=-2.5pt] {range};
  \end{tikzpicture}
\end{frame}
\end{document}

Tikzmark 子节点示例

相关内容