这个问题只针对TeX4ht。
在 tex4ht 中使用 MathJax 模式时,它无法呈现包含 $\ln$ 的部分标题,但它对我迄今为止尝试过的所有其他符号都有效。
$\ln$ 有何特别之处?
平均能量损失
\documentclass[11pt]{article}%
\usepackage{amsmath}
\begin{document}
This is a document
\section{$\int \arcsin(x) \ln x \,dx$}
test
\section{$\int \arcsin(x) \sqrt x \,dx$}
test
\section{$\int \arcsin(x) \sin x \,dx$}
\end{document}
必须按如下方式编译才能看到问题:
make4ht -ulm default foo.tex "htm,1,mathjax"
在上面的例子中,分割级别为 1。任何大于 0 的值都表明存在问题。
现在 HTML 如下所示:
不使用mathjax
tex4ht 模式也可以解决问题。
这是生成的原始 HTML。请注意,由before\qopname \relax o{ln}x
生成的HTML不会执行任何操作。tex4ht
mathjax
<!DOCTYPE html>
<html lang="en-US" xml:lang="en-US" >
<head><title></title>
<meta charset="utf-8" />
<meta name="generator" content="TeX4ht (http://www.tug.org/tex4ht/)" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<link rel="stylesheet" type="text/css" href="foo.css" />
<meta name="src" content="foo.tex" />
<script type="text/x-mathjax-config"> MathJax.Hub.Config({ 'fast-preview': {disabled: true}, TeX: { extensions: ["color.js","AMSmath.js"], equationNumbers: { autoNumber: "AMS" } }, extensions: ["tex2jax.js"], tex2jax: { inlineMath: [ ["\\\(","\\\)"] ], displayMath: [ ['$$','$$'], ["\\[","\\]"] ], processEscapes: true, processEnvironments: true } }); </script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
</head><body
>
<!--l. 6--><p class="noindent" >This is a document
</p>
<div class="tableofcontents">
<span class="sectionToc" >1 <a
href="#x1-10001" id="QQ2-1-1">\(\int \arcsin (x) \qopname \relax o{ln}x \,dx\)</a></span>
<br /> <span class="sectionToc" >2 <a
href="#x1-20002" id="QQ2-1-2">\(\int \arcsin (x) \sqrt x \,dx\)</a></span>
<br /> <span class="sectionToc" >3 <a
href="#x1-30003" id="QQ2-1-3">\(\int \arcsin (x) \sin x \,dx\)</a></span>
</div>
<h3 class="sectionHead"><span class="titlemark">1 </span> <a
id="x1-10001"></a>\(\int \arcsin (x) \ln x \,dx\)</h3>
<!--l. 9--><p class="noindent" >test
</p><!--l. 11--><p class="noindent" >
</p>
<h3 class="sectionHead"><span class="titlemark">2 </span> <a
id="x1-20002"></a>\(\int \arcsin (x) \sqrt x \,dx\)</h3>
<!--l. 12--><p class="noindent" >test
</p><!--l. 14--><p class="noindent" >
</p>
<h3 class="sectionHead"><span class="titlemark">3 </span> <a
id="x1-30003"></a>\(\int \arcsin (x) \sin x \,dx\)</h3>
</body>
</html>
这是 TeX4ht 的一个错误吗?我现在也会将此报告给 texh4t 错误跟踪,并在此帖子中添加链接(在这里解释起来更容易,因为可以添加屏幕截图)。
我在用TeX Live 2019在 Linux 上。
答案1
amsmath
以非稳健的方式定义数学运算符,因此在写入辅助文件之前(例如在写入目录时)会对其进行部分扩展。为了解决这个问题,tex4ht 会加载一个.../texmf-dist/tex/generic/tex4ht/mathjax-latex-4ht.4ht
调整这些定义的文件。对我们来说最有趣的部分是:
\fixmathjaxtoc\int
\fixmathjaxtoc\,
\fixmathjaxtoc\sin
\fixmathjaxtoc\cos
\fixmathjaxtoc\tan
\fixmathjaxtoc\arcsin
\fixmathjaxtoc\arccos
\fixmathjaxtoc\arctan
\fixmathjaxtoc\csc
\fixmathjaxtoc\sec
\fixmathjaxtoc\cot
\fixmathjaxtoc\sinh
\fixmathjaxtoc\cosh
\fixmathjaxtoc\tanh
\fixmathjaxtoc\coth
\fixmathjaxtoc\log
(以下均带有\fixmathjaxtoc
)
所以你问了 有什么特别之处\ln
?它不在这个列表中。你能做些什么呢?添加\fixmathjaxtoc\ln
到你的文档中。(它必须放在后面, \begin{document}
因为 的定义\fixmathjaxtoc
加载得相当晚。此外,你想确保你的文档在没有 tex4ht 的情况下仍然有效,因此请首先检查该命令是否确实存在):
\documentclass[11pt]{article}%
\usepackage{amsmath}
\begin{document}
\ifx\fixmathjaxtoc\undefined\else
\fixmathjaxtoc\ln
\fi
This is a document
\section{$\int \arcsin(x) \ln x \,dx$}
test
\section{$\int \arcsin(x) \sqrt x \,dx$}
test
\section{$\int \arcsin(x) \sin x \,dx$}
\end{document}