tex4ht - 如何正确地对方程式进行编号(MathJax)

tex4ht - 如何正确地对方程式进行编号(MathJax)

我在 LaTeX 序言中使用它\numberwithin{equation}{section},并且希望在使用 tex4ht 编译时在生成的 HTML 中应用相同的编号。

我在第 2 部分中的乳胶代码块是:

This is test of equation array
\begin{eqnarray}
x = a+1  \nonumber\\ 
y = b+1 \label{eq:myarray}
\end{eqnarray}
and here I reference it \eqref{eq:myarray}

这给了我PDF格式: 在此处输入图片描述

如果我运行,make4ht --shell-escape article.tex "mathjax"我会得到 HTML: 在此处输入图片描述 => 所以显然引用是坏的(??)。

如果我使用以下test.cfg配置

\Preamble{xhtml,mathjax}
\begin{document}
\renewcommand\eqref[1]{\NoFonts\HChar{92}eqref\{\detokenize{#1}\}\EndNoFonts}
\EndPreamble

然后我运行,make4ht --shell-escape article.tex "mathjax" --config test得到: 在此处输入图片描述 这解决了“??”的问题,但没有给出(2.1)。

如果我这样做,make4ht --shell-escape article.tex "mathml,mathjax"我就会得到 在此处输入图片描述 这确实生成了 (2.1),但公式标签处于一个奇怪的位置。而且我更喜欢不使用 mathml。

答案1

您需要配置 MathJax 才能以此样式显示方程式编号。我发现此帮助页面它描述了一个可以做到这一点的插件,并感谢来自的示例这个问题,我能够找到解决方案。

以下是 MWE:

\documentclass{article}

\usepackage{amsmath}
\begin{document}

\section{First}
This is test of equation array
\begin{eqnarray}
x = a+1  \nonumber\\ 
y = b+1 \label{eq:myarray}
\end{eqnarray}
and here I reference it $\eqref{eq:myarray}$

\section{Second}


\begin{eqnarray}
x = a+1  \nonumber\\ 
y = b+1 \label{eq:myarray2}
\end{eqnarray}

\end{document}

配置文件如下所示:

\Preamble{xhtml,mathjax}
\Configure{MathJaxConfig}{{}}
\Configure{AddJs}{mathjaxconfig.js}
\Configure{section}{}{\HCode{<span style="display: hidden">\detokenize{\(\nextSection\)}</span>}}
   {\ifvmode \IgnorePar\fi \EndP\IgnorePar
    \HCode{<h3 class="sectionHead">}\TitleMark\space\HtmlParOff}
   {\HCode{</h3>}\HtmlParOn \ShowPar\par}

\begin{document}
\EndPreamble

它做了几件事:

  • 它禁用 MathJax 的默认 TeX4ht 配置
  • 它会加载文件mathjaxconfig.js,如下所示
  • 它配置\section命令以将 放在\nextSection每个部分的末尾。它更新 MathJax 用于部分编号的计数器

由于 JavaScript 代码太复杂,无法包含在配置文件中,因此我不得不将其放入独立文件中mathjaxconfig.js

MathJax ={
loader: {load: ['[tex]/tagFormat']},
  section: 1,
  tex: {
    tags: 'ams',
    packages: {'[+]': ['tagFormat', 'sections']},
    tagformat: {
      number: (n) => MathJax.config.section + '.' + n,
      id: (n) => 'eqn-id-' + n
    }
  },
  startup: {
    ready() {
      const Configuration = MathJax._.input.tex.Configuration.Configuration;
      const CommandMap = MathJax._.input.tex.SymbolMap.CommandMap;
      new CommandMap('sections', {
        nextSection: 'NextSection'
      }, {
        NextSection(parser, name) {
          MathJax.config.section++;
          parser.tags.counter = parser.tags.allCounter = 0;
        }
      });
      Configuration.create(
        'sections', {handler: {macro: ['sections']}}
      );
      MathJax.startup.defaultReady();
      MathJax.startup.input[0].preFilters.add(({math}) => {
        if (math.inputData.recompile) MathJax.config.section = math.inputData.recompile.section;
      });
      MathJax.startup.input[0].postFilters.add(({math}) => {
        if (math.inputData.recompile) math.inputData.recompile.section = MathJax.config.section;
      });
   }
  }
}

通过这些更改,我获得了 MWE 的以下结果:

在此处输入图片描述

相关内容