在 magick 转换期间将 ImageMagick 参数强制纳入 tex4ht(Windows)

在 magick 转换期间将 ImageMagick 参数强制纳入 tex4ht(Windows)

在 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

首先,对于EPSPDF和 ,最好在编译之前将文件转换为 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 中。

相关内容