使用 --lua 选项将 latex 文件编译为 html 时,使用 tex4ht 和 make4ht 包含 png 文件会失败

使用 --lua 选项将 latex 文件编译为 html 时,使用 tex4ht 和 make4ht 包含 png 文件会失败

lua我正在尝试编译包含代码的latex 文档tex4ht。我也制作4小时用于将 latex 构建为 html。

根据make4ht选项上的帮助--lua可以使用lualatex进行编译。

编译工作正常,但当文档中包含 .png 图像时,就会出错。以下是 MWE

\documentclass{article}
\usepackage[utf8]{luainputenc}  %is this needed? tried with and without
\usepackage{graphicx}
\begin{document}
test 
\includegraphics{some_image.png}
\end{document}

当使用上述代码进行编译时make4ht -u foo5.tex,编译成功。但当使用

make4ht --lua  -u foo5.tex

然后失败了:

Compiler:   dvilualatex
Latex options:   -jobname=foo5 
tex4ht.sty :    xhtml,,charset=utf-8
(/usr/local/texlive/2015/texmf-dist/tex/generic/tex4ht/html4.4ht)
(/usr/local/texlive/2015/texmf-dist/tex/generic/tex4ht/html4-math.4ht))
(./foo5.aux)
! String contains an invalid utf-8 sequence.
<read 0> 
   �PNG
l.6 \includegraphics{some_image.png}

我也试过

 make4ht --lua  foo5.tex

仅当包含 .png 图像时才会出现此问题。

在 Linux mint 上使用 TL 2015 64 位。

答案1

此错误可能与 没有任何共同之处tex4ht。尝试使用 编译以下文件dvilualatex

\documentclass{article}
\usepackage[]{graphicx}
\begin{document}
\includegraphics{someimage.png}
\end{document}

错误信息是一样的。

问题在于\includegraphics尝试确定图像边界框并读取文件中的信息,这在旧的 8 位 TeX 引擎中有效,但它可能会混淆 unicode 引擎,因为图像内容可能包含不支持的 unicode 字符的值。每个不支持的字符代码都会显示错误,这很容易超出错误限制,导致编译失败。

因为模式png中不支持图像dvi,所以它实际上不应该工作,但是当您尝试png在 LaTeX 中包含图像时,会显示一些更有意义的错误消息:

! LaTeX Error: Cannot determine size of graphic in someimage.png (no BoundingBox).

并且至少文档可以编译。也许这种行为也应该用于dvilualatex

要修复此问题,您可以使用两种方法:

  1. 使用图形规则。尝试以下配置文件:

    \Preamble{xhtml}
    \DeclareGraphicsExtensions{.png,.jpg,.gif}
    \DeclareGraphicsRule{.png}{bmp}{.xbb}{}
    \DeclareGraphicsRule{.jpg}{bmp}{.xbb}{}
    \DeclareGraphicsRule{.gif}{bmp}{.xbb}{}
    \begin{document}
    \EndPreamble
    

如果你.xbb为每个图像创建文件

ebb -x imagename

那么包含的图像将具有正确的尺寸。您也可以停止在 中使用图像扩展\includegraphics,只需使用:

\includegraphics{some_image}
  1. 使用dvipdfmx驱动程序graphicx包:

     \usepackage[dvipdfmx]{graphicx}
    

请注意,编译为时不能使用它pdf。因此您应该有条件地包含它。或者更好的是,使用make4ht功能在文档包含之前插入 LaTeX 代码。使用这个简单的mk4文件:

  Make:htlatex {packages = "\\RequirePackage[dvipdfmx]{graphicx}"}

所以您现在不必修改文档。我们必须使用\RequirePackage而不是\usepackage因为代码在 之前执行\documentclass

关于luainputenc:如果您不需要unicode字符,则不必使用它。尝试在没有包的情况下编译文档,看看是否一切正常。

相关内容