On 4/19/2022 4:30 AM, Michal Hoftich wrote:
Hi Nasser
Thanks, but the issue is, how does one know if they
need to run it 1, 2 or 3 times? What code do I need to add
to the above to decide?
With lualatex, now this is what I do and it works (other option is to
use latexmk, but for some other reasons, I prefer to stick to makefiles
for now).
One possibility is to use the latexmk_build extension, like in:
make4ht -f html5+latexmk_build sample.tex
Another option is to check temporary files for changes. Using some
hash function. Like in this build file:
--------------------
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)
end
return status
end)
Make:myhtlatex {}
-----------------------------
Best regards,
Michal
Hello Michal;
Just a clarification. I now trying using your build file above to optimize
the number of times tex4ht is called.
Do I need to also add
\Preamble{xhtml}
\typeout{(\jobname.4tc)}
\begin{document}
\EndPreamble
to my .cfg? or is this above for use with the other method you showed
which is using latexml?
So if I just want to use the above build file, is it enough to just
load it using -e build_file.mk4 where build_file.mk4 is what you
show above or do I need to do something more to my .cfg?
btw, when I try the above on a simple file, it calls
tex4ht twice starting from clean folder. I assume this is normal?
i.e. from clean folder:
--------------------------
cat report.tex
\documentclass[11pt]{book}
\begin{document}
test
\end{document}
-------------------
and now
----------------------------
make4ht --shell-escape -ulm default -a debug
-c nma_mathjax.cfg
--build-file $TEXMFHOME/tex/latex/tex4ht_build_files/MAIN.mk4
report.tex
"mathjax,htm,fn-in,1,notoc*,p-width,charset=utf-8" "-cunihtf -utf8" ""
"--interaction=batchmode"
---------------
Shows it calls dvilualatex twice
[INFO] htlatex: LaTeX call: dvilualatex --interaction=errorstopmode -jobname='report'
--interaction=batchmode -shell-escape
'\makeatletter\def\HCode{\futurelet\HCode\HChar}\def\HChar{\ifx"\HCode\def\HCode"##1"{\Link##1}\expandafter\HCode\else\expandafter\Link\fi}\def\Link#1.a.b.c.{\AddToHook{class/before}{\RequirePackage[#1,html]{tex4ht}}\let\HCode\documentstyle\def\documentstyle{\let\documentstyle\HCode\expandafter\def\csname
tex4ht\endcsname{#1,html}\def\HCode####1{\documentstyle[tex4ht,}\@ifnextchar[{\HCode}{\documentstyle[tex4ht]}}}\makeatother\HCode
nma_mathjax.cfg,mathjax,htm,fn-in,1,notoc*,p-width,charset=utf-8,charset=utf-8,html5.a.b.c.\input
"\detokenize{report.tex}"'
This is LuaTeX, Version 1.15.0 (TeX Live 2022)
system commands enabled.
[INFO] htlatex: LaTeX call: dvilualatex --interaction=errorstopmode
-jobname='report'
--interaction=batchmode -shell-escape
'\makeatletter\def\HCode{\futurelet\HCode\HChar}\def\HChar{\ifx"\HCode\def\HCode"##1"{\Link##1}\expandafter\HCode\else\expandafter\Link\fi}\def\Link#1.a.b.c.{\AddToHook{class/before}{\RequirePackage[#1,html]{tex4ht}}\let\HCode\documentstyle\def\documentstyle{\let\documentstyle\HCode\expandafter\def\csname
tex4ht\endcsname{#1,html}\def\HCode####1{\documentstyle[tex4ht,}\@ifnextchar[{\HCode}{\documentstyle[tex4ht]}}}\makeatother\HCode
nma_mathjax.cfg,mathjax,htm,fn-in,1,notoc*,p-width,charset=utf-8,charset=utf-8,html5.a.b.c.\input
"\detokenize{report.tex}"'
This is LuaTeX, Version 1.15.0 (TeX Live 2022)
system commands enabled.
.....
[STATUS] make4ht: Conversion finished
Is the above expected? why 2 times on this simple file?
But when now I use the same command again, but do not
clear the folder and keep all intermediate files generated from earlier
command, it now calls dvilualatex one time only and not 2 times.
Just wanted to make sure this is all what is expected as I want
to use this in my main makefiles.
Thank you,
--Nasser