我正在尝试在此基础上继续发展上一个问题。
绘制常规图形时,我可以使用 dvisvgm 特效成功指定节点和边缘 SVG 类。
使用此 MWE:
\documentclass[tikz,dvisvgm]{standalone}
\usepackage{tikz}
\usetikzlibrary{graphs}
\begin{document}
\begin{tikzpicture}[]
\special{dvisvgm:raw <g class="mainnode">}
\node (1) at (0, 0) {one};
\special{dvisvgm:raw </g>}
\end{tikzpicture}
\end{document}
我可以跑
$ latexmk -latex='dvilualatex' -dvi nolayout.tex
$ dvisvgm --zoom=-1 --optimize --font-format=woff2,autohint nolayout.dvi
特殊之处是正确地包装所创建的节点。
<g class="mainnode">
<g transform="translate(-7.5 -2.185)matrix(1.00375 0 0 -1.00375 61.437027 -66.642029)" stroke="none" fill="#000">
<text class="f0" x="-61.207499" y="-66.393055">one</text>
</g>
</g>
但是,如果我在此示例中使用图形绘制而不是手动指定坐标:
\documentclass[tikz,dvisvgm]{standalone}
\usepackage{tikz}
\usetikzlibrary{graphs, graphdrawing}
\usegdlibrary{layered}
\begin{document}
\begin{tikzpicture}[layered layout]
\special{dvisvgm:raw <g class="mainnode">}
\node (1) at (0, 0) {one};
\special{dvisvgm:raw </g>}
\end{tikzpicture}
\end{document}
特殊部分实际上并没有在 SVG 中包装生成的节点,而是没有内容。
<g class="mainnode"> </g>
<g stroke="none" transform="matrix(1.00375 0 0 -1.00375 61.437027 -66.642029)matrix(.996264 0 0 -.996264 -61.207499 -66.393055)translate(-7.5 -2.185)matrix(1.00375 0 0 -1.00375 61.437027 -66.642029)" stroke-miterlimit="10" fill="#000">
<text class="f0" x="-61.207499" y="-66.393055">one</text>
</g>
使用图形自动绘图时,如何用特殊元素包装生成的节点?
答案1
如果我将layered layout
选项从环境的可选参数移动tikzpicture
到实际\graph
命令,则输出 SVG 就可以了。
\begin{tikzpicture}%[layered layout]
\special{dvisvgm:raw <g class="mainnode">}
\graph[layered layout] {<group specification>};
\special{dvisvgm:raw </g>}
\end{tikzpicture}