假设我有一个包含许多单独的 TikZ 图片的文档(在我的例子中是几十张):
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\foreach \i in {1,...,20} {%
\begin{tikzpicture}
\node[draw,circle,fill=gray!20!white] {\i};
\end{tikzpicture}
}%
\end{document}
我使用 LuaLaTeX 编译为 PDF。现在,我想使用这些编程图形作为 Inkscape 中的构建块,进行交互式图像创建(如果您一定要知道的话,可以创建一个公寓平面图):
编写那个门宏花了我一整晚的时间,但我跑题了。重点是,我想将 PDF 导入 Inkscape(在大多数情况下效果很好!),然后将单个家具(或者在我们的示例中为圆圈)从一个文档复制粘贴到另一个文档,并以一致的方式排列它们。
问题如下:
第 20 张图片嵌套了 20 层,需要至少 40 次点击才能到达(通常更多)。我不明白这种嵌套是怎么回事,但它严重破坏了我的工作流程。
那么,从 LaTeX 的角度来看:有什么方法可以控制 SVG 结果(如果有的话),无论间接地如何?具体来说,就是分组和组命名。
答案1
通过dvisvgm
一个人,可以完全控制对象的 svg 分组。
在下面的示例代码中,每个 TikZ 节点都嵌入到一个具有单独 ID 的 SVG 组中:
\documentclass{standalone}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\begin{document}
\foreach \i in {1,...,20} {%
\begin{tikzpicture}
\special{dvisvgm:raw <g id="node\i">}
\node[draw,circle,fill=gray!20!white] {\i};
\special{dvisvgm:raw </g>}
\end{tikzpicture}
}%
\end{document}
mwe.tex
排版示例
dvilualatex mwe
dvilualatex mwe
dvisvgm --no-fonts --zoom=-1 mwe
答案2
我刚刚在一起编写 MWE 时意识到,如果我进行转换而不是导入:
lualatex -interaction=nonstopmode mwe.tex
# This is LuaTeX, Version 1.07.0 (TeX Live 2018)
# whoops ...
# <snip>
inkscape --export-type=svg mwe.pdf > mwe.svg
# Inkscape 1.0
生成的 SVG 图像不是有嵌套问题!它的组不太有用,但至少我可以选择我想移动的内容(并手动分组)。