我正在使用 tex4ht 将包含大量数学内容的 LaTeX 文件转换为 HTML,以便能够在 Web 应用程序中使用它们。可以成功地将所有方程式转换为 MathML 和 jsMath。但由于方程式未针对 Web 进行优化,因此其中一些方程式呈现错误,甚至无法像原始 PDF 那样呈现。因此我决定使用 LaTeX 作为数学公式,因为我认为 Mathjax 比 jsMath 或 MathML 更能处理 LaTeX 方程式。
已经看过tex4ht 保持方程不变,tex4ht 保持方程不变 - 包括 \[...\] 和 \(...\)和TeX4HT 方程式使用 newcommand 或 def 命令不变
我可以设法保留内联数学的原样,但在对齐的独立数学方面却举步维艰。
例如:
After a time $t$, the ground state $\ket{g}$ and the excited state $\ket{e}$ will each have accumulated a phase that is proportional to their energies:
\begin{align}
\ket{\psi(0)} \to \ket{\psi(t)} = \frac{e^{-iE_1 t/\hbar}}{\sqrt{2}} \ket{g} + \frac{e^{-iE_2 t/\hbar}}{\sqrt{2}} \ket{e}\, .
\end{align}
We can take out the factor $e^{-iE_1 t/\hbar}$ as a global unobservable phase, and obtain
\begin{align}\label{eq:atomequator}
\ket{\psi(t)} = \frac{1}{\sqrt{2}} \ket{g} + \frac{e^{-i(E_2 - E_1)t/\hbar}}{\sqrt{2}} \ket{e}\, .
\end{align}
所以我可以让 tex4ht 不转换$\ket{g}$在第一行进入图像,但内部存在数学问题{对齐}。
我正在使用此答案中描述的 michal-h21 的 .cfg 文件:https://tex.stackexchange.com/a/165119/52068
任何帮助将不胜感激。
附言:我不是 LaTeX 专家,自己也没有写过这些文档。所以我需要找到一种方法来在不修改或只进行少量修改的情况下使用我已有的 LaTeX。
答案1
您可以使用您链接到的答案中的配置文件,\VerbMath
命令在此处定义。此命令将环境定义为逐字逐句,因此不会处理其中的 LaTeX 宏。只需\VerbMath{align}
在之前添加\EndPreamble
:
\usepackage{verbatim}
\Preamble{xhtml}
% Configure for mathjax
\Configure{VERSION}{}
\Configure{DOCTYPE}{\HCode{<!DOCTYPE html>\Hnewline}}
\Configure{HTML}{\HCode{<html>\Hnewline}}{\HCode{\Hnewline</html>}}
\Configure{@HEAD}{\HCode{
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
TeX: {
Macros: {
\unexpanded{ ket: ['{\\left|\#1\\right\\rangle}',1]}
},
equationNumbers: { autoNumber: "AMS" }
},
extensions: ["tex2jax.js"],
tex2jax: {
\unexpanded{
inlineMath: [ ['\$','\$'], ["\\\\(","\\\\)"] ],
displayMath: [ ['$$','$$'], ["\\[","\\]"] ],}
processEscapes: true
}
});
</script>
}}
\Configure{@HEAD}{\HCode{<script type="text/javascript"\Hnewline
src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"\Hnewline
></script>\Hnewline}}
\newtoks\eqtoks
\def\AltMath#1${\eqtoks{$#1$}%
\HCode{\the\eqtoks}$}
\Configure{$}{}{}{\expandafter\AltMath}
\def\AltlMathI#1\){\eqtoks{\(#1\)}%
\HCode{\the\eqtoks}}
\Configure{()}{\AltlMathI}{}
\def\AltlDisplay#1\]{\eqtoks{\[#1\]}%
\HCode{\the\eqtoks}}
\Configure{[]}{\AltlDisplay}{}
\def\AltlDisplayI#1$${\eqtoks{$$#1$$}%
\HCode{\the\eqtoks}$$}
\Configure{$$}{}{}{\expandafter\AltlDisplayI}
\begin{document}
\newcommand\VerbMath[1]{%
\renewenvironment{#1}{%
%\ifvmode \IgnorePar\fi \EndP
\NoFonts%
\char`\\begin\{#1\}%
\verbatim}{\endverbatim\string\end\{#1\}\EndNoFonts}%
}
\VerbMath{equation*}
\VerbMath{align}
% add all used math environments here with \VerbMath
\EndPreamble
请注意,该\keg
命令是未知的,mathajx
因此您需要向此部分添加一些配置:
TeX: {
Macros: {
\unexpanded{ ket: ['{\\left|\#1\\right\\rangle}',1]}
}
因为您没有提供完整的示例,所以我在您提供的代码中添加了一些最少的前言:
\documentclass{article}
\usepackage{amsmath}
\usepackage{braket}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\begin{document}
After a time $t$, the ground state $\ket{g}$ and the excited state $\ket{e}$ will each have accumulated a phase that is proportional to their energies:
\begin{align}
\ket{\psi(0)} \to \ket{\psi(t)} = \frac{e^{-iE_1 t/\hbar}}{\sqrt{2}} \ket{g} + \frac{e^{-iE_2 t/\hbar}}{\sqrt{2}} \ket{e}\, .
\end{align}
We can take out the factor $e^{-iE_1 t/\hbar}$ as a global unobservable phase, and obtain
\begin{align}\label{eq:atomequator}
\ket{\psi(t)} = \frac{1}{\sqrt{2}} \ket{g} + \frac{e^{-i(E_2 - E_1)t/\hbar}}{\sqrt{2}} \ket{e}\, .
\end{align}
\end{document}
生成的网页: