It is possible to do that, but it is not that easy. Here is a 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}
As you can see, I introduced the \eqannotate
command, which is used in the equation
environment. I am afraid that it is not easily possible to catch contents of environments, so they need to be marked by hand (or using pre-processing script).
Here is a configuration file:
\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 has the <annotation>
element, it can be used to insert raw LaTeX code to the HTML as an annotation.
\Configure{$}
and \Configure{[]}
configure what HTML code will be inserted for $ ... $
and \[ ... \]
. It also calls command that saves the original LaTeX code in a token list, typesets MathML and then prints the saved tokens inside <annotation>
. Most of this code is copied from mathml.4ht
, it is only a bit simplified.
Regarding wrong formatting of $\mathbf{V_{Obs}}$
, this can be fixed using the following DOM filter:
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)
Compile using:
make4ht -e build.lua -c config.cfg sample.tex "mathml,mathjax"
This is the resulting 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>
And rendered page:
First of all, your TeX sample contains some coding errors, like use of \textbf
in the math mode. Here is a fixed version:
% https://tex.stackexchange.com/q/637885/2891
\documentclass[9pt]{elife}
\usepackage[utf8]{inputenc}
\usepackage[version=4]{mhchem}
\usepackage{siunitx}
\usepackage{hyperref}
\usepackage{amsmath,amssymb}
\usepackage{xspace}
\newcommand\eqannotate[1]{#1}
\title{Crowding-induced phase separation of nuclear transport receptors in FG nucleoporin assemblies}
\author[1]{Davis K. Luke}
\author[2]{Ford J. Ian}
\affil[1]{Department of Physics and Astronomy, University College London, London, United Kingdom}
\affil[2]{Institute for the Physics of Living Systems, University College London, London, United Kingdom}
\corr{[email protected]}{LKD}
\begin{document}
\maketitle
\begin{abstract}
The rapid ($ < 1$~ms) transport of biological material to and from the cell nucleus is regulated by the nuclear pore complex (NPC). At the core of the NPC is a permeability barrier consisting of $\left( \frac{\rho^{(i)}(z)}{\rho^{\mathbf{Bulk}}} \right)$ intrinsically disordered Phe-Gly (FG) nucleoporins (FG Nups).
\end{abstract}
\section{Introduction}
In previous work, we revealed {a universal physical behaviour in the experimentally observed binding of two well-characterized NTRs,
\begin{align}
W^{(i)}(z) &= c^{(i)}(z) + V_{ext}^{(i)}(z) + \int \rho^{(3)}(z) u^{(i)}(z-z')\mathrm{d}z' - \mu^{(i)} \nonumber, \\
& \approx - k_{\mathrm{B}}T \ln \left( \frac{\rho^{(i)}(z)}{\rho^{(i)}_{\mathrm{bulk}}} \right),
\end{align}
Was Further validated by a minimal physical model that treated the FG Nups as flexible homopolymers the NTRs as uniformly cohesive spheres.
\begin{align*}
W^{(i)}(z) &= c^{(i)}(z) + V_{ext}^{(i)}(z) + \int \rho^{(3)}(z) u^{(i)}(z-z')\mathrm{d}z' - \mu^{(i)} \nonumber, \\
& \approx - k_{\mathrm{B}}T \ln \left( \frac{\rho^{(i)}(z)}{\rho^{(i)}_{\mathrm{bulk}}} \right),
\end{align*}
\end{document}
With these fixes, the following configuration file works. It reuses environment handling code from the MathJax TeX4ht configuration. It also uses regular expressions to clean <
and >
characters, as they can result in XML parsing errors.
\Preamble{xhtml,mathml}
\newtoks\eqtoks
\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} } { & } \l_tmpa_tl
\regex_replace_all:nnN { \x{3C} } { < } \l_tmpa_tl
\regex_replace_all:nnN { \x{3E} } { > } \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 \eqtoks{ \l_tmpa_tl }
%\HCode{\l_tmpb_tl}
}
\ExplSyntaxOff
\def\AltMath#1${\alteqtoks{#1}%
#1\HCode{</mrow><annotation encoding="application/x-tex">\eqtoks</annotation>}$}
\Configure{$}{\Configure{@math}{display="inline"}\DviMath\HCode{<semantics><mrow>}}{\HCode{</semantics>}\EndDviMath}{\expandafter\AltMath}
\long\def\AltDisplay#1\]{\alteqtoks{#1}#1\HCode{</mrow><annotation encoding="application/x-tex">\eqtoks</annotation></semantics>}\]}
\Configure{[]}{\Configure{@math}{display="block"}\DviMath$$\DisplayMathtrue\HCode{<semantics><mrow>}\AltDisplay}{$$\EndDviMath}
\renewcommand\eqannotate[1]{\alteqtoks{#1}\HCode{<semantics><mrow>}#1\HCode{</mrow><annotation encoding="application/x-tex">\eqtoks</annotation></semantics>}}
% environment support
\newcommand\VerbMathToks[2]{%
\alteqtoks{\begin{#2}
#1
\end{#2}}%
\ifvmode\IgnorePar\fi\EndP\Configure{@math}{display="block"}\DviMath\DisplayMathtrue\HCode{<semantics><mrow>}
\begin{old#2}
#1
\end{old#2}
\HCode{</mrow><annotation encoding="application/x-tex">}
\HCode{\eqtoks}
\HCode{</annotation></semantics>}
\EndDviMath
}
\ExplSyntaxOn
\newcommand\VerbMath[1]{%
\cs_if_exist:cTF{#1}{
\expandafter\let\csname old#1\expandafter\endcsname\csname #1\endcsname
\expandafter\let\csname endold#1\expandafter\endcsname\csname end#1\endcsname
\RenewDocumentEnvironment{#1}{+!b}{%
\NoFonts\expandafter\VerbMathToks\expandafter{##1}{#1}\EndNoFonts%
}{}
}{}%
}
\ExplSyntaxOff
\begin{document}
\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*}
\EndPreamble
This is the result:
And the code for your align*
environment:
<!-- l. 41 --><math display='block' xmlns='http://www.w3.org/1998/Math/MathML'><mrow><semantics><mrow>
<!-- tex4ht:inline --><mrow><mtable class='align-star' columnalign='left'>
<mtr><mtd class='align-odd' columnalign='right'><msup><mrow><mi>W</mi></mrow><mrow><mo class='MathClass-open' stretchy='false'>(</mo><mi>i</mi><mo class='MathClass-close' stretchy='false'>)</mo></mrow></msup><mo class='MathClass-open' stretchy='false'>(</mo><mi>z</mi><mo class='MathClass-close' stretchy='false'>)</mo></mtd>
<mtd class='align-even'> <mo class='MathClass-rel'>=</mo> <msup><mrow><mi>c</mi></mrow><mrow><mo class='MathClass-open' stretchy='false'>(</mo><mi>i</mi><mo class='MathClass-close' stretchy='false'>)</mo></mrow></msup><mo class='MathClass-open' stretchy='false'>(</mo><mi>z</mi><mo class='MathClass-close' stretchy='false'>)</mo> <mo class='MathClass-bin'>+</mo> <msubsup><mrow><mi>V</mi> </mrow><mrow>
<mi mathvariant='italic'>ext</mi></mrow><mrow><mo class='MathClass-open' stretchy='false'>(</mo><mi>i</mi><mo class='MathClass-close' stretchy='false'>)</mo></mrow></msubsup><mo class='MathClass-open' stretchy='false'>(</mo><mi>z</mi><mo class='MathClass-close' stretchy='false'>)</mo> <mo class='MathClass-bin'>+</mo><mo> ∫
<!-- nolimits --></mo><!-- nolimits --><msup><mrow><mi>ρ</mi></mrow><mrow><mo class='MathClass-open' stretchy='false'>(</mo><mn>3</mn><mo class='MathClass-close' stretchy='false'>)</mo></mrow></msup><mo class='MathClass-open' stretchy='false'>(</mo><mi>z</mi><mo class='MathClass-close' stretchy='false'>)</mo><msup><mrow><mi>u</mi></mrow><mrow><mo class='MathClass-open' stretchy='false'>(</mo><mi>i</mi><mo class='MathClass-close' stretchy='false'>)</mo></mrow></msup><mo class='MathClass-open' stretchy='false'>(</mo><mi>z</mi> <mo class='MathClass-bin'>−</mo> <msup><mrow><mi>z</mi></mrow><mrow><mi>′</mi></mrow></msup><mo class='MathClass-close' stretchy='false'>)</mo><mstyle mathvariant='normal'><mi>d</mi></mstyle><msup><mrow><mi>z</mi></mrow><mrow><mi>′</mi></mrow></msup><mo class='MathClass-bin'>−</mo> <msup><mrow><mi>μ</mi></mrow><mrow><mo class='MathClass-open' stretchy='false'>(</mo><mi>i</mi><mo class='MathClass-close' stretchy='false'>)</mo></mrow></msup><mo class='MathClass-punc'>,</mo><mspace width='2em'></mspace></mtd>
<mtd class='align-label' columnalign='right'></mtd>
<mtd class='align-label'>
<mspace width='2em'></mspace></mtd></mtr><mtr><mtd class='align-odd' columnalign='right'></mtd>
<mtd class='align-even'> <mo class='MathClass-rel'>≈</mo><mo class='MathClass-bin'>−</mo><msub><mrow><mi>k</mi></mrow><mrow><mstyle mathvariant='normal'><mi>B</mi></mstyle></mrow></msub><mi>T</mi><mi class='qopname'> ln</mi><mo> <!-- FUNCTION APPLICATION --> </mo><!-- nolimits --> <mrow><mo fence='true' form='prefix'> (</mo><mrow> <mfrac><mrow><msup><mrow><mi>ρ</mi></mrow><mrow><mo class='MathClass-open' stretchy='false'>(</mo><mi>i</mi><mo class='MathClass-close' stretchy='false'>)</mo></mrow></msup><mo class='MathClass-open' stretchy='false'>(</mo><mi>z</mi><mo class='MathClass-close' stretchy='false'>)</mo></mrow>
<mrow><msubsup><mrow><mi>ρ</mi></mrow><mrow>
<mstyle mathvariant='normal'><mi>bulk</mi></mstyle></mrow><mrow><mo class='MathClass-open' stretchy='false'>(</mo><mi>i</mi><mo class='MathClass-close' stretchy='false'>)</mo></mrow></msubsup></mrow></mfrac> </mrow><mo fence='true' form='postfix'>)</mo></mrow> <mo class='MathClass-punc'>,</mo><mspace width='2em'></mspace></mtd>
<mtd class='align-label' columnalign='right'></mtd>
<mtd class='align-label'><mspace width='2em'></mspace></mtd></mtr></mtable></mrow>
</mrow><annotation encoding='application/x-tex'> \begin {align*} W^{(i)}(z) &= c^{(i)}(z) + V_{ext}^{(i)}(z) + \int \rho ^{(3)}(z) u^{(i)}(z-z')\mathrm {d}z' - \mu ^{(i)} \nonumber , \\ & \approx - k_{\mathrm {B}}T \ln \left ( \frac {\rho ^{(i)}(z)}{\rho ^{(i)}_{\mathrm {bulk}}} \right ), \end {align*} </annotation></semantics> </mrow></math>
Best Answer
I would base the code on the newer answer. The second seems obsolete. It just needs a fix for equations, they cause the compilation error. Other than that, it mostly works. Except for
$$ ... $$
math, I cannot find a correct solution.Here is the updated config file:
This is the result: