我正在使用 XeLatex 和 dvisvgm 生成 .svg 文件。我想使用 \includegraphics 包含一个 .png 图像,但它不起作用:有一个替换图像而不是我想要的图像。
以下是我用来编译的内容(见下页):
END {
system("xelatex -no-pdf svgbeamer.tex && xelatex -no-pdf svgbeamer.tex && dvisvgm --font-format=ttf --exact --zoom=-1 -p1,- svgbeamer.xdv")
}
以下是我的简单示例:
\documentclass[dvisvgm,aspectratio=169]{beamer}
\setbeamersize{text margin left=0cm} %to get real fullscreen
\begin{document}
\includegraphics[height=8cm]{banane.png}
\end{document}
仅使用 XeLatex 编译的相同代码就可以正常运行。
有什么线索吗?
PS:图片是
答案1
PNG(以及其他兼容 Web 的位图格式,如 JPEG 和 GIF)并未物理嵌入到 SVG 输出中dvisvgm
,仅通过外部链接引用。只有 PostScript 和 PDF(大多数静态位图格式可使用外部转换器(如 ImageMagick)转换或包装成它们)才嵌入到 SVG 输出中。它们保持独立,并且必须在运行时由 Web 浏览器找到。
为了使 SVG 自给自足,位图文件必须采用 base64 编码并嵌入为data:image/png;base64,...
数据 blob。这可以按如下方式完成,修补graphicx
后端驱动程序dvisvgm
。
这需要media4svg
较新版本的软件包(>= v0.9 2022-08-12)。
排版
dvilualatex svgbeamer
dvisvgm --font-format=woff2 --bbox=papersize --zoom=-1 -p1,- svgbeamer
或者
latex --shell-escape svgbeamer
dvisvgm --font-format=woff2 --bbox=papersize --zoom=-1 -p1,- svgbeamer
或者
xelatex --no-pdf --shell-escape svgbeamer
dvisvgm --font-format=woff2 --bbox=papersize --zoom=-1 -p1,- svgbeamer.xdv
\documentclass[dvisvgm,aspectratio=169]{beamer}
%\graphicspath{{myimages}} % add search dirs as needed
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% patch graphics backend driver `dvisvgm.def' to physically embed
% bitmaps into DVI
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\makeatletter
\let\Ginclude@bitmapOrig\Ginclude@bitmap
\def\Ginclude@bitmap#1{%
\baseSixtyFour{#1}{72}{{?nl}}\bitmap@stream%
\Ginclude@bitmapOrig{%
data:image/\expandafter\remove@dot\Gin@ext;;base64,{?nl}%
\bitmap@stream}%
}
\def\remove@dot.#1;{#1}
\makeatother
\RequirePackage{media4svg} % provides base64-encode utility
\ExplSyntaxOn
\cs_new:Npn\baseSixtyFour#1#2#3#4{
\sys_if_engine_luatex:TF{
\xdef#4{\directlua{media4svg.base64("#1",#2,"#3")}}
}{
\msvg_convert_file_to_blob:nnnN{#1}{#2}{#3}#4
}
}
\ExplSyntaxOff
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\begin{frame}{Embedded PNG}
\includegraphics[height=6cm]{banane.png}
\end{frame}
\end{document}