3

For some reason, after recent update of texlive, tex4ht in mathjax mode no longer generate valid math for this

\documentclass[12pt]{article} 
\usepackage{amsmath}
\begin{document}   
\[
\frac{\partial u}{\partial x}=0
\]
\end{document}

Compiled using

 make4ht -ulm default -a debug foo.tex "mathjax,htm"

Gives

enter image description here

But lualatex foo.tex gives the correct output

enter image description here

The HTML generated is

<!DOCTYPE html> 
<html lang='en-US' xml:lang='en-US'> 
<head><title></title> 
<meta charset='utf-8' /> 
<meta content='TeX4ht (https://tug.org/tex4ht/)' name='generator' /> 
<meta content='width=device-width,initial-scale=1' name='viewport' /> 
<link href='foo.css' rel='stylesheet' type='text/css' /> 
<meta content='foo.tex' name='src' /> 
<script>window.MathJax = { tex: { tags: "ams", }, }; </script> 
 <script async='async' id='MathJax-script' src='https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml-full.js' type='text/javascript'></script>  
</head><body>
<!-- l. 9 --><p class='noindent'>\[ \frac {

tial u}{

tial x}=0 \]
</p>   
 
</body> 
</html>

What happened? Why tex4ht no longer generates correct math? This only happens when using mathjax mode. When not using mathjax mode, the output is correct.

TL 2021 updated about 2 weeks ago on Linux.

ps. issue added to tex4ht

4
  • 2
    \par from \partial has been changed to a blank line which looks.... unfortunate Commented Dec 1, 2021 at 22:32
  • @michal.h21 sorry I had a stray mkutils.lua (from I think answering an earlier question here about something) I deleted it.... Commented Dec 2, 2021 at 10:50
  • @DavidCarlisle ah, that explains it nicely :)
    – michal.h21
    Commented Dec 2, 2021 at 12:18
  • 1
    @Nasser; Good catch...
    – MadyYuvi
    Commented Dec 2, 2021 at 14:55

1 Answer 1

3

Thanks for the report. This issue was caused by previous change to the MathJax processing. The problem was that paragraphs in MathMode produced \par command instead of blank lines. I've used regex to fix that, but the issue is that it replaces \partial with two blank lines and string "tial". I've updated the regex, so it requires some white space after \par, which seems to fix the issue.

Here is updated version of mathjax-latex-4ht.4ht:

% mathjax-latex-4ht.sty (2021-12-02-10:19), generated from tex4ht-mathjax.tex
% Copyright 2018-2021 TeX Users Group
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either
% version 1.3c of this license or (at your option) any
% later version. The latest version of this license is in
%   http://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions
% of LaTeX version 2005/12/01 or later.
%
% This work has the LPPL maintenance status "maintained".
%
% The Current Maintainer of this work
% is the TeX4ht Project <http://tug.org/tex4ht>.
%
% If you modify this program, changing the
% version identification would be appreciated.
\immediate\write-1{version 2021-12-02-10:19}


