Chapter 8
Make4ht Build Files
8.1 Commands execution
The following example uses a custom command, myhtlatex
, to determine if the
document needs a recompilation. It makes MD5 checksum of temporary files used by
TeX4ht
, before and after the compilation.
It checksums differ, new sections or labels were added to the document, and more LaTeX compilations may be necessary to ger correct hyperlinks. The script will execute LaTeX again, until checksums don’t change.
local htlatex = require "make4ht-htlatex" local function get_checksum(main_file, extensions) -- make checksum for temporary files local checksum = "" local extensions = extensions or {"aux", "4tc", "xref"} for _, ext in ipairs(extensions) do local f = io.open(main_file .. "." .. ext, "r") if f then local content = f:read("*all") f:close() -- make checksum of the file and previous checksum -- this way, we will detect change in any file checksum = md5.sumhexa(checksum .. content) end end return checksum end Make:add("myhtlatex", function(par) -- get checksum of temp files before compilation local checksum = get_checksum(par.input) local status = htlatex.htlatex(par) -- stop processing on error if status ~= 0 then return status end -- get checksum after compilation local newchecksum = get_checksum(par.input) -- this is needed to prevent possible infinite loops local compilation_count = 1 local max_compilations = 3 -- <- change as you want while checksum ~= newchecksum do -- if compilation_count > max_compilations then return status end status = htlatex.htlatex(par) -- stop processing on error if status ~= 0 then return status end checksum = newchecksum -- get checksum after compilation newchecksum = get_checksum(par.input) compilation_count = compilation_count + 1 end return status end) Make:myhtlatex {}
8.2 Filters
Some samples:
- Render math by Mathjax during tex4ht compilation https://tex.stackexchange.com/a/402159/2891