Hi Nasser,
The strange thing, these happen now using normal math (i.e. no breqn and > no config.lua needed). Just inline math. > It is not strange, it is totally expected. These cases illustrate why these regular expressions were necessary. Anyway, this version of config.lua should process all mathjax contents. Hopefully. Best regards, Michal
local filter = require "make4ht-filter" local domfilter = require "make4ht-domfilter" local function process_options(options) -- convert [number={foo}] to \tag{foo} local number = options:match("number%s*=%s*{?(%w+)") if number then return "\\tag{" .. number .. "}" end return "" end local function escape_equal(str) -- there can be multiple equal characters in the string. we should put the & character -- just before the one which is not inside any group -- escape nested equal signs str = str:gsub("({[^{^}]+)=([^{^}]+})", "%1:EQUAL:%2") -- replace remaining = str = str:gsub("([^\n]+)", function(line) line = line:gsub("=", "&=", 1) return line .. "\n" end) -- str = str:gsub("=", "&=") -- return escaped = str = str:gsub(":EQUAL:", "=") return str end local function make_align(dgroup, new_env) -- change breqn environment contents to align* -- change = to &= -- local dgroup = escape_equal(dgroup) -- <- we don't do this anymore, it leads only to problems local new_env = new_env or "\\begin{align*}\n%s\n\\end{align*}" -- return the fixed text in align* environment -- return "\\begin{".. new_env .."}" .. dgroup .. "\\end{" .. new_env .. "}" return string.format(new_env, dgroup) end -- process remaining dmath environments local function process_dmath(s, env_name, new_env) return s:gsub("\\begin%s*{" .. env_name .. "}(.-)\\end%s*{" .. env_name .. "}", function(dmath) -- options can be still here local dmath = dmath:gsub("^%s*(%b[])", process_options) return make_align(dmath, new_env) end) end local function process_dgroup(s, env_name) return s:gsub("\\begin%s*{" .. env_name .. "}(.-)\\end%s*{" .. env_name .. "}", function(dgroup) -- remove environemnts dgroup = process_dmath(dgroup, "dmath%*", "\n%s\\\\\n") dgroup = process_dmath(dgroup, "dmath", "\n%s\\\\\n") local dgroup = escape_equal(dgroup) -- <- we don't do this anymore, it leads only to problems return make_align(dgroup) end) end local function escape_tags(tagname, s) return s:gsub("(" .. tagname .. "[^>]+mathjax[^>]+>)(.-)(</" .. tagname .. ">)", function(tag, text, endtag) local text = text:gsub("<", "<"):gsub(">", ">") return tag .. text .. endtag end) end local function escape_mathjax(s) local s = escape_tags("span", s) return escape_tags("div", s) end local process = filter { -- find all dgroup* environments and convert them to align* function(s) local s = process_dgroup(s,"dgroup%*") s = process_dgroup(s, "dgroup") -- process remaining dmath environments in the document s = process_dmath(s, "dmath%*", "\\[\n%s\n\\]") s = process_dmath(s, "dmath", "\\begin{equation}\n%s\n \\end{equation}") return s end, escape_mathjax } -- install filter to match HTML files Make:match("html?$", process)