tex4ht verarbeitet \ ifdefined \ HCode im mathjax-Modus nicht
Dies ist nur ein Problem mit tex4ht.
Dies ist das erste Mal, dass ich gefunden habe, wo tex4ht nicht verarbeitet wird \ifdefined\HCode.
Ich habe \ifdefined\HCodeeine Gleichung eingegeben, da ich für den HTML- und den PDF-Modus einen anderen Code benötige.
tex4htverarbeitet das nicht ifdefinedund lässt es dort. Wenn mathjaxes es sieht, beschwert es sich, da Mathjax Offcourse nichts darüber weiß ifdefined\HCode.
Wenn der Code ohne Verwendung kompiliert wird mathjax, funktioniert er einwandfrei. Aber ich muss verwenden mathjax.
Hier ist MWE
\documentclass[12pt]{article}
\usepackage{array}
\begin{document}
\[
\ifdefined\HCode
\left[
\begin{array}{ccc}
\else
\left[
\begin{array}{@{}cc|c@{}}
\fi
3 i&-3 &0\\
3 &3 i &0
\end{array}
\right]
\]
test
\end{document}
Das oben kompilierte OK mit lualatex foo3.texund gibt
Aber das Kompilieren make4ht -ulm default -a debug foo3.tex "mathjax,htm"damit gibt
Dies ist das rohe HTML. es zeigt, dass das \ifdefined\HCodenicht verarbeitet und dort belassen wurde
<!DOCTYPE html>
<html lang="en-US" xml:lang="en-US" >
<head><title></title>
<meta charset="utf-8" />
<meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<link rel="stylesheet" type="text/css" href="foo3.css" />
<meta name="src" content="foo3.tex" />
<script>window.MathJax = { tex: { tags: "ams", inlineMath: [ ["\\\(","\\\)"] ], displayMath: [ ['$$','$$'], ["\\[","\\]"] ], processEscapes: true, processEnvironments: true, packages: ['base', 'color', 'ams'] }, loader: { load: ['[tex]/color', '[tex]/ams'] } }; </script>
<script type="text/javascript" async="async" id="MathJax-script" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml-full.js"></script>
</head><body
>
<!--l. 23--><p class="noindent" >\[ \ifdefined \HCode \left [ \begin{array}{ccc} \else \left [ \begin{array}{@{}cc|c@{}} \fi 3 i&-3 &0\\ 3 &3 i &0 \end{array} \right ] \]
</p><!--l. 25--><p class="indent" > test
</p>
</body>
</html>
Kompiliert mit make4ht -ulm default -a debug foo3.tex "htm"funktioniert ohne Probleme und gibt
Die Probleme scheinen, dass tex4ht nicht in die Gleichung schaut, um zu sehen, dass etwas zu tun ist, und einfach das Ganze an weitergibt mathjax.
AKTUALISIEREN
Ich habe eine Problemumgehung gefunden. Das heißt, \ifdefined\HCodealles außerhalb zu stellen und den gesamten Code zweimal zu duplizieren, einschließlich des arrayCodes. Ich hatte gehofft, dies zu vermeiden. Aber das funktioniert jetzt. Aus irgendeinem Grund \ifdefined\HCodefunktioniert das Einfügen einer Gleichung im mathjaxModus nicht mit tex4ht .
\documentclass[12pt]{article}
\usepackage{array}
\begin{document}
\ifdefined\HCode %tex4ht version
\[
\left[
\begin{array}{ccc}
3 i&-3&0\\
0 &0 &0
\end{array}
\right]
\]
\else %PDF version
\[
\left[
\begin{array}{@{}cc|c@{}}
3 i&-3&0\\
0 &0 &0
\end{array}
\right]
\]
\fi
\end{document}
TL 2020
Antworten
TeX4ht kann Ihren Code natürlich nicht in mathematischen Umgebungen interpretieren, da sie wörtlich an HTML-Code übergeben werden. Sie werden von MathJax interpretiert, wenn Sie den HTML-Code anzeigen, und MathJax weiß natürlich nichts darüber \ifdefined\HCode, daher wird es ignoriert. Sie müssen entweder Ihren Code duplizieren und LaTeX Ihren Code interpretieren lassen, oder Sie können versuchen, eine benutzerdefinierte Umgebung zu verwenden und eine alternative Definition an MathJax zu übergeben. Welches kann oder kann nicht funktionieren.
Zum Beispiel scheint dies zu funktionieren:
\documentclass[12pt]{article}
\usepackage{array}
\newcommand\mathjaxalt[2]{#2}
\begin{document}
\[
\mathjaxalt{%
\left[
\begin{array}{ccc}
}{%
\left[
\begin{array}{@{}cc|c@{}}
}%
3 i&-3 &0\\
3 &3 i &0
\end{array}
\right]
\]
test
\end{document}
Ich habe das \mathjaxaltMakro definiert , das zwei Parameter akzeptiert. Erstens enthält es Code für MathJax, zweitens enthält es Code für reguläres LaTeX. Sie müssen eine Definition dieses Makros für MathJax in einer Konfigurationsdatei angeben:
\Preamble{xhtml}
\Configure{MathJaxConfig}{{
tex: {
tags: "ams",
\detokenize{%
inlineMath: [ ["\\\(","\\\)"] ],
displayMath: [ ['$$','$$'], ["\\[","\\]"] ]},
processEscapes: true,
processEnvironments: true,
macros: {
mathjaxalt: ["\#1",2],
}
},
loader: {
load: ['[tex]/color', '[tex]/ams']
}
};
}
\begin{document}
\EndPreamble
Dies ist die Definition:
macros: {
mathjaxalt: ["\#1",2],
}
Es verwendet den ersten Parameter im Gegensatz zur ursprünglichen Definition, die den zweiten Parameter verwendet.
So wird es in HTML gerendert: