我正在尝试使用dvisvgm
手册中描述的驱动程序制作 TikZ 图片的 SVG 版本,但我却无法处理包含 PDF 图像的图片。
例子:
的内容red_circle.tex
,使PDF被包含:
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\draw [red,line width=2mm] (0,0) circle [radius=1];
\end{tikzpicture}
\end{document}
内容picture.tex
:
\documentclass[tikz,dvisvgm]{standalone}
\begin{document}
\begin{tikzpicture}
\draw [line width=4mm] (0,0) -- (1.5,1.5);
\node [draw,blue!50!white,line width=2mm,opacity=0.5]
{\includegraphics{red_circle}};
\end{tikzpicture}
\end{document}
第一个文件只是示例,用于获取要包含在第二个文件中的内容。这里我red_circle.pdf
使用 进行构建pdflatex
。
现在我尝试从第二个文件构建 SVG,如下所示:
latex picture
dvisvgm picture
但第一个命令失败LaTeX Error: File red_circle not found
。
我发现编译此文件的唯一方法是先转换red_circle.pdf
为 EPS。但结果看起来很糟糕:圆圈被严重栅格化,并且透明度丢失:
代替
有没有办法让这种包容发挥作用?
编辑:根据 David 的建议,我可以转换red_circle.pdf
为 SVG 或 PNG。如果我在调用中明确写入扩展名,则此方法有效\includegraphics
。但是有两个问题:
- 节点不透明度不适用于所包含的图像
- 该图像是通过引用另一个文件而包含的:
picture.svg
包含的代码有点<image height='83.14932' width='83.14932' xlink:href='red_circle.svg'/>
混乱并且并非在所有查看器中都有效(例如,我无法使用convert
ImageMagick 对文件进行后期处理)。
编辑2:正如AlexG所指出的,我只需要.pdf
在通话中指定\includegraphics
。
答案1
.pdf
扩展名列表中缺少文件扩展名
\def\Gin@extensions{.svg,.eps,.png,.jpg,.jpeg}
在graphic[sx]
驱动程序文件中dvisvgm.def
。
此外,扩展列表 会dvisvgm.def
被加载序列中的其他驱动程序包用过时的设置覆盖。因此,svg
、png
、jpeg
也被遗忘了。
要重新启用对这些图形格式的支持,请重新阅读dvisvgm.def
序言并手动添加.pdf
:
\documentclass[tikz,dvisvgm]{standalone}
\makeatletter
\input{dvisvgm.def}
\makeatother
\DeclareGraphicsExtensions{.pdf}
\begin{document}
\begin{tikzpicture}
\draw [line width=4mm] (0,0) -- (1.5,1.5);
\node [draw,blue!50!white,line width=2mm,opacity=0.5]
{\includegraphics{red_circle}};
\end{tikzpicture}
\end{document}
这是一个错误,应该报告给 LaTeX 团队。