Wie man make4ht für Threeparttable mit siunitx verwendet, um ein ODT zu erstellen

Wie man make4ht für Threeparttable mit siunitx verwendet, um ein ODT zu erstellen

Ich versuche hier mein vorheriges Anliegen abzuarbeiten:htlatex bricht bei Verwendung von siunitx zusammen

Zum Kontext: Ich versuche, ein in .tex geschriebenes Manuskript mithilfe von in eine .odt-Datei zu konvertieren make4ht. Ich verwende Linux Mint und pdfTeX 3.141592653-2.6-1.40.25 (TeX Live 2023).

Hier ist mein MWE:

\documentclass[a4paper,12pt]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[top=2.0cm, left=1.0cm, right=1.5cm]{geometry}

\usepackage[affil-it]{authblk}
%\renewcommand*{\Authfont}{\raggedright}
\renewcommand*{\Affilfont}{\normalsize\raggedright}

\usepackage{booktabs}                           %For \toprule, \midrule and \bottomrule in tables
\usepackage[flushleft]{threeparttable}                      %For a more structured tables
\AtBeginEnvironment{tablenotes}{\scriptsize}
\usepackage{caption}
\captionsetup{justification=justified,
singlelinecheck=false,format=hang}
\usepackage{multirow}
\usepackage[version=4]{mhchem}

\title{Germination of Avocado using special germination media}
\author[1]{Ermando Sandoval}
\affil[1]{University of Glastoc, Mirano Institute}

\usepackage{siunitx}
\sisetup{mode=text}
\sisetup{range-units = single}
\sisetup{separate-uncertainty}
\sisetup{inter-unit-product=\textperiodcentered}
\sisetup{open-bracket=\, ,
                close-bracket=\,}
\sisetup{tight-spacing=true}
\sisetup{print-unity-mantissa=false}
\sisetup{retain-zero-uncertainty=true}
\sisetup{separate-uncertainty-units=single}
\sisetup{group-separator = {,}}
\DeclareSIUnit\cells{cells}


\begin{document}
\maketitle
There are \qty{3.25(2)e12}{\cells\per\milli\litre} in this sample.

The results are provided in Table \ref{Tab1} below.

