我正在尝试使用 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 月,\subnode
已tikzmark
具备数学意识。因此,上述答案成本加运费导致编译错误,因为(现在)额外的 $ 符号被解释为退出并重新进入数学模式。使用最新版本时,以下内容应该足够了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}