我有一个.svg
具有多个图层的图形(用 inkscape 创建),我想将它们包含在 beamer 演示文稿中,以便图层逐步出现。
- 幻灯片 1 -> 图层 1
- 幻灯片 2 -> 层 1+2
- 幻灯片 3 -> 层 1+2+3
- ... ETC
我可以.eps
用不同的步骤生成多个,但由于我的图是不断增长的图形,所以我必须处理这些框,这真的很麻烦。而且这不能很好地扩展。
是否有任何简单/自动的方法来生成一个逐层.pdf
出现的多页(我可以将其包含在 beamer 中)或(更好的是)将多层导出.svg
到具有时间步骤的 tikz?
答案1
您可以使用\includesvglayer
命令来自mycommands.sty
(我编写的一个用于对此类常用实用程序进行分组的包)。
它调用 Python 脚本inkscape2scenes.py
(参见分支dev
)调用inkscape
将 SVG 中定义的图层组合导出为使用picture
LaTeX 内的环境叠加的单独 PDF + 文本(通常的 PDF+LaTeX 导出inkscape
)。
然后将这些图层组合放在不同的幻灯片中,以便通过幻灯片前进逐步显示它们。导出图层组合的可能性允许根据需要选择自定义组合,这样就不会在不同幻灯片中存在的图层之间施加严格的子集关系。
inkscape2scenes.py
是基于inkscapeslide
。还有inkslides
,重写inkscapeslide
答案2
这export_overlays
BeamerScape 的脚本基本上是这样做的:
- 您可以组合每个输出步骤中可见的一组图层;只需在 inkscape 中的图层名称中放入正常的 beamer 样式规范(
<1-2,4> Cat Layer
,<3> Dog Layer
)。您应该export_overlays
控制整个框架(因此首先让您的 SVG 具有适当的纵横比)。export_overlays
将使用 textpos 在 .tex 文件中组合图层,您可以愉快地使用它\input{}
。 - 如果您将图层与投影仪动画步骤进行 1:1 映射,然后
\includegraphics
像平常一样使用您自己的命令包含它们并忽略生成的overlay.tex
.
答案3
在 Inkscape 中的每个图层中添加一个文本对象,并在 tex 文件中\pause
简单使用。这就像一个 hack,但它确实有效。\includesvg
该方法还可以通过添加类似\onslide<2-3>\transfade<2>\transduration<2>{0.75}
文本对象的内容来创建更复杂的效果。
答案4
有一个方便的脚本可用https://github.com/berteh/svg-objects-export可以按如下方式使用,提取由 inkscape 生成的名为 的 SVG 文件的每个层的 PDF 文件image.svg
:
svg-objects-export.py --type pdf --xpath "//svg:g[@inkscape:groupmode='layer']" --extra '--export-area-page --export-id-only' image.svg
由于文件命名方式svg-objects-export.py
(基于 SVG ID),您可能需要将每个生成的文件从类似于重命名为image_layer1.pdf
,image_layer-1.pdf
这是一种适用于xmpmulti
类(下面使用)的形式。[如果有更简单的方法来正确命名文件,请编辑此答案!]
获得(重命名的)PDF 文件后,您应该能够使用以下命令相对轻松地将它们包含在 beamer 中:
\usepackage{xmpmulti}
....
\begin{document}
\begin{frame}{MyFrame}
\multiinclude[<+>]{format=pdf}{image_layer}
\end{frame}
\end{document}