代码

代码

我在 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

  1. 不要使用节点手动对齐 LaTeX 已经知道如何对齐的内容。将方程式放入align环境中。将 s 放入方程式中是可以的tikzpicture。您不需要它们在 中figure
  2. 正如 Herr K. 指出的那样,使用overlayremember 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}

在此处输入图片描述

相关内容