使用时Make4ht
如何获取MathML
并LaTeX
在HTML中编码?
我的 MWE 是:
%!TEX TS-program = lualatex
%!TEX encoding = UTF-8 Unicode
\documentclass{elife}
\title{Grasp movement initiation and representation}
\begin{document}
We recorded single neurons in F1 and hold actions, and investigated the population-level differences could explain, please refer $t_{1,92} = -0.55$ plotted $\mathbf{V_{Obs}}$ at x10 gain) how condition.
\end{document}
答案1
这是有可能做到的,但并不容易。以下是 MWE:
\documentclass{article}
\newcommand\eqannotate[1]{#1}
\title{Grasp movement initiation and representation}
\begin{document}
We recorded single neurons in F1 and hold actions, and investigated the population-level differences could explain, please refer $t_{1,92} = -0.55$ plotted $\mathbf{V_{Obs}}$ at x10 gain) how condition.
\[
c^2 = \sqrt{a^2+b^2}
\]
\begin{equation}
\eqannotate{c^2 = \sqrt{a^2+b^2}}
\end{equation}
\end{document}
如你所见,我介绍了环境\eqannotate
中使用的命令equation
。我担心很难捕捉到环境的内容,所以需要手动标记(或使用预处理脚本)。
这是一个配置文件:
\Preamble{xhtml}
\newtoks\eqtoks
\def\AltMath#1${\eqtoks{#1}%
#1\HCode{</mrow><annotation encoding="application/x-tex">\the\eqtoks</annotation>}$}
\Configure{$}{\Configure{@math}{display="inline"}\DviMath\HCode{<semantics><mrow>}}{\HCode{</semantics>}\EndDviMath}{\expandafter\AltMath}
\long\def\AltDisplay#1\]{\eqtoks{#1}#1\HCode{</mrow><annotation encoding="application/x-tex">\the\eqtoks</annotation></semantics>}\]}
\Configure{[]}{\Configure{@math}{display="block"}\DviMath$$\DisplayMathtrue\HCode{<semantics><mrow>}\AltDisplay}{$$\EndDviMath}
\renewcommand\eqannotate[1]{\eqtoks{#1}\HCode{<semantics><mrow>}#1\HCode{</mrow><annotation encoding="application/x-tex">\the\eqtoks</annotation></semantics>}}
\begin{document}
\EndPreamble
MathML 具有<annotation>
元素,它可用于将原始 LaTeX 代码作为注释插入到 HTML 中。
\Configure{$}
并配置将为和\Configure{[]}
插入哪些 HTML 代码。它还调用命令,将原始 LaTeX 代码保存在标记列表中,排版 MathML,然后打印 中保存的标记。此代码大部分是从 复制而来,只是稍微简化了一点。$ ... $
\[ ... \]
<annotation>
mathml.4ht
关于的错误格式$\mathbf{V_{Obs}}$
,可以使用以下 DOM 过滤器进行修复:
local domfilter = require "make4ht-domfilter"
local function find_mstyle(x)
-- find if element has <mstyle> parent, and its value of mathvariant
if not x:is_element() then
return nil
elseif x:get_element_name() == "mstyle" then
return x:get_attribute("mathvariant")
else
return find_mstyle(x:get_parent())
end
end
local process = domfilter {
function(dom)
-- fix bold subscript
for _, el in ipairs(dom:query_selector "mstyle mi") do
local mathvariant = find_mstyle(el:get_parent())
if mathvariant and el:get_attribute("mathvariant") then
el:set_attribute("mathvariant", mathvariant)
end
end
return dom
end
}
Make:match("html$", process)
编译使用:
make4ht -e build.lua -c config.cfg sample.tex "mathml,mathjax"
这是最终的 HTML:
<p class='noindent'>We recorded single neurons in F1 and hold actions, and investigated
the population-level differences could explain, please refer
<!-- l. 9 --><math display='inline' xmlns='http://www.w3.org/1998/Math/MathML'><semantics><mrow><msub><mrow><mi>t</mi></mrow><mrow><mn>1</mn><mo class='MathClass-punc'>,</mo><mn>92</mn></mrow></msub> <mo class='MathClass-rel'>=</mo> <mo class='MathClass-bin'>−</mo><mn>0.55</mn></mrow><annotation encoding='application/x-tex'>t_{1,92} = -0.55</annotation></semantics></math> plotted
<!-- l. 9 --><math display='inline' xmlns='http://www.w3.org/1998/Math/MathML'><semantics><mrow><mstyle mathvariant='bold'><msub><mrow><mi>V</mi></mrow><mrow><mi mathvariant='bold'>Obs</mi></mrow></msub></mstyle></mrow><annotation encoding='application/x-tex'>\mathbf {V_{Obs}}</annotation></semantics></math> at
x10 gain) how condition.
</p><!-- l. 11 --><p class='indent'> <!-- l. 11 --><math display='block' xmlns='http://www.w3.org/1998/Math/MathML'>
<semantics><mrow><msup><mrow><mi>c</mi></mrow><mrow><mn>2</mn></mrow></msup> <mo class='MathClass-rel'>=</mo> <msqrt><mrow><msup><mrow><mi>a</mi></mrow><mrow><mn>2</mn> </mrow> </msup> <mo class='MathClass-bin'>+</mo> <msup><mrow><mi>b</mi></mrow><mrow><mn>2</mn></mrow></msup></mrow></msqrt></mrow><annotation encoding='application/x-tex'> c^2 = \sqrt {a^2+b^2} </annotation></semantics>
</math>
</p>
<table class='equation'><tr><td>
<!-- l. 16 --><math class='equation' display='block' xmlns='http://www.w3.org/1998/Math/MathML'>
<mstyle class='label' id='x1-2r1'></mstyle><!-- endlabel --><semantics><msup><mrow><mi>c</mi></mrow><mrow><mn>2</mn></mrow></msup> <mo class='MathClass-rel'>=</mo> <msqrt><mrow><msup><mrow><mi>a</mi></mrow><mrow><mn>2</mn> </mrow> </msup> <mo class='MathClass-bin'>+</mo> <msup><mrow><mi>b</mi></mrow><mrow><mn>2</mn></mrow></msup></mrow></msqrt><annotation encoding='application/x-tex'>c^2 = \sqrt {a^2+b^2}</annotation></semantics>
</math></td><td class='eq-no'>(1)</td></tr></table>
并呈现页面: