如何在使用 dvisvgm 时包含 pdf

如何在使用 dvisvgm 时包含 pdf

我正在尝试使用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'/>混乱并且并非在所有查看器中都有效(例如,我无法使用convertImageMagick 对文件进行后期处理)。

编辑2:正如AlexG所指出的,我只需要.pdf在通话中指定\includegraphics

答案1

.pdf扩展名列表中缺少文件扩展名

\def\Gin@extensions{.svg,.eps,.png,.jpg,.jpeg}

graphic[sx]驱动程序文件中dvisvgm.def

此外,扩展列表 会dvisvgm.def被加载序列中的其他驱动程序包用过时的设置覆盖。因此,svgpngjpeg也被遗忘了。

要重新启用对这些图形格式的支持,请重新阅读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 团队。

相关内容