我用制作4小时生成 html ;该过程的一部分是自定义构建文件,它解析HTML
并执行一些检查/操作:
mwe.tex
\documentclass{article}
\begin{document}
test: $2^3$
unbalanced: ($6)$
\section{test section}
more text
\end{document}
mwe.cfg
\Preamble{xhtml,mathml,next,5,-css,NoFonts}
\begin{document}
\EndPreamble
mwe.mk4
local domfilter = require "make4ht-domfilter"
local filter = require "make4ht-filter"
local dom = require "luaxml-domobject"
local function mwe_parsing(s)
local obj = dom.parse(s)
obj:traverse_elements(function(el)
end)
-- serialize the DOM object back to HTML
return obj:serialize()
end
local process = filter {mwe_parsing}
Make:match("html$", process)
Make:match("html$", "tidy -m -xml -utf8 -q -i ${filename}")
致电 make4ht
呼叫make4ht
是
make4ht -u -c mwe.cfg mwe.tex
结果是 HTML 文件,但第一个文件 ( ) 上的解析错误已停止对其他文件的mwe.html
解析和后续构建操作(在上面的 中)( )tidy
mwese1.html
parse_lg process file: mwe.html
...ive/2019/texmf-dist/tex/luatex/luaxml/luaxml-mod-xml.lua:174: Unbalanced Tag (/mrow) [char=848]
笔记
我知道问题出在哪里mwe.tex
,需要改成什么$(6)$
,但我无法控制我得到的源文件,而这个过程的一部分就是找到这样的错误。这个问题是htlatex:调整 MathML 输出以适应多位数字
问题
我该如何定制mwe.mk4
,以便它能解决 html 文件中的解析错误并继续构建过程?也许可以检查一下是否dom.parse(s)
成功?
答案1
问题是,LuaXML
当发现无效的 XML 结构时,会发出运行时错误。这在 中处理make4ht-domfilter
,但由于您自己解析 XML,因此您还必须处理错误。
要捕获错误,您可以使用该pcall
函数。以下构建文件需要的开发版本make4ht
,因为我发现pcall
默认情况下构建文件中没有。现在应该已经修复了。
local domfilter = require "make4ht-domfilter"
local filter = require "make4ht-filter"
local dom = require "luaxml-domobject"
local log = logging.new "build file"
local function mwe_parsing(s)
local status, obj = pcall(function()
return dom.parse(s)
end)
if not status then
log:warning("HTML parsing failed")
log:warning(obj)
return s
end
obj:traverse_elements(function(el)
end)
-- serialize the DOM object back to HTML
return obj:serialize()
end
local process = filter {mwe_parsing}
Make:match("html$", process)
Make:match("html$", "tidy -m -xml -utf8 -q -i ${filename}")
重要的部分是这样的:
local status, obj = pcall(function()
return dom.parse(s)
end)
if not status then
log:warning("HTML parsing failed")
log:warning(obj)
return s
end
当pcall
返回false
状态时,obj
变量包含错误消息。我们可以对此进行测试,使用内置make4ht
日志发出警告并返回原始文档。这将打印以下警告:
[WARNING] build file: HTML parsing failed
[WARNING] build file: /home/michal/texmf/scripts/lua/LuaXML/luaxml-mod-xml.lua:175: Unbalanced Tag (/mrow) [char=702]