[tex4ht-commits] [SCM] tex4ht updated: r1452 - trunk/lit
Michal Hoftich
INVALID.NOREPLY at gnu.org.ua
Wed Jan 24 15:50:53 CET 2024
Author: michal_h21
Date: 2024-01-24 14:50:53 +0000 (Wed, 24 Jan 2024)
New Revision: 1452
Modified:
trunk/lit/ChangeLog
trunk/lit/tex4ht-4ht.tex
trunk/lit/tex4ht-html4.tex
trunk/lit/tex4ht-mathml.tex
Log:
added proper support for the mhchem package
Modified: trunk/lit/ChangeLog
===================================================================
--- trunk/lit/ChangeLog 2024-01-23 14:16:56 UTC (rev 1451)
+++ trunk/lit/ChangeLog 2024-01-24 14:50:53 UTC (rev 1452)
@@ -1,3 +1,11 @@
+2024-01-24 Michal Hoftich <michal.h21 at gmail.com>
+
+ * tex4ht-4ht.tex (mhchem.4ht),
+ * tex4ht-mathml.tex (mathml.4ht),
+ * tex4ht-html4.tex (html4.4ht): added proper support for the Mhchem
+ package.
+ https://tex.stackexchange.com/a/707660/2891
+
2024-01-23 Michal Hoftich <michal.h21 at gmail.com>
* tex4ht-sty.tex (tex4ht.sty): introduced \protected:edef as a
Modified: trunk/lit/tex4ht-4ht.tex
===================================================================
--- trunk/lit/tex4ht-4ht.tex 2024-01-23 14:16:56 UTC (rev 1451)
+++ trunk/lit/tex4ht-4ht.tex 2024-01-24 14:50:53 UTC (rev 1452)
@@ -30794,6 +30794,231 @@
\cs_set_protected:Npn \siunitx_cell_end: {}
>>>
+%%%%%%%%%%%%%%%
+\Section{Mhchem}
+%%%%%%%%%%%%%%%
+
+\<mhchem.4ht\><<<
+% mhchem.4ht (|version), generated from |jobname.tex
+% Copyright 2024 TeX Users Group
+% Copyright 2015-2021 Martin Hensel
+|<TeX4ht license text|>
+|<mhchem redefinitions|>
+
+\Hinput{mhchem}
+\endinput
+>>> \AddFile{9}{mhchem}
+
+\<mhchem redefinitions\><<<
+\ExplSyntaxOn
+% basic mhchem containers
+\NewConfigure{mhchemce}{2}
+\NewConfigure{mhchemcf}{2}
+
+\pend:def\__mhchem_output_begin_ce:{\a:mhchemce}
+\append:def\__mhchem_output_end_ce:{\b:mhchemce}
+\pend:def\__mhchem_output_begin_cf:{\a:mhchemcf}
+\append:def\__mhchem_output_end_cf:{\b:mhchemcf}
+
+% alternative version of coreFivd
+
+\NewConfigure{mhchemisotope}{3}
+
+\NewConfigure{mhchemsub}{2}
+
+\NewConfigure{mhchemsup}{2}
+
+\cs_set_protected:Npn \__mhchem_output_coreFivefourht:nnnnnnn #1#2#3#4#5#6#7
+ {
+ \bool_if:nT
+ { \tl_if_empty_p:n {#7} && ! \tl_if_empty_p:n {#5} }
+ { \bool_set_true:N \l__mhchem_option_superscriptsStacked_bool }
+
+ \tl_if_empty:nF {#1#2}
+ {
+ \a:mhchemisotope
+ \__mhchem_output_withFont:n { #1 }
+ \b:mhchemisotope
+ \__mhchem_output_withFont:n { #2 }
+ \c:mhchemisotope
+ }
+ \__mhchem_output_withFont:n { #3 }
+ \bool_if:NTF \l__mhchem_option_superscriptsStacked_bool
+ {
+ \tl_if_empty:nTF {#4#5#7}
+ {
+ \tl_if_empty:nF {#6}
+ {
+ \a:mhchemsub
+ \__mhchem_output_withFont:n { #6 }
+ \b:mhchemsub
+ }
+ }
+ {
+ \tl_if_empty:nTF {#6}
+ {
+ \a:mhchemsup
+ \__mhchem_output_withFont:n { #4#5#7 }
+ \b:mhchemsup
+ }
+ {
+ \HCode { <span~class="mhchem-supsub"> }
+ \__mhchem_output_withFont:n { #4#5#7 }
+ \HCode { <br~/>&\#xfeff; }
+ \__mhchem_output_withFont:n { #6 }
+ \HCode { </span> }
+ }
+ }
+ }
+ {
+ \tl_if_empty:nF {#4}
+ {
+ \a:mhchemsup
+ \__mhchem_output_withFont:n { #4 }
+ \b:mhchemsup
+ }
+ \tl_if_empty:nF {#6}
+ {
+ \a:mhchemsub
+ \__mhchem_output_withFont:n { #6 }
+ \b:mhchemsub
+ }
+ \tl_if_empty:nF {#5#7}
+ {
+ \a:mhchemsup
+ \__mhchem_output_withFont:n { #5#7 }
+ \b:mhchemsup
+ }
+ }
+ }
+
+% replace original coreFive with our alternative version. it will work in picture math
+\HLet\__mhchem_output_coreFive:nnnnnnn\__mhchem_output_coreFivefourht:nnnnnnn
+
+\cs_set_protected:Npn \__mhchem_output_withFont:n #1 %. output #1 as math or text
+ {
+ \bool_if:NTF \l__mhchem_output_isMathMode_bool
+ { \mathrm {#1} }
+ { \text {#1} }
+ }
+
+\NewConfigure{mhchemoperator}{2}
+
+% ideally, the following commands should be redefined using \HLet, to support picture math.
+% the current definition should work in MathML, I am not sure about normall HTML, as
+\cs_set_protected:Npn \__mhchem_output_skipAfterAmount: { \HCode { ~ } } % space for copy & paste
+\cs_set_protected:Npn \__mhchem_output_skipBeforeStateOfAggregation: {}
+\cs_set_protected:Npn \__mhchem_output_minus: { \HCode { − } }
+\cs_set_protected:Npn \__mhchem_output_operatorPlus:
+ { \a:mhchemoperator + \b:mhchemoperator }
+\cs_set_protected:Npn \__mhchem_output_operatorMinus:
+ { \a:mhchemoperator\HCode {−} \b:mhchemoperator }
+\cs_set_protected:Npn \__mhchem_output_operatorEquals:
+ { \a:mhchemoperator = \b:mhchemoperator }
+\cs_set_protected:Npn \__mhchem_output_operatorPlusMinus:
+ {\a:mhchemoperator \HCode {± } \b:mhchemoperator }
+\cs_set_protected:Npn \__mhchem_output_electronDot: { \HCode { • } }
+\cs_set_protected:Npn \__mhchem_output_additionCompound: { \HCode { · } }
+\cs_set_protected:Npn \__mhchem_output_excited: { \HCode { &\#x2731; } }
+\cs_set_protected:Npn \__mhchem_output_commaDecimal: { , }
+\cs_set_protected:Npn \__mhchem_output_commaEnumeration: {,\HCode { } }
+\cs_set_protected:Npn \__mhchem_output_commaEnumerationSmall: {,\HCode{ } }
+
+\cs_set_protected:Npn \__mhchem_output_bond_single: { \a:mhchemoperator{\HCode { − }}\b:mhchemoperator}
+\cs_set_protected:Npn \__mhchem_output_bond_double: { \a:mhchemoperator{\HCode { = }}\b:mhchemoperator}
+\cs_set_protected:Npn \__mhchem_output_bond_triple: { \a:mhchemoperator{\HCode { ≡ }}\b:mhchemoperator}
+% todo: add MathML support for these
+\cs_set_protected:Npn \__mhchem_output_bond_half: % todo: improve
+ {\a:mhchembondhalf}
+\cs_set_protected:Npn \__mhchem_output_bond_oneAndHalf: % todo: improve
+ {\a:mhchembondoneandhalf}
+\cs_set_protected:Npn \__mhchem_output_bond_twoAndHalf: % todo: improve
+ {\a:mhchembondtwoandhalf}
+\cs_set_protected:Npn \__mhchem_output_bond_twoAndHalff: % todo: improve
+ {\a:mhchembondtwoandhalff}
+
+\NewConfigure{mhchembondhalf}{1}
+\NewConfigure{mhchembondoneandhalf}{1}
+\NewConfigure{mhchembondtwoandhalf}{1}
+\NewConfigure{mhchembondtwoandhalff}{1}
+\cs_set_protected:Npn \__mhchem_output_bond_dotdotdot: { \HCode { ··· } }
+\cs_set_protected:Npn \__mhchem_output_bond_dotdotdotdot: { \HCode { ···· } }
+\cs_set_protected:Npn \__mhchem_output_bond_rightArrow: { \HCode { &\#xffeb; } }
+\cs_set_protected:Npn \__mhchem_output_bond_leftArrow: { \HCode { &\#xffe9; } }
+
+
+
+\NewConfigure{mhchemarrow}{2}
+\NewConfigure{mhchemarrowabove}{2}
+
+\NewConfigure{mhchemarrowyields}{1}
+\NewConfigure{mhchemarrowyieldsLeft}{1}
+\NewConfigure{mhchemarrowyieldsLeftRight}{1}
+\NewConfigure{mhchemarrowmesomerism}{1}
+\NewConfigure{mhchemarrowequilibrium}{1}
+\NewConfigure{mhchemarrowequilibriumRight}{1}
+\NewConfigure{mhchemarrowequilibriumLeft}{1}
+
+
+
+
+\cs_set_protected:Npn \__mhchem_arrow_deployfourht:nnnnn #1#2#3#4#5
+ {
+ \a:mhchemarrow
+ \tl_if_empty:nF {#3#5}
+ {
+ \a:mhchemarrowabove
+ \str_case:nnF {#2}
+ {
+ { } { \ce { #3 } }
+ { M } { \ensuremath { #3 } }
+ { T } { \text { #3 } }
+ { C } { \ce { #3 } }
+ }
+ { \msg_error:nnn { mhchem } { unexpected-arrow-type } {#2} }
+ \b:mhchemarrowabove
+ }
+ \str_case:nnF {#1}
+ {
+ { yields } {\a:mhchemarrowyields }
+ { yieldsLeft } {\a:mhchemarrowyieldsLeft }
+ { yieldsLeftRight } {\a:mhchemarrowyieldsLeftRight } % todo: improve
+ { esomerism } {\a:mhchemarrowesomerism } % todo: improve
+ { equilibrium } {\a:mhchemarrowequilibrium } % todo: improve
+ { equilibriumRight } {\a:mhchemarrowequilibriumRight } % todo: improve
+ { equilibriumLeft } {\a:mhchemarrowequilibriumLeft } % todo: improve
+ }
+ { \msg_error:nnn { mhchem } { unexpected-arrow-type } {#1} }
+ \tl_if_empty:nF {#3#5}
+ {
+ \a:mhchemarrowabove
+ \str_case:nnF {#2}
+ {
+ { } { \ce { #5 } }
+ { M } { \ensuremath { #5 } }
+ { T } { \text { #5 } }
+ { C } { \ce { #5 } }
+ }
+ { \msg_error:nnn { mhchem } { unexpected-arrow-type } {#2} }
+ \b:mhchemarrowabove
+ }
+ \b:mhchemarrow
+ }
+
+\HLet\__mhchem_arrow_deploy:nnnnn\__mhchem_arrow_deployfourht:nnnnn
+
+\ExplSyntaxOff
+
+
+% Additional configurations for MathML
+
+% print mathml command or html, depending on if we are inside mathml or not
+\newcommand\:mhmathmlorhtml[2]{\ifmathml\a:mathml #1\else #2\fi}
+\newcommand\:mhonlyinmathml[1]{\ifmathml #1\fi}
+
+
+>>>
+
%%%%%%%%%%%%%
\Section{Ushort}
%%%%%%%%%%%%%
Modified: trunk/lit/tex4ht-html4.tex
===================================================================
--- trunk/lit/tex4ht-html4.tex 2024-01-23 14:16:56 UTC (rev 1451)
+++ trunk/lit/tex4ht-html4.tex 2024-01-24 14:50:53 UTC (rev 1452)
@@ -21752,6 +21752,52 @@
>>>
+%%%%%%%%%%%%%%%%%%%%%
+\section{mhchem}
+%%%%%%%%%%%%%%%%%%%%%
+
+\<configure html4 mhchem\><<<
+\typeout{***************** hello mhchem}
+\Configure{mhchemcf}{\HCode{<span class="mhchem">}}{\HCode{</span>}}
+\Configure{mhchemce}{\HCode{<span class="mhchem">}}{\HCode{</span>}}
+
+\Configure{mhchemisotope}{\HCode{<span class="mhchem-isotope">}}{\HCode{<br />&\#xfeff;}}{\HCode{</span>}}
+\Configure{mhchemsub}{\HCode {<sub class="mhchem-sub">}}{\HCode{</sub>} }
+\Configure{mhchemsup}{\HCode {<sup class="mhchem-sup">}}{\HCode{</sup>} }
+\Configure{mhchemoperator}{\HCode {<span class="mhchem-operator">}}{\HCode {</span>}}
+\Configure{mhchemarrow}{\HCode {<span class="mhchem-arrow">}}{\HCode{</span>}}
+\Configure{mhchemarrowabove}{\HCode {<span class="mhchem-above">}}{\HCode{</span>}}
+\Configure{mhchemarrowyields}{\HCode{<span class="mhchem-arrow-normal">&\#x27F6;</span>}}
+\Configure{mhchemarrowyieldsLeft}{\HCode{<span class="mhchem-arrow-normal">&\#x2190;</span>}}
+\Configure{mhchemarrowyieldsLeftRight}{\HCode{<span class="mhchem-arrow-normal">&\#x21c4;</span>}} % todo: improve
+\Configure{mhchemarrowmesomerism}{\HCode{<span class="mhchem-arrow-normal">&\#x2194;</span>}} % todo: improve
+\Configure{mhchemarrowequilibrium}{\HCode{<span class="mhchem-arrow-normal">&\#x21cc;</span>}} % todo: improve
+\Configure{mhchemarrowequilibriumRight}{\HCode{<span class="mhchem-arrow-larger">&\#x21c0;</span><span class="mhchem-arrow-complement">&\#x21bd;</span>}} % todo: improve
+\Configure{mhchemarrowequilibriumLeft}{\HCode{<span class="mhchem-arrow-complement">&\#x21c0;</span><span class="mhchem-arrow-larger">&\#x21bd;</span>}} % todo: improve
+\Configure{mhchembondhalf}{\HCode{<span class="mhchem-bond-half-middle">&\#xfe4d;</span>}}
+\Configure{mhchembondoneandhalf}{\HCode{<span class="mhchem-rlap">−</span><span~class="mhchem-bond-half-top">&\#xfe4d;</span>}}
+\Configure{mhchembondtwoandhalf}{\HCode{<span class="mhchem-rlap">=</span><span~class="mhchem-bond-half-top">&\#xfe4d;</span>}}
+\Configure{mhchembondtwoandhalff}{\HCode{<span class="mhchem-rlap mhchem-bond-top">−</span><span class="mhchem-rlap mhchem-bond-bottom">−</span><span class="mhchem-bond-half-middle">&\#xfe4d;</span>}}
+
+\Css{.mhchem ~ .mhchem-cf { white-space: nowrap; }}
+\Css{.mhchem ~ .mhchem-isotope { font-size: 0.65em; line-height: 1; display: inline-block; vertical-align: sub; text-align: right; }}
+\Css{.mhchem ~ .mhchem-supsub { font-size: 0.65em; line-height: 1; display: inline-block; vertical-align: sub; }}
+\Css{.mhchem ~ .mhchem-sup { font-size: 0.65em; line-height: 1; display: inline-block; vertical-align: 68\%; }}
+\Css{.mhchem ~ .mhchem-sub { font-size: 0.65em; line-height: 1; display: inline-block; vertical-align: sub; }}
+\Css{.mhchem ~ .mhchem-rlap { display: inline-block; width: 0; }}
+\Css{.mhchem ~ .mhchem-bond-half-top { vertical-align: 60\%; }}
+\Css{.mhchem ~ .mhchem-bond-half-middle { vertical-align: 35\%; }}
+\Css{.mhchem ~ .mhchem-bond-top { vertical-align: 20\%; }}
+\Css{.mhchem ~ .mhchem-bond-bottom { vertical-align: -20\%; }}
+\Css{.mhchem ~ .mhchem-arrow { display: inline-flex; flex-direction: column; vertical-align: middle; }}
+\Css{.mhchem ~ .mhchem-arrow > span { line-height: 80\%; text-align: center; }}
+\Css{.mhchem ~ .mhchem-arrow > .mhchem-above { min-height: 1em; font-size: 60\%; }}
+\Css{.mhchem ~ .mhchem-arrow > .mhchem-below { min-height: 1em; font-size: 60\%; }}
+\Css{.mhchem ~ .mhchem-arrow > span.mhchem-arrow-normal { line-height: 40\%; }}
+\Css{.mhchem ~ .mhchem-arrow > span.mhchem-arrow-larger { line-height: 25\%; font-size: 150\%; }}
+\Css{.mhchem ~ .mhchem-arrow > span.mhchem-arrow-complement { line-height: 25\%; }}
+>>>
+
%%%%%%%%%%%%%%%%%%%%%%
\section{transparent}
%%%%%%%%%%%%%%%%%%%%%%
Modified: trunk/lit/tex4ht-mathml.tex
===================================================================
--- trunk/lit/tex4ht-mathml.tex 2024-01-23 14:16:56 UTC (rev 1451)
+++ trunk/lit/tex4ht-mathml.tex 2024-01-24 14:50:53 UTC (rev 1452)
@@ -5509,8 +5509,60 @@
>>>
+%%%%%%%%%%%%%%%%%
+\section{mhchem}
+%%%%%%%%%%%%%%%%
+\<configure mathml mhchem\><<<
+\Configure{mhchemcf}{\HCode{<\:mhmathmlorhtml{mrow}{span}\space class="mhchem-cf">}}{\HCode{</\:mhmathmlorhtml{mrow}{span}>}}
+\Configure{mhchemce}{\HCode{<\:mhmathmlorhtml{mrow}{span}\space class="mhchem-ce">}}{\HCode{</\:mhmathmlorhtml{mrow}{span}>}}
+
+\Configure{mhchemsub}{%
+ \:mhmathmlorhtml{%
+ \Send{BACK}%
+ {<\a:mathml msub><\a:mathml mrow\Hnewline>}%
+ \Tg</\a:mathml mrow>\Tg<\a:mathml mrow\Hnewline>\trap:base%
+ }{%
+ \HCode{<sub>}}%
+}{\:mhmathmlorhtml{\Tg</\a:mathml mrow>\TG</\a:mathml msub\Hnewline>}{\HCode{</sub>}}}
+\Configure{mhchemsup}{%
+ \:mhmathmlorhtml{
+ \Send{BACK}
+ {<\a:mathml msup><\a:mathml mrow\Hnewline>}%
+ \Tg</\a:mathml mrow>\Tg<\a:mathml mrow\Hnewline>\trap:base
+ }{%
+ \HCode{<sup>}}%
+}{\:mhmathmlorhtml{\Tg</\a:mathml mrow>\TG</\a:mathml msup\Hnewline>}{\HCode{</sup>}}}
+
+\Configure{mhchemoperator}{\HCode{<\:mhmathmlorhtml{mo}{span} class="mhchem-operator">}\PauseMathClass}{\EndPauseMathClass\HCode {</\:mhmathmlorhtml{mo}{span}>}}
+
+\Configure{mhchemarrow}{\HCode {<\:mhmathmlorhtml{mrow}{span} class="mhchem-arrow">\:mhonlyinmathml{\a:mhchemoperator}}}{\HCode{\:mhonlyinmathml{\b:mhchemoperator}</\:mhmathmlorhtml{mrow}{span}>}}
+\Configure{mhchemarrowabove}{\HCode{<\:mhmathmlorhtml{mrow}{span} class="mhchem-above">\:mhonlyinmathml{\a:mhchemoperator}}}{\HCode{\:mhonlyinmathml{\b:mhchemoperator}</\:mhmathmlorhtml{mrow}{span}>}}
+\Configure{mhchemarrowyields}{\HCode{<\:mhmathmlorhtml{mrow}{span} class="mhchem-arrow-normal">\:mhonlyinmathml{\a:mhchemoperator}&\#x2192;\:mhonlyinmathml{\b:mhchemoperator}</\:mhmathmlorhtml{mrow}{span}>}}
+\Configure{mhchemarrowyieldsLeft}{\HCode{<\:mhmathmlorhtml{mrow}{span} class="mhchem-arrow-normal">\:mhonlyinmathml{\a:mhchemoperator}&\#x2190;\:mhonlyinmathml{\b:mhchemoperator}</\:mhmathmlorhtml{mrow}{span}>} }
+\Configure{mhchemarrowyieldsLeftRight}{\HCode{<\:mhmathmlorhtml{mrow}{span} class="mhchem-arrow-normal">\:mhonlyinmathml{\a:mhchemoperator}&\#x21c4;\:mhonlyinmathml{\b:mhchemoperator}</\:mhmathmlorhtml{mrow}{span}>}} % todo: improve
+\Configure{mhchemarrowmesomerism}{\HCode{<\:mhmathmlorhtml{mrow}{span} class="mhchem-arrow-normal">\:mhonlyinmathml{\a:mhchemoperator}&\#x2194;\:mhonlyinmathml{\b:mhchemoperator}</\:mhmathmlorhtml{mrow}{span}>}} % todo: improve
+\Configure{mhchemarrowequilibrium}{\HCode{<\:mhmathmlorhtml{mrow}{span} class="mhchem-arrow-normal">\:mhonlyinmathml{\a:mhchemoperator}&\#x21cc;\:mhonlyinmathml{\b:mhchemoperator}</\:mhmathmlorhtml{mrow}{span}>}} % todo: improve
+% this configuration leads to two arrows next to each other. but I cannot a
+% better configuration right now. this symbol doesn't have Unicode support
+\Configure{mhchemarrowequilibriumRight}
+{\HCode{<\:mhmathmlorhtml{mrow}{span} class="mhchem-arrow-larger">\:mhonlyinmathml{\a:mhchemoperator}&\#x21c0;\:mhonlyinmathml{\b:mhchemoperator}</\:mhmathmlorhtml{mrow}{span}>
+<\:mhmathmlorhtml{mrow}{span} class="mhchem-arrow-complement">\:mhonlyinmathml{\a:mhchemoperator}&\#x21bd;\:mhonlyinmathml{\b:mhchemoperator}</\:mhmathmlorhtml{mrow}{span}>}
+} % todo: improve
+\Configure{mhchemarrowequilibriumLeft}
+{\HCode{<\:mhmathmlorhtml{mrow}{span} class="mhchem-arrow-complement">\:mhonlyinmathml{\a:mhchemoperator}&\#x21c0;\:mhonlyinmathml{\b:mhchemoperator}</\:mhmathmlorhtml{mrow}{span}>
+<\:mhmathmlorhtml{mrow}{span} class="mhchem-arrow-larger">\:mhonlyinmathml{\a:mhchemoperator}&\#x21bd;\:mhonlyinmathml{\b:mhchemoperator}</\:mhmathmlorhtml{mrow}{span}>}
+} % todo: improve
+% this is not the right symbol
+% \Configure{mhchemarrowequilibriumRight}{\a:mhchemoperator\HCode{&\#x2942;}\b:mhchemoperator } % todo: improve
+% \Configure{mhchemarrowequilibriumLeft}{\a:mhchemoperator\HCode{&\#x2943;}\b:mhchemoperator} % todo: improve
+\Configure{mhchembondhalf}{\HCode{<span class="mhchem-bond-half-middle">&\#xfe4d;</span>}}
+\Configure{mhchembondoneandhalf}{\HCode{<span class="mhchem-rlap">−</span><span class="mhchem-bond-half-top">&\#xfe4d;</span>}}
+\Configure{mhchembondtwoandhalf}{\HCode{<span class="mhchem-rlap">=</span><span class="mhchem-bond-half-top">&\#xfe4d;</span>}}
+\Configure{mhchembondtwoandhalff}{\HCode{<span class="mhchem-rlap mhchem-bond-top">−</span><span class="mhchem-rlap mhchem-bond-bottom">−</span><span class="mhchem-bond-half-middle">&\#xfe4d;</span>}}
+>>>
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\chapter{Notes}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
More information about the tex4ht-commits
mailing list.