tex4ht, mathjax modunda \ ifdefined \ HCode'u işlemez

Oct 02 2020

Bu yalnızca tex4ht ile ilgili bir sorundur.

Tex4ht'in nerede işlenmediğini ilk kez buldum \ifdefined\HCode.

\ifdefined\HCodeHTML ve pdf modu için farklı koda ihtiyacım olduğu için bir denklemin içine koydum .

tex4htişlemez ifdefinedve orada bırakmaz. Bunu mathjaxgördüğünde, Mathjax ders dışı hakkında hiçbir şey bilmediğinden şikayet ediyor ifdefined\HCode.

Kod kullanılmadan derlendiğinde mathjaxtamam çalışır. Ama kullanmam gerek mathjax.

İşte 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}

Yukarıdaki OK kullanarak derlenmiş lualatex foo3.texve verir

Ancak make4ht -ulm default -a debug foo3.tex "mathjax,htm"onu kullanarak derlemek ,

Bu ham HTML'dir. \ifdefined\HCodeişlenmediğini ve orada kaldığını gösterir

<!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&amp;-3 &amp;0\\ 3 &amp;3 i &amp;0 \end{array} \right ] \]
</p><!--l. 25--><p class="indent" >   test
</p>   
 
</body> 
</html>

Sorunsuz make4ht -ulm default -a debug foo3.tex "htm"eserler kullanılarak derlenir ve verir

Sorunlara göre tex4ht, yapılacak bir şey olduğunu görmek için denklemin içine bakmıyor ve her şeyi ona aktarıyor mathjax.

GÜNCELLEME

Geçici çözüm buldum. Bu, \ifdefined\HCodeher şeyin dışına koymak ve kod dahil olmak üzere tüm kodu iki kez kopyalamaktır array. Bundan kaçınmayı umuyordum. Ama bu şimdilik çalışıyor. Bazı nedenlerden dolayı, \ifdefined\HCodemoddayken herhangi bir denklemin içine koymak tex4ht ile çalışmaz mathjax.

\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

Yanıtlar

3 michal.h21 Oct 02 2020 at 14:45

TeX4ht elbette kodunuzu matematik ortamlarında yorumlayamaz, çünkü bunlar HTML koduna aynen iletilir. HTML kodunu görüntülediğinizde MathJax tarafından yorumlanırlar ve MathJax elbette hakkında hiçbir şey bilmiyor \ifdefined\HCode, bu yüzden görmezden geliyor. Ya kodunuzu çoğaltmanız ve LaTeX'in kodunuzu yorumlamasına izin vermeniz gerekir ya da özel bir ortam kullanmayı deneyebilir ve MathJax'e alternatif bir tanım geçirebilirsiniz. Hangisi işe yarayabilir veya çalışmayabilir.

Örneğin, bu işe yarıyor gibi görünüyor:

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

\mathjaxaltİki parametre alan makroyu tanımladım , ilki MathJax için kod içeriyor, ikincisi normal LaTeX için kod içeriyor. Bir yapılandırma dosyasında MathJax için bu makronun tanımını sağlamanız gerekir:

\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

Tanım şudur:

macros: {
   mathjaxalt: ["\#1",2],
}

İkinci parametreyi kullanan orijinal tanımın aksine birinci parametreyi kullanır.

HTML'de şu şekilde oluşturulur: