有没有办法避免在 TikZ PDF 创建的 SVG 中出现深度嵌套的组?

有没有办法避免在 TikZ PDF 创建的 SVG 中出现深度嵌套的组?

假设我有一个包含许多单独的 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 图像不是有嵌套问题!它的组不太有用,但至少我可以选择我想移动的内容(并手动分组)。

相关内容