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