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




Reply via email to