\begin{table}[h!]
\begin{threeparttable}
\caption{This is a test table. Let's see how this renders in the odt.} \label{Tab1}
\begin{tabular}{l l S S c S S}
\toprule
\multirow{2}{*}{\textbf{Groups}} & \multirow{2}{*}{\textbf{Compounds}} & \multicolumn{2}{c}{\textbf{Potential}} & & \multicolumn{2}{c}{\textbf{Discovery}}\\
\cline{3-4} \cline{6-7}
 & & \textbf{Perm} & \textbf{Tab} & & \textbf{Perm} & \textbf{Tab} \\
\midrule
\multirow{3}{*}{Amines} & methylamine& 16.5(2) & 18.6(26) & & 49 & 62.1(2)\\
 & ethylamine &6.5\tnote{a} & {N/A} & & 0.2(0) & 0.6(1)\\
 & tert-butyl amine&15.6 & 88 & & 55.5(156) & 26\\
 \midrule
\multirow{3}{*}{Salts} & \ce{NaCl} & 99.6(2) & {N/A} & & 12 & 16.8(15)\\
  & \ce{CaCO3} & 6.5(1) & {N/A} & & 15 & 19.2(35)\\
   & \ce{(NH4)2SO4}& 16.2(16) & {N/A} & & 49 & 69.6(12)\\
\bottomrule
\end{tabular}
\begin{tablenotes}
\item[a] Significantly low.
\item N/A = sample loss
\end{tablenotes}
\end{threeparttable}
\end{table}
\end{document}

Wenn ich dies ausführe, erhalte ich diese Ausgabe im PDF-Format:

Korrekte_Ausgabe

Ich habe versucht, mit dem folgenden Befehl eine ODT-Datei abzurufen: make4ht -c config.cfg -f odt Test.texSie config.cfgenthält Folgendes:

\RequirePackage{color} 
\Preamble{xhtml}

\begin{document}
\EndPreamble

Sie erhalten jedoch diese Ausgabe in der ODT-Datei:

Odt_Ausgabe

Im normalen Text erscheint die Unsicherheit als eingefügter Text und der Exponent wird nicht korrekt angezeigt. Auch die Überschrift, die Tabellennotizen und der Inhalt der Tabelle gehen verloren.

Auf dem Terminal erhalte ich diese Ausgabe:

[STATUS]  make4ht: Conversion started
[STATUS]  make4ht: Input file: Test.tex
[ERROR]   htlatex: Compilation errors in the htlatex run
[ERROR]   htlatex: Filename Line    Message
[ERROR]   htlatex: ./Test.tex   75   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   75   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   88   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   88   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   88   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   88   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   89   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   89   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   89   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   89   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   90   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   90   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   90   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   90   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   92   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   92   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   93   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   93   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   93   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   93   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   94   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   94   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   94   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   94   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   95   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   95   Missing $ inserted.
[ERROR]   htlatex: Compilation errors in the htlatex run
[ERROR]   htlatex: Filename Line    Message
[ERROR]   htlatex: ./Test.tex   75   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   75   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   88   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   88   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   88   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   88   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   89   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   89   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   89   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   89   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   90   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   90   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   90   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   90   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   92   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   92   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   93   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   93   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   93   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   93   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   94   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   94   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   94   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   94   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   95   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   95   Missing $ inserted.
[ERROR]   htlatex: Compilation errors in the htlatex run
[ERROR]   htlatex: Filename Line    Message
[ERROR]   htlatex: ./Test.tex   75   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   75   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   88   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   88   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   88   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   88   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   89   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   89   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   89   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   89   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   90   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   90   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   90   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   90   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   92   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   92   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   93   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   93   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   93   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   93   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   94   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   94   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   94   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   94   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   95   Missing $ inserted.
[ERROR]   htlatex: ./Test.tex   95   Missing $ inserted.
[STATUS]  make4ht: Conversion finished

Antwort1

Damit dies funktioniert, müssen mehrere Probleme in TeX4ht behoben werden.

Erstens gibt es zwei Probleme mit der Siunitx-Unterstützung. Zum einen tight-spacingverursacht die Option Kompilierungsfehler, zum anderen werden die SSpalten in Ihrer Tabelle verursacht, da sie die Tabelle völlig durcheinander bringen. Beide Probleme können mit dieser Konfigurationsdatei behoben werden siunitx.4ht:

% siunitx.4ht (2024-01-22-12:04), generated from tex4ht-4ht.tex
% Copyright 2021-2024 TeX Users Group
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either
% version 1.3c of this license or (at your option) any
% later version. The latest version of this license is in
%   http://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions
% of LaTeX version 2005/12/01 or later.
%
% This work has the LPPL maintenance status "maintained".
%
% The Current Maintainer of this work
% is the TeX4ht Project <http://tug.org/tex4ht>.
%
% If you modify this program, changing the
% version identification would be appreciated.
\immediate\write-1{version 2024-01-22-12:04}

\RequirePackage{color}

\ExplSyntaxOn
\cs_set_protected:Npn \__siunitx_angle_arc_print_auxv_fourht:w
  #1 \q_nil #2 \q_nil #3 \q_nil #4 \q_nil #5 \q_nil #6 \q_stop
{\bgroup\siunitx_print_number:n {#1#2#3#4#5}\egroup}

\HLet\__siunitx_angle_arc_print_auxv:w\__siunitx_angle_arc_print_auxv_fourht:w


\cs_set_protected:Npn \__siunitx_angle_arc_print_auxvi_fourht:n #1
{
  % we need to define these commands here
  \def\degree{\ht:special{t4ht@+&{35}x2218;}x}
  \def\arcminute{\prime}
  \def\arcsecond{\prime\prime}
  \ensuremath{\NoFonts\sp{#1}\EndNoFonts}
}

\HLet\__siunitx_angle_arc_print_auxvi:n\__siunitx_angle_arc_print_auxvi_fourht:n

% https://tex.stackexchange.com/q/707485/2891
\bool_set_false:N \l__siunitx_number_tight_bool

% disable S columns for tables
% https://tex.stackexchange.com/q/707485/2891
\cs_set_protected:Npn \siunitx_cell_begin:w {}
\cs_set_protected:Npn \siunitx_cell_end: {}

\ExplSyntaxOff
\Hinput{siunitx}
\endinput

Es gibt noch ein weiteres Problem mit dem mhchemPaket. Es verteilt seine eigene Konfigurationsdatei, mhchem.4htdie fest codierte HTML-Elemente enthält. Aus diesem Grund werden chemische Elemente nicht in der ODT-Ausgabe angezeigt. Diese Version von mhchem.4htsollte das Problem beheben:

%% mhchem.4ht
%% 2021-12-31
%% Copyright 2015-2021 Martin Hensel
%
%% This file is part of the mhchem bundle for LaTeX
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c
% which is included as lppl-1-3c.txt.
%
% This work has the LPPL maintenance status "maintained".
% The Current Maintainer of this work is Martin Hensel.
%
% ( In order to fight spam, the maintainer's contact      )
% ( information is "encrypted" with ROT13.                )
% ( If you do not know ROT13 yet and have no tool for     )
% ( decryption, simply do an Internet search for "ROT13". )
%
% ,---[ ROT 13 ]---
% | Gur Pheerag Znvagnvare bs guvf jbex vf Znegva Urafry
% |   jub pna or pbagnpgrq ivn
% |     [email protected]
% |   be ivn znvy
% |     Znegva Urafry
% |     Cbfgfge. 20
% |     09232 Unegznaafqbes
% |     Treznal
% `----------
%
% This work consists of all files listed in manifest.txt.
%
%
\ExplSyntaxOn

\Css
  { 
    .mhchem ~ .mhchem-cf { white-space: nowrap; }
    .mhchem ~ .mhchem-isotope { font-size: 0.65em; line-height: 1; display: inline-block; vertical-align: sub; text-align: right; }
    .mhchem ~ .mhchem-supsub  { font-size: 0.65em; line-height: 1; display: inline-block; vertical-align: sub; }
    .mhchem ~ .mhchem-sup     { font-size: 0.65em; line-height: 1; display: inline-block; vertical-align: 68\%; }
    .mhchem ~ .mhchem-sub     { font-size: 0.65em; line-height: 1; display: inline-block; vertical-align: sub; }
    .mhchem ~ .mhchem-rlap { display: inline-block; width: 0; }
    .mhchem ~ .mhchem-bond-half-top    { vertical-align: 60\%; }
    .mhchem ~ .mhchem-bond-half-middle { vertical-align: 35\%; }
    .mhchem ~ .mhchem-bond-top         { vertical-align: 20\%; }
    .mhchem ~ .mhchem-bond-bottom      { vertical-align: -20\%; }
    .mhchem ~ .mhchem-arrow { display: inline-flex; flex-direction: column; vertical-align: middle; }
    .mhchem ~ .mhchem-arrow > span { line-height: 80\%; text-align: center; }
    .mhchem ~ .mhchem-arrow > .mhchem-above { min-height: 1em; font-size: 60\%; }
    .mhchem ~ .mhchem-arrow > .mhchem-below { min-height: 1em; font-size: 60\%; }
    .mhchem ~ .mhchem-arrow > span.mhchem-arrow-normal { line-height: 40\%; }
    .mhchem ~ .mhchem-arrow > span.mhchem-arrow-larger { line-height: 25\%; font-size: 150\%; }
    .mhchem ~ .mhchem-arrow > span.mhchem-arrow-complement { line-height: 25\%; }
  }

% 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}

\Configure{mhchemcf}{\HCode{<span~class="mhchem">}}{\HCode{</span>}}
\Configure{mhchemce}{\HCode{<span~class="mhchem">}}{\HCode{</span>}}


% alternative version of coreFivd

\NewConfigure{mhchemisotope}{3}
\Configure{mhchemisotope}{\HCode{<span~class="mhchem-isotope">}}{\HCode{<br~/>&\#xfeff;}}{\HCode{</span>}}

\NewConfigure{mhchemsub}{2}
\Configure{mhchemsub}{\HCode { <sub~class="mhchem-sub"> }}{\HCode { </sub> } }

\NewConfigure{mhchemsup}{2}
\Configure{mhchemsup}{\HCode { <sup~class="mhchem-sup"> }}{\HCode { </sup> } }

\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}
\Configure{mhchemoperator}{\HCode { <span~class="mhchem-operator"> ~ }}{\HCode { ~ </span> }}

% 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 { &minus; } }
\cs_set_protected:Npn \__mhchem_output_operatorPlus:
  { \a:mhchemoperator + \b:mhchemoperator  }
\cs_set_protected:Npn \__mhchem_output_operatorMinus:
  { \a:mhchemoperator\HCode {&minus;} \b:mhchemoperator }
\cs_set_protected:Npn \__mhchem_output_operatorEquals:
  { \a:mhchemoperator =  \b:mhchemoperator }
\cs_set_protected:Npn \__mhchem_output_operatorPlusMinus:
  {\a:mhchemoperator \HCode {&plusmn; } \b:mhchemoperator }
\cs_set_protected:Npn \__mhchem_output_electronDot: { \HCode { &bull; } }
\cs_set_protected:Npn \__mhchem_output_additionCompound: { \HCode { &middot; } }
\cs_set_protected:Npn \__mhchem_output_excited: { \HCode { &\#x2731; } }
\cs_set_protected:Npn \__mhchem_output_commaDecimal: { , }
\cs_set_protected:Npn \__mhchem_output_commaEnumeration: { , \HCode { &thinsp; } }
\cs_set_protected:Npn \__mhchem_output_commaEnumerationSmall: { , \HCode { &thinsp; } }
  
\cs_set_protected:Npn \__mhchem_output_bond_single: { \HCode { &minus; } }
\cs_set_protected:Npn \__mhchem_output_bond_double: { \HCode { &equals; } }
\cs_set_protected:Npn \__mhchem_output_bond_triple: { \HCode { &equiv; } }
% todo: add MathML support for these
\cs_set_protected:Npn \__mhchem_output_bond_half:  % todo: improve
  { \HCode { <span~class="mhchem-bond-half-middle">&\#xfe4d;</span> } }
\cs_set_protected:Npn \__mhchem_output_bond_oneAndHalf:  % todo: improve 
  { \HCode { <span~class="mhchem-rlap">&minus;</span><span~class="mhchem-bond-half-top">&\#xfe4d;</span> } }
\cs_set_protected:Npn \__mhchem_output_bond_twoAndHalf:  % todo: improve
  { \HCode { <span~class="mhchem-rlap">=</span><span~class="mhchem-bond-half-top">&\#xfe4d;</span> } }
\cs_set_protected:Npn \__mhchem_output_bond_twoAndHalff:  % todo: improve
  { \HCode { <span~class="mhchem-rlap~mhchem-bond-top">&minus;</span><span~class="mhchem-rlap~mhchem-bond-bottom">&minus;</span><span~class="mhchem-bond-half-middle">&\#xfe4d;</span> } }
\cs_set_protected:Npn \__mhchem_output_bond_dotdotdot: { \HCode { &middot;&middot;&middot; } }
\cs_set_protected:Npn \__mhchem_output_bond_dotdotdotdot: { \HCode { &middot;&middot;&middot;&middot; } }
\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}

\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



\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}
\:CheckOption{mathml}
\if:Option

\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{<mo>}}}{\HCode{\:mhonlyinmathml{</mo>}</\:mhmathmlorhtml{mrow}{span}>}}
\Configure{mhchemarrowabove}{\HCode { <\:mhmathmlorhtml{mrow}{span} class="mhchem-above">\:mhonlyinmathml{<mo>}}}{\HCode{\:mhonlyinmathml{</mo>}</\:mhmathmlorhtml{mrow}{span}>}}
\Configure{mhchemarrowyields}{ \HCode { <\:mhmathmlorhtml{mrow}{span} class="mhchem-arrow-normal">\:mhonlyinmathml{<mo>}&\#x2192;\:mhonlyinmathml{</mo>}</\:mhmathmlorhtml{mrow}{span}> } }
\Configure{mhchemarrowyieldsLeft}{ \HCode { <\:mhmathmlorhtml{mrow}{span} class="mhchem-arrow-normal">\:mhonlyinmathml{<mo>}&\#x2190;\:mhonlyinmathml{</mo>}</\:mhmathmlorhtml{mrow}{span}> } }
\Configure{mhchemarrowyieldsLeftRight}{ \HCode { <\:mhmathmlorhtml{mrow}{span} class="mhchem-arrow-normal">\:mhonlyinmathml{<mo>}&\#x21c4;\:mhonlyinmathml{</mo>}</\:mhmathmlorhtml{mrow}{span}> } }  % todo: improve
\Configure{mhchemarrowmesomerism}{ \HCode { <\:mhmathmlorhtml{mrow}{span} class="mhchem-arrow-normal">\:mhonlyinmathml{<mo>}&\#x2194;\:mhonlyinmathml{</mo>}</\:mhmathmlorhtml{mrow}{span}> } }  % todo: improve
\Configure{mhchemarrowequilibrium}{ \HCode { <\:mhmathmlorhtml{mrow}{span} class="mhchem-arrow-normal">\:mhonlyinmathml{<mo>}&\#x21cc;\:mhonlyinmathml{</mo>}</\:mhmathmlorhtml{mrow}{span}> } }  % todo: improve
\Configure{mhchemarrowequilibriumRight}{ \HCode { <\:mhmathmlorhtml{mrow}{span} class="mhchem-arrow-larger">\:mhonlyinmathml{<mo>}&\#x21c0;\:mhonlyinmathml{</mo>}</\:mhmathmlorhtml{mrow}{span}><\:mhmathmlorhtml{mrow}{span} class="mhchem-arrow-complement">\:mhonlyinmathml{<mo>}&\#x21bd;\:mhonlyinmathml{</mo>}</\:mhmathmlorhtml{mrow}{span}> } }  % todo: improve
\Configure{mhchemarrowequilibriumLeft}{ \HCode { <\:mhmathmlorhtml{mrow}{span} class="mhchem-arrow-complement">\:mhonlyinmathml{<mo>}&\#x21c0;\:mhonlyinmathml{</mo>}</\:mhmathmlorhtml{mrow}{span}><\:mhmathmlorhtml{mrow}{span} class="mhchem-arrow-larger">\:mhonlyinmathml{<mo>}&\#x21bd;\:mhonlyinmathml{</mo>}</\:mhmathmlorhtml{mrow}{span}> } }  % todo: improve
\else
\fi
% }

\Hinput{mhchem}
\endinput

Es gibt noch einige zusätzliche HTML-Tags, die Sie mithilfe dieser Konfigurationsdatei entfernen müssen config.cfg:

\RequirePackage{color} 
\Preamble{xhtml}
\Configure{mhchemce}{}{}
\Configure{mhchemcf}{}{}
\begin{document}
\EndPreamble

Kompilieren mit:

$ make4ht -c config.cfg -f odt Test.tex

Dies ist das Ergebnis:

Bildbeschreibung hier eingeben

verwandte Informationen