我在 tikz 环境中有一个方程式,我希望能够突出显示其中的一部分。例如以下内容:
\documentclass[12pt]{article}
\usepackage{amsmath,amssymb,latexsym}
\usepackage{tikz}
\begin{document}
\tikzstyle{block} = [draw,fill=blue!60,minimum width=1.1 em, minimum height= 1em, rounded corners= 4pt]
\begin{figure}[h]
\centering
\begin{tikzpicture}
\coordinate (Eq1) at (1,2);
\coordinate (Eq2) at (1,1);
\node[block] at (1,2) (block1) {};
\node at (Eq1) {$A = B + C$};
\node at (Eq2) {$D = E + F$};
\node[block] at (0, -0.5) (block2) {Blah};
\draw[->] (block1) -- (block2);
\end{tikzpicture}
\end{figure}
\end{document}
但是,手动摆弄块的节点位置以突出显示方程的相应部分非常麻烦。我想要一种方法来指定节点。为了做到这一点,我在方程中摆弄了 \tikz{\node},但无济于事,如下所示
\documentclass[12pt]{article}
\usepackage{amsmath,amssymb,latexsym}
\usepackage{tikz}
\begin{document}
\tikzstyle{block} = [draw,fill=blue!60,minimum width=1.1 em, minimum height= 1em, rounded corners= 4pt]
\begin{figure}[h]
\centering
\begin{tikzpicture}
\coordinate (Eq1) at (1,2);
\coordinate (Eq2) at (1,1);
%\node[block] at (1,2) (block1) {};
\node at (Eq1) {$A = \tikz{ \node[fill=blue!60, rounded corners = 4pt, minimum size = 1 em]
(block1) {$B$};} + C$};
\node at (Eq2) {$D = E + F$};
\node[block] at (0, -0.5) (block2) {Blah};
\draw[->] (block1) -- (block2);
\end{tikzpicture}
\end{figure}
\end{document}
B 不再与等式的其他部分对齐,箭头卡在第二个块中。您能建议一个好的方法来实现这一点吗?谢谢!
编辑 根据第一个回复(顺便说一句,谢谢!)我想补充一点,此时我仍然希望在 tikz 图片中完成所有这些操作。对于下面的配对示例,我知道只执行 \begin\end{equation} 是有意义的,但对于我的实际应用,我希望进行更多操作,并将这个方程任意放置在更大的图表中。也许这仍然可以使用通常的 latex 方程命令来完成,但将其放在 tike 图片中似乎更自然
答案1
以下答案建立在您第二次尝试的基础上,并使用\tikzmark
-like 命令来实现注释效果。
代码
\documentclass[12pt]{article}
\usepackage{amsmath}
\usepackage{tikz}
\newcommand\mytikzmark[3][]{%
\tikz[remember picture,baseline=(#2.base)]{\node(#2)[outer sep=0pt,#1]{#3};}%
}
\begin{document}
\tikzset{block/.style={draw,fill=blue!60,minimum width=1.1 em, minimum height= 1em, rounded corners= 4pt}}
\begin{figure}[h]
\centering
\begin{tikzpicture}[remember picture]
\draw[help lines](-2,-1)grid(3,3); % shows background
\coordinate (Eq1) at (1,2);
\coordinate (Eq2) at (1,1);
\node at (Eq1) {$A = \mytikzmark[block]{block1}{$B$}+ C$};
\node at (Eq2) {$D = E + F$};
\node[block] at (0, -0.5) (block2) {Blah};
\draw[->] (block1) -- (block2);
\end{tikzpicture}
\end{figure}
I can also refer to \verb+(block1)+ outside of the figure like \mytikzmark[block]{block3}{this}.
\tikz[remember picture,overlay]{\draw[->](block3)to[bend right](block1);}
\end{document}
输出
顺便说一句,建议您使用\tikzset
而不是已弃用的\tikzstyle
。
答案2
- 不要使用节点手动对齐 LaTeX 已经知道如何对齐的内容。将方程式放入
align
环境中。将 s 放入方程式中是可以的tikzpicture
。您不需要它们在 中figure
。 - 正如 Herr K. 指出的那样,使用
overlay
和remember picture
。您可以在 的pgfmanual.pdf
第 17.13.1 节中阅读有关这些选项的内容。
以下是我的解决方案:
\documentclass[12pt]{article}
\usepackage{amsmath}
\usepackage{tikz}
\begin{document}
\tikzset{
block/.style = {draw,fill=blue!60,rounded corners= 4pt}
}
\begin{align}
A &= \tikz[remember picture,baseline=(B.base)] \node[block] (B) at (0,0) {B}; + C\\
D &= E + F
\end{align}
\begin{tikzpicture}[overlay,remember picture]
\node[block] (Blah) at (0,0) {Blah};
\draw (B) -- (Blah);
\end{tikzpicture}
\end{document}