我在 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}
如果我运行,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 的以下结果: