[tex4ht] Too many DVI errors. stack empty at pop command, conficts, bm package, siunitx, dvilualatex

Michal Hoftich michal.h21 at gmail.com
Sat Jan 2 01:42:17 CET 2016


Hi Karl,

On Fri, Jan 1, 2016 at 11:56 PM, Karl Berry <karl at freefriends.org> wrote:
> I'm not sure if you determined if all of this is a dvisvgm bug,
> but if not:
>
>     Here is a MWE, which shows the issue. What happens is that
>     DVI creates corrupted DVI file or has an error making the dvi.
>
> When dviluatex (or any engine) creates a corrupted DVI file (i.e.,
> dvitype cannot successfully read it), under any reasonable
> circumstances, it's certainly an error.
>

For the file minimal.tex, I've got the error regardless of the used
engine, and the DVI file doesn't seem corrupted, both dvitype and
dviasm can open it. Also dvipng can convert it. But PS specials are
used, so that might be the culprit.

This is really strange, xfrac uses \raisebox from graphicx package,
this seems to be possible source of the PS specials. When I've tried
to add `\usepackage[dvipdfmx]{graphicx}`, dvisvgm compiled the
document without problems. This explains why Nassed didn't get an
error, because there was explicit
`\RequirePackage[dvipdfmx]{graphicx}` in the .mk4 file.

So this one seems like dvisvgm error. Could anyone try to run
minimal.tex with both dvilualatex and latex and dvisvgm?

Now back to Nasser's case, there are more problems it seems:

1. you should define image format to be svg in the .cfg file:

\Configure{Picture}{.svg}

otherwise you compile the images to svg, but in the document png are requested.

2. you used the wrong .mk4 file, you should use the previous one:

---

Make:add("dvisvgm","dvisvgm -n -TS1.25,1.25 -c 1.2,1.2 -p 1- ${input}.idv")

local max_count = 5
local image_format = "${input}-${zeroes}${page}.${ext}"
local oneimage_format = "${input}.${ext}"


local function file_exists(fn)
  local f = io.open(fn,"r")
  if f ==  nil then return false else f:close() return true end
end



local function locate_file(par,ext, count)
  local count = count or 0
  par.ext = ext
  local zeroes = string.rep("0",count)
  par.zeroes = zeroes
  if count > max_count then
    local one = oneimage_format % par
    if file_exists(one) then
      return one
    else
      return false, "max_count exceeded"
    end
  end
  local fn = image_format % par
  if file_exists(fn) then
    return fn
  else
    return locate_file(par, ext, count+1)
  end
end


if mode=="draft" then
  Make:htlatex {}
else
  Make:htlatex {}
  Make:htlatex {}
  Make:htlatex {}
end
Make:tex4ht {}
Make:t4ht {}
Make:dvisvgm{}
Make:image("svg$",function(arg)
  arg.input = arg.source:gsub(".idv$","")
  local fn,msg = locate_file(arg, "svg")
  if not fn then
    print("Image processing error: "..msg)
  else
    arg.filename = fn
    local cmd = "mv ${filename} ${output}" % arg
    print(cmd)
    os.execute(cmd)
  end
end
)
---

3. The strange thing is that dvisvgm can convert foo.dvi, but not
foo.idv. So it seems that corrupted file is created by tex4ht

4. when bm package is not used, the compilation goes without problems.
There is bm.4ht file, so we should investigate it further.

Best regards,
Michal


More information about the tex4ht mailing list