在 Windows 中将较新版本的 ImageMagick 与 MikTeX 和 tex4ht 一起使用时,需要在前言中使用技巧来强制调用 tex4ht,magick convert
而不是以前使用的 convert.exe,后者在 Windows 安装中不再存在。
鉴于上述情况,是否有办法至少调用 ImageMagick 参数,例如-trim -density 110x110 -transparent #FFFFFF
通过使用下面列出的前言?
\Preamble{xhtml}
\DeclareGraphicsExtensions{.svg,.png,.jpg}
\Configure{Picture}{.svg}
\Configure{graphics*}
{eps}
{\openin15=\csname Gin@base\endcsname\PictExt\relax%
\ifeof15%
\Needs{"magick convert \csname Gin@base\endcsname.eps \csname Gin@base\endcsname\PictExt"}%
\fi%
\closein15%
{\Configure{Needs}{File: \csname Gin@base\endcsname\PictExt}\Needs{}}%
\Picture[\csname a:GraphicsAlt\endcsname]{{\csname Gin@base\endcsname\PictExt} \csname a:Gin-dim\endcsname
}}
\ifdefined\HCode\else .... \fi
\DeclareMathSizes{12}{14}{10}{8}
\ConfigureEnv{tabular}
{\HCode{}}{\HCode{}}{}{}
\ConfigureEnv{figure}
{\HCode{}}{\HCode{}}{}{}
\Configure{float}
{\ifOption{refcaption}{}{\csname par\endcsname\ShowPar \leavevmode}}
{\HCode{}}
{\ifvmode \IgnorePar \fi\EndP \HCode{}\csname par\endcsname\ShowPar}
\Css {body {margin-top: 100px;
margin-right: 400px;
margin-bottom: 10px;
margin-left: 400px;
}
}
\begin{document}
\EndPreamble
答案1
首先,对于EPS
、PDF
和 ,最好在编译之前将文件转换为 HTML 支持的格式。这可以在编译过程中节省大量时间。
如果您确实想要指示tex4ht
转换它们,则配置文件中的重要配置如下:
\Configure{graphics*}
{eps}
{\openin15=\csname Gin@base\endcsname\PictExt\relax%
\ifeof15%
\Needs{"magick convert \csname Gin@base\endcsname.eps \csname Gin@base\endcsname\PictExt"}%
\fi%
\closein15%
{\Configure{Needs}{File: \csname Gin@base\endcsname\PictExt}\Needs{}}%
\Picture[\csname a:GraphicsAlt\endcsname]{{\csname Gin@base\endcsname\PictExt} \csname a:Gin-dim\endcsname
}}
eps
这是图形的配置。\openin
和\ifeof
命令测试是否已存在转换后的文件,如果存在则不执行转换。 命令\csname Gin@base\endcsname
包含图像基名,不带扩展名。 包含\PictExt
图片tex4ht
格式,.png
默认情况下为,但您svg
使用进行了选择\Configure{Picture}{.svg}
。
该\Needs
命令包含用于转换的 shell 命令。因此,如果您想使用其他参数,则应将它们放在此处:
\Needs{"magick convert -trim -density 110x110 -transparent \#FFFFFF \csname Gin@base\endcsname.eps \csname Gin@base\endcsname\PictExt"}%
顺便说一句,我发现 ImageMagick 并不能真正生成好的 SVG,因为它只是将 EPS 转换为 PNG,然后将其包含在 SVG 中,因此矢量信息丢失了。我已将以下代码添加到tex4ht
源中:
\Needs{"epstopdf '\csname Gin@base\endcsname.eps' && pdf2svg '\csname Gin@base\endcsname.pdf' '\csname Gin@base\endcsname.svg'"}
这种方法保留了矢量信息,因此生成的图像质量更高。缺点是pdf转svg必须由用户安装,因为它不包含在 TL 中。