\ExplSyntaxOn
\cs_new_protected:Npn \alteqtoks #1
{
  \tl_set:Nx \l_tmpa_tl {\detokenize{#1}}
  % % replace < > and & with xml entities
  \regex_replace_all:nnN { \x{26} } { &amp; } \l_tmpa_tl
  \regex_replace_all:nnN { \x{3C} } { &lt; } \l_tmpa_tl
  \regex_replace_all:nnN { \x{3E} } { &gt; } \l_tmpa_tl
  % replace \par command with blank lines
  \regex_replace_all:nnN { \x{5C}par\b } {\x{A}\x{A}} \l_tmpa_tl
  \tl_set:Nx \l_tmpb_tl{ \l_tmpa_tl }
  \HCode{\l_tmpb_tl}
}
\ExplSyntaxOff

\NewConfigure{MathJaxConfig}{1}

\long\def\AltlMath#1\){\expandafter\alteqtoks{\(#1\)}\)}
\long\def\AltlDisplay#1\]{\alteqtoks{\[#1\]}\]}
\long\def\AltMathOne#1${\alteqtoks{\(#1\)}$}
% this seems a bit hacky -- we need to skip some code inserted at the
% beginning of each display math
\long\def\AltlDisplayDollars\fi#1$${\alteqtoks{\[#1\]}$$}

\newcommand\VerbMathToks[2]{%
  \alteqtoks{\begin{#2}
    #1
  \end{#2}}%
}
\ExplSyntaxOn
\newcommand\VerbMath[1]{%
  \cs_if_exist:cTF{#1}{
    \RenewDocumentEnvironment{#1}{+!b}{%
      \NoFonts\expandafter\VerbMathToks\expandafter{##1}{#1}\EndNoFonts%
    }{}
  }{}%
}
\ExplSyntaxOff
\def\fixmathjaxtoc#1{\Configure{writetoc}{\def#1{\detokenize{#1}}}}
\def\fixmathjaxsec#1{\def#1{\detokenize{#1}}}

\AtBeginDocument{%
\VerbMath{subarray}
\VerbMath{smallmatrix}
\VerbMath{matrix}
\VerbMath{pmatrix}
\VerbMath{bmatrix}
\VerbMath{Bmatrix}
\VerbMath{vmatrix}
\VerbMath{Vmatrix}
\VerbMath{cases}
\VerbMath{subequations}
\VerbMath{aligned}
\VerbMath{alignedat}
\VerbMath{gathered}
\VerbMath{gather}
\VerbMath{gather*}
\VerbMath{alignat}
\VerbMath{alignat*}
\VerbMath{xalignat}
\VerbMath{xalignat*}
\VerbMath{xxalignat}
\VerbMath{align}
\VerbMath{align*}
\VerbMath{flalign}
\VerbMath{flalign*}
\VerbMath{split}
\VerbMath{multline}
\VerbMath{multline*}
\VerbMath{equation}
\VerbMath{equation*}
\VerbMath{math}
\VerbMath{displaymath}
\VerbMath{eqnarray}
\VerbMath{eqnarray*}
\ConfigureEnv{gather}{}{}{}{}
\ConfigureEnv{gather*}{}{}{}{}
\ConfigureEnv{multline}{}{}{}{}
\ConfigureEnv{multline*}{}{}{}{}
\fixmathjaxsec\left
\fixmathjaxsec\right
\fixmathjaxtoc\int
\fixmathjaxtoc\,
\fixmathjaxtoc\sin
\fixmathjaxtoc\cos
\fixmathjaxtoc\tan
\fixmathjaxtoc\arcsin
\fixmathjaxtoc\arccos
\fixmathjaxtoc\arctan
\fixmathjaxtoc\csc
\fixmathjaxtoc\sec
\fixmathjaxtoc\cot
\fixmathjaxtoc\sinh
\fixmathjaxtoc\cosh
\fixmathjaxtoc\tanh
\fixmathjaxtoc\coth
\fixmathjaxtoc\log
\fixmathjaxtoc\ln
\fixmathjaxtoc\sum
\fixmathjaxtoc\(
\fixmathjaxtoc\)
\fixmathjaxtoc\begin
\fixmathjaxtoc\end
\fixmathjaxtoc\\
\fixmathjaxtoc\exp

}
\endinput

The important changes is this:

  \regex_replace_all:nnN { \x{5C}par\b } {\x{A}\x{A}} \l_tmpa_tl

It now tests for white space after \par.

Resulting HTML:

enter image description here

3
  • 2
    \b (word boundary) might be safer than \s so \par\wibble still matches. Commented Dec 2, 2021 at 9:33
  • @DavidCarlisle thanks, I will update it in TL.
    – michal.h21
    Commented Dec 2, 2021 at 9:39
  • Thanks Michal. Tested on large file completed and see no issues.
    – Nasser
    Commented Dec 3, 2021 at 5:00

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .