TikZ 动画的幻影节点

TikZ 动画的幻影节点

我正在 TikZ 中编写动画,其中我经常让一个节点出现在不同的上下文中,并希望为它从一个设置到另一个设置的路径设置动画,现在我正在使用不可见(opacity=0)节点准备设置以计算坐标和锚点,然后创建一个可见的节点,该节点会进行动画处理。这是一个 MWE:

\documentclass[dvisvgm]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning}
\usetikzlibrary{animations}
\begin{document}
\begin{tikzpicture}[scale=4,transform shape]
    \node[circle, draw, ultra thick, fill=blue!20] (Go) at (0,-2) {Go!};

    \begin{scope}[
            every node/.style={opacity=0.2, draw},
            baseline,
            node distance=0
        ]
        \node (start-M) at (0,0) {Minimal};
        \node (start-E) [base right=of start-M] {example};
        \node (end-M) at (0,-1) {Minimal};
        \node (end-W) [base right=of end-M] {working};
        \node (end-E) [base right=of end-W] {example};
    \end{scope}

    \node (M) :position={0s="{(start-M.center)}" base, 1s="{(end-M.center)}", freeze, begin on ={click, of=Go}} {Minimal};
    \node (W) at (end-W) :opacity={0s="0" base, 1s="1", freeze, begin on={click, of=Go}} {working};
    \node (E) :position={0s="{(start-E.center)}" base, 1s="{(end-E.center)}", freeze, begin on={click, of=Go}} {example};
\end{tikzpicture}
\end{document}

这里我设置了opacity=0.2而不是 ,0这样你就能看到节点了。参见生成的 SVG 文件(单击“前往”按钮)。

我想知道,是否有可能让不可见范围的节点根本不出现在 SVG 文件中?我只需要它们来计算位置,然后使用这些位置来绘制可见节点。

答案1

更新

我不认为它会被编译,但令我惊讶的是它确实被编译了。

scope只需将用于计算动画路径的起始和终止坐标的整个代码包装在\phantom{...}或 未使用的中lrbox即可。此代码不会在生成的 SVG 中产生任何痕迹,但却实现了定义所需坐标的目的。

latex使用(2x)编译为 SVG并dvisvgm --font-format=woff --exact --zoom=-1在中间 DVI 上:

\documentclass[dvisvgm]{article}
\pagestyle{empty}

\usepackage{tikz}
\usetikzlibrary{positioning}
\usetikzlibrary{animations}
\begin{document}
\begin{tikzpicture}[transform shape]
    \node[circle, draw, ultra thick, fill=blue!20] (Go) at (0,-2) {Go!};

    \begin{lrbox}{0}
    \begin{scope}[
            every node/.style={opacity=0.2, draw},
            baseline,
            node distance=0
        ]
        \node (start-M) at (0,0) {Minimal};
        \node (start-E) [base right=of start-M] {example};
        \node (end-M) at (0,-1) {Minimal};
        \node (end-W) [base right=of end-M] {working};
        \node (end-E) [base right=of end-W] {example};
    \end{scope}
    \end{lrbox}

    \node (M) :position={0s="{(start-M.center)}" base, 1s="{(end-M.center)}", freeze, begin on ={click, of=Go}} {Minimal};
    \node (W) at (end-W) :opacity={0s="0" base, 1s="1", freeze, begin on={click, of=Go}} {working};
    \node (E) :position={0s="{(start-E.center)}" base, 1s="{(end-E.center)}", freeze, begin on={click, of=Go}} {example};
\end{tikzpicture}
\end{document}

相关内容