这是我想要转换为 HTML 的 LaTeX 文档的示例。
\documentclass[11pt]{book}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{amsthm}
\usepackage{amscd}
\begin{document}
Some math...\newline
Scalars: regular math font $a, x, X, \alpha, \beta, \Theta, \ldots$ \newline
Vectors: bold math font $\boldsymbol{a}, \boldsymbol{x}, \boldsymbol{X}, \boldsymbol{\alpha}, \boldsymbol{\beta}, \boldsymbol{\Theta}, \ldots$ \newline
\end{document}
这是.cfg
我用来转换的文件。
% bold-math.cfg
\usepackage[T1]{fontenc}
% We are generating HTML + MathML code
\Preamble{xhtml,mathml,3,charset=utf-8,notoc*,nominitoc,fonts}
% Don't output xml version tag
\Configure{VERSION}{}
% Output HTML5 doctype instead of the default for HTML4
\Configure{DOCTYPE}{\HCode{<!doctype html>\Hnewline}}
% Custom page opening
\Configure{HTML}{\HCode{<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\Hnewline}}{\HCode{\Hnewline</html>}}
% Reset <head>, aka delete all default boilerplate
\Configure{@HEAD}{}
% Setup custom <head> content
\Configure{@HEAD}{\HCode{<meta charset="utf-8" />\Hnewline}}
\Configure{@HEAD}{\HCode{<meta name="generator" content="TeX4ht (http://www.cse.ohio-state.edu/\string~gurari/TeX4ht/)" />\Hnewline}}
% Add css files
\Configure{@HEAD}{\HCode{<link rel="stylesheet" type="text/css" href="\expandafter\csname aa:CssFile\endcsname" />\Hnewline}}
\Configure{@HEAD}{\HCode{<link rel="stylesheet" href="../Serif/cmun-serif.css" type="text/css" />\Hnewline}}
\Configure{@HEAD}{\HCode{<link rel="stylesheet" href="bold-math-mi.css" type="text/css" />\Hnewline}}
% Setup MathJax
\Configure{@HEAD}{\HCode{<script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=MML_CHTML"></script>\Hnewline}}
%\Configure{@HEAD}{\HCode{<script type="text/javascript" src="../MathJax/MathJax.js?config=MML_CHTML"></script>\Hnewline}}
% Translate \textbf, \textit and \texttt directives into <b>, <em> and <code>
\Configure{emph}{\ifvmode\ShowPar\fi\HCode{<em>}}{\HCode{</em>}}
\Configure{textbf}{\ifvmode\ShowPar\fi\HCode{<b>}}{\HCode{</b>}}
\Configure{textit}{\ifvmode\ShowPar\fi\HCode{<i>}}{\HCode{</i>}}
\Configure{texttt}{\ifvmode\ShowPar\fi\HCode{<code>}}{\HCode{</code>}}
% Translate verbatim and lstlisting blocks into <pre> elements
\ConfigureEnv{verbatim}{\HCode{<pre>}}{\HCode{</pre>}}{}{}
\ConfigureEnv{lstlisting}{\HCode{<pre>}}{\HCode{</pre>}}{}{}
% Do not set `indent`/`noindent` classes on paragraphs
\Configure{HtmlPar}
{\EndP\Tg<p>}
{\EndP\Tg<p>}
{\HCode{</p>\Hnewline}}
{\HCode{</p>\Hnewline}}
\begin{document}
\EndPreamble
这是我用来生成 HTML 文件的命令。
htlatex bold-math.tex "bold-math" " -cunihtf -utf8" " -cvalidate"
如您所见,问题在于\boldsymbol
输出中忽略了,大写字母\Theta
为斜体,而 为正常字体。在对 HTML 输出中的 MathML 代码进行一些调整后,我得到了以下内容。
这是我做的几处调整,供参考。
来自:
<mi>a</mi>
<mi>Θ</mi>
到:
<mi mathvariant="bold-italic">a</mi>
<mi mathvariant="bold">Θ</mi>
这表明 MathJax 和 MathML 能够显示我想要的内容。我猜问题出在 tex4ht 上。
有人知道如何解决这些问题吗?
答案1
获取粗体符号的最直接方法是重新定义\boldsymbols
命令以包含您想要的标签。将此命令放入您的 .cfg 文件中:
\renewcommand\boldsymbol[1]{\HCode{<mi mathvariant="bold-italic">}\PauseMathClass #1\EndPauseMathClass\HCode{</mi>}}
\PauseMathClass
将阻止tex4ht
包含基于字体的标签,你会得到
<mi mathvariant="bold-italic"><mi
>x</mi></mi>
否则。结果 mathml:
<mi mathvariant="bold-italic">a</mi><mo
class="MathClass-punc">,</mo><mi mathvariant="bold-italic">x</mi><mo
class="MathClass-punc">,</mo><mi mathvariant="bold-italic">X</mi><mo
class="MathClass-punc">,</mo><mi mathvariant="bold-italic">α</mi><mo
class="MathClass-punc">,</mo><mi mathvariant="bold-italic">β</mi><mo
class="MathClass-punc">,</mo><mi mathvariant="bold-italic">Θ</mi><mo
class="MathClass-punc">,</mo><mo
class="MathClass-op">…</mo>
另一种方法是使用bm
包,正如 Barbara 所建议的那样。它似乎也重新定义了\boldsymbol
,并且得到了支持tex4ht
,但有一个警告:
<mstyle mathvariant="bold"><mi
>a</mi></mstyle><mo
class="MathClass-punc">,</mo><mstyle mathvariant="bold"><mi
>x</mi></mstyle><mo
class="MathClass-punc">,</mo><mstyle mathvariant="bold"><mi
>X</mi></mstyle><mo
class="MathClass-punc">,</mo><mstyle mathvariant="bold"><mi
>α</mi></mstyle><mo
class="MathClass-punc">,</mo><mstyle mathvariant="bold"><mi
>β</mi></mstyle><mo
class="MathClass-punc">,</mo><mstyle mathvariant="bold"><mi
>Θ</mi></mstyle><mo
class="MathClass-punc">,</mo><mo
class="MathClass-op">…</mo></math>
<mi>
问题是,虽然有一个元素作为子元素,但似乎只选择了粗体,而不是斜体样式<mstyle>
。我不确定这是否只是 Firefox 渲染中的错误,但您可以使用构建文件中的一些简单正则表达式轻松地将这些元素替换为所需的输出make4ht
:
-- sample.mk4
local filter = require "make4ht-filter"
local htmlmatch = filter {
function(text)
return text:gsub('<mstyle mathvariant="bold">%s*<mi%s*>([^%<]+)</mi></mstyle>', function(symbol)
return string.format('<mi mathvariant="bold-italic">%s</mi>', symbol)
end)
end
}
if mode=="draft" then
Make:htlatex {}
else
Make:htlatex {}
Make:htlatex {}
Make:htlatex {}
end
Make:match("html$", htmlmatch)
正则表达式包含在htmlmatch
函数中。使用以下命令进行编译:
make4ht -uc bold-math.cfg -e sample.mk4 bold-math.tex
得到的数学结果:
<mi mathvariant="bold-italic">a</mi><mo
class="MathClass-punc">,</mo><mi mathvariant="bold-italic">x</mi><mo
class="MathClass-punc">,</mo><mi mathvariant="bold-italic">X</mi><mo
class="MathClass-punc">,</mo><mi mathvariant="bold-italic">α</mi><mo
class="MathClass-punc">,</mo><mi mathvariant="bold-italic">β</mi><mo
class="MathClass-punc">,</mo><mi mathvariant="bold-italic">Θ</mi><mo
class="MathClass-punc">,</mo><mo
class="MathClass-op">…</mo>
Firefox 渲染:
答案2
@Matteo Ipri 要解决 tex4ht 在对粗体符号进行上标或下标时生成的不平衡标签问题,请用\boldsymbol{\sigma}
括号括起来。这将生成正确平衡的标签。
而不是$\boldsymbol{\sigma}_{a}^{2}$
使用${\boldsymbol{\sigma}}_{a}^{2}$
。