使用 MathML 时 make4ht \boxed 渲染错误

使用 MathML 时 make4ht \boxed 渲染错误

我的 MWE 是:

\documentclass{article} 
\usepackage{amsmath}

\begin{document}
\[
\boxed{A} \boxed{B}
\]
\end{document}

当我使用 pdflatex 进行编译时,我得到了并排的两个框,但是当使用类似的东西进行编译时,make4ht test.tex "mathml, mathjax"只有第一个框被正确呈现。这仅在使用 mathml 时发生,如果我使用进行编译,则make4ht test.tex "mathjax"一切都正确。

答案1

从编译过程中的这个警告信息可以看出出现了问题:

[WARNING] domfilter: /home/mint/texmf/scripts/lua/LuaXML/luaxml-mod-xml.lua:175: Unbalanced Tag (/mrow) [char=847]

这意味着生成的 HTML 代码包含一些严重错误,并且可能看起来不正确。

生成的 HTML + MathML 代码如下:

   <table class="equation-star"><tr><td>
<!--l. 5--><math 
 xmlns="http://www.w3.org/1998/Math/MathML"  
display="block" class="equation">
<menclose notation="box"><mrow>   <mi 
>A</mi>                                                             </mrow></menclose><menclose notation="box"><mrow><!--l. 6--><p class="indent" >   <mi 
>B</mi>                                                             </mrow></menclose>
</math></p></td></tr></table>

问题在于这个标签插入到了 MathML 中:<p class="indent" >。它不应该在那里。幸运的是,我们可以通过以下配置轻松阻止它boxed

\序言{xhtml}

\catcode`\:=11
\Configure{boxed}
   {\ifmathml \Tg<\a:mathml menclose \a:mathml notation="box">\Tg<\a:mathml mrow>%
    \else     \HCode{<span class="boxed">}\fi\IgnorePar}
   {\ifmathml \Tg</\a:mathml mrow>\Tg</\a:mathml menclose>%
    \else \HCode{</span>}\fi}
\catcode`\:=12
\begin{document}
\EndPreamble

它重用了原始的 TeX4ht 代码。唯一的变化是我们\IgnorePar在第二个参数中使用了命令。它应该可以防止插入虚假<p>标签。

经过这样的改变,结果是正确的:

  <table class='equation-star'><tr><td>
<!-- l. 5 --><math class='equation' display='block' xmlns='http://www.w3.org/1998/Math/MathML'><mrow>
<menclose notation='box'><mrow>   <mi>A</mi>                                                             </mrow></menclose><menclose notation='box'><mrow>   <mi>B</mi>                                                             </mrow></menclose>
</mrow></math></td></tr></table>

相关内容