-- use Latexmk in first LaTeX call -- only in the first call, because we don't need to execute biber, etc. in the subsequent -- LaTeX calls, these are only for resolving the cross-references local M = {} function M.modify_build(make) local used = false local first local build_seq = make.build_seq -- find first htlatex call in the build sequence for pos,v in ipairs(build_seq) do if v.name == "htlatex" and not first then first = pos end end -- we need to save contents of the .tmp file, to prevent extra executions from latexmk -- tex4ht command overwrites content that was set by LaTeX with it's own stuff local tmp_file make:add("save_tmp", function(par) local f = io.open(mkutils.file_in_builddir(par.input .. ".tmp", par), "r") if f then tmp_file = f:read("*all") f:close() end return 0 end) make:add("load_tmp", function(par) if tmp_file then local f = io.open(mkutils.file_in_builddir(par.input .. ".tmp", par), "w") if f then f:write(tmp_file) end end return 0 end) -- if htlatex was found if first then -- handle tmp file make:load_tmp {} make:save_tmp {} -- add dummy latexmk call to the build sequence make:latexmk {} -- replace name, command and type in the first htlatex -- call with values from the dummy latexmk call local replaced = build_seq[first] local latexmk = build_seq[#build_seq] replaced.name = latexmk.name replaced.command = latexmk.command replaced.type = latexmk.type -- remove the dummy latexmk table.remove(build_seq) end -- remove htlatex calls from the build sequence, they are unnecessary local new_build_seq = {} for pos, v in ipairs(build_seq) do if v.name ~= "htlatex" and v.name ~= "tex4ht" then table.insert(new_build_seq, v) elseif v.name == "tex4ht" then -- insert save_tmp before tex4ht table.insert(new_build_seq, build_seq[#build_seq]) -- remove save_tmp from the end table.remove(build_seq) -- and now insert tex4ht table.insert(new_build_seq, v) end end make.build_seq = new_build_seq return make end return M