此 MWE
\documentclass{article}
\ifdefined\HCode
\def\pgfsysdriver{pgfsys-dvisvgm4ht.def}
\fi
\usepackage{amsmath}
\usepackage[edges]{forest}
\begin{document}
\begin{forest}
for tree={
draw, rounded corners, fill=blue!20,
minimum height=1.5cm, minimum width=2cm,
align=center, base=b,
s sep=1cm, l sep=.5cm,
if level<=2{edge=-latex}{edge=red},
}
[differential\\equation
[\begin{minipage}{2cm}
first order
\vspace{-8pt}
{\begin{align*}
f(x,y,(y')^n)&=0
\end{align*}
}
\end{minipage}
,calign=last
]
]
\end{forest}
\end{document}
使用编译时
make4ht -ulm default -a debug foo4.tex "htm" "-cunihtf -utf8"
给出这个 HTML
但是使用 mathjax 模式编译时
make4ht -ulm default -a debug foo4.tex "mathjax,htm" "-cunihtf -utf8"
给出这个 html
缺少数学。
我尝试了有和没有,\def\pgfsysdriver{pgfsys-dvisvgm4ht.def}
因为我不确定 mathjax 是否需要这个,但没有什么区别。产生了相同的结果。mathjax 模式中缺少数学。
这是否意味着应该将 Tikz/Forest 图表编译为独立图像并将其作为图像包含在 HTML 中,而不是像上面的示例那样将其全部内联执行?
TL 2022
which tex4ht
/usr/local/texlive/2022/bin/x86_64-linux/tex4ht
make4ht --version
make4ht version v0.3l
答案1
这个比较复杂。大多数数学环境在 MathJax 模式中被重新定义,以至于它们不能在图片中使用。除了外部化之外,我能想到的唯一方法就是将环境重新定义回森林环境开始时的原始含义。环境的示例align*
如下所示:
\Preamble{xhtml}
\makeatletter
\AddToHook{env/forest/begin}{%
\renewenvironment{align*}
{\start@align \@ne \st@rredtrue \m@ne}
{\math@cr \black@ \totwidth@ \egroup \ifingather@ \restorealignstate@ \egroup \nonumber \ifnum 0=`{\fi \iffalse }\fi \else $$\fi \ignorespacesafterend}
}
\makeatother
\begin{document}
\EndPreamble
在森林环境开始时执行\AddToHook{env/forest/begin}
代码。更改是局部的,因此align*
环境仍将与 MathJax 在外部一起工作forest
。
结果如下: