我不是在询问将 LaTeX 文档转换为 html 的问题。
我想做的是有一些方法可以在 html 文档中使用 LaTeX 数学命令,并让它在浏览器中正确显示。这可以在服务器端或客户端完成。
我更喜欢MathJax,而不是选择渲染图像的解决方案(这会导致锯齿问题)。
MathJax 是一个开源的 Javascript 数学渲染引擎。它使用 CSS 和 Webfonts 而不是图像或 Flash,并且可以渲染 LaTeX 或 MathML。这样您就不会遇到缩放问题,甚至可以兼容屏幕阅读器。
MediaWiki 可以满足您的需求。它使用 Texvc ( http://en.wikipedia.org/wiki/Texvc ) “验证 (AMS) LaTeX 数学表达式并将它们转换为 HTML、MathML 或 PNG 图形”。听起来像你在找什么。
查看维基百科关于他们如何处理数学方程的文章:http ://en.wikipedia.org/wiki/Help:Formula 。他们还对 LaTeX 和不同渲染类型(PNG/MathML/HTML)的优缺点有广泛的参考。
MediaWiki 使用 TeX 标记的子集,包括 LaTeX 和 AMS-LaTeX 的一些扩展,用于数学公式。它根据用户偏好和表达式的复杂性生成 PNG 图像或简单的 HTML 标记。未来,随着更多浏览器变得更智能,它在很多情况下将能够生成增强的 HTML 甚至是 MathML。(有关添加 MathML 支持的当前工作的信息,请参阅 blahtex。)
更准确地说,MediaWiki 通过 Texvc 过滤标记,然后将命令传递给 TeX 以进行实际渲染。因此,仅支持完整 TeX 语言的有限部分;详情见下文。...
HTML 的优点
- 内联 HTML 公式始终与 HTML 文本的其余部分正确对齐。
- 公式的背景、字体大小和字体与 HTML 内容的其余部分相匹配,并且外观符合 CSS 和浏览器设置。
- 使用 HTML 的页面将加载得更快。
TeX 的优点
- TeX 在语义上优于 HTML。在 TeX 中,“x”表示“数学变量 x”,而在 HTML 中,“x”可以表示任何东西。信息已不可挽回地丢失。这有很多好处:
- TeX 可以转换为 HTML,反之则不行。这意味着在服务器端,我们总是可以根据公式的复杂性和在文本中的位置、用户偏好、浏览器类型等来转换公式。因此,在可能的情况下,可以保留 HTML 的所有优点,以及TeX 的好处。确实,目前的情况并不理想,但这不是删除信息/内容的好理由。这更多的是帮助改善情况的原因。
- TeX 可以为支持它的浏览器转换为 MathML,从而保持其语义并允许将其呈现为向量。
- TeX 专为排版公式而设计,因此输入更轻松自然,输出更美观。
- 使用 TeX 编写时,编辑者不必担心浏览器支持,因为它是由服务器渲染成图像的。另一方面,HTML 公式最终可能会被某些浏览器或旧版本的浏览器渲染为与编辑器的意图不一致(或根本不一致)。
从历史上看,渲染 LaTeX 和提取图像一直是跨平台、跨浏览器数学的最佳选择。MathML 越来越成为一种合理的替代方案。 这是一个在线转换器,它将从 Tex 标记发出 MathML,然后您可以将其嵌入到您的网页中。我知道 Firefox 和 Camino 等基于 Gecko 的浏览器与 MathML 配合得很好,Opera 也是如此。IE 不能开箱即用,但有可用的插件(比如这个)。
Texvc 是一个很棒的发现!如果您对上标/下标/斜体/常用符号最感兴趣,则普通 HTML 输出应该可以正常工作,但对于更复杂的事情,请注意最流行的面向数学的网站(例如Wolfram)会生成图像,所以那里如果您对跨浏览器兼容性感兴趣,您可能只能做这么多:-(
我自己开始研究这个,似乎事情已经发展了。我遇到了这个KaTeX和MathJax的比较演示。
长话短说(截至撰写本文时):
但也许最决定性的是,我发现页面的总 MathJax 处理平均为1674 毫秒,运行了 3 次。相比之下,KaTeX 平均为128 毫秒,这要好一个数量级!
在浏览他们各自的网站时,还需要考虑其他一些比较点:
我在这里阅读了所有答案,我很惊讶没有人提到从 PDF 到 HTML 的转换。如果您使用pdf2htmlEX,它将从 pdf 创建完美的网页。您只需将您的乳胶编译为 pdf (pdflatex)。
默认情况下,它会生成一个 html 文件,其中 PDF 的内容由 CSS、javascript 和 html 组成。我尝试了很多工具将乳胶转换为 html,这是迄今为止我发现的最好和最简单的解决方案。
这个问题只有一个(非常好的)答案引用了KaTeX,根据我的经验,它是最有效的解决方案,加载速度快且易于实施。
您需要添加一个<link>
标签(用于样式表)和两个<script>
s 到您的<head>
. 然后\( \)
用作内联数学\[ \]
的分隔符和 . 中显示的数学的分隔符<body>
。
这是一个带有实现的最小 html5 文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Katex</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.css" integrity="sha384-zB1R0rpPzHqg7Kpt0Aljp8JPLqbXI3bhnPWROx27a9N0Ll6ZP/+DiW/UqRcLbRjq" crossorigin="anonymous">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.js" integrity="sha384-y23I5Q6l+B6vatafAwxRu/0oK/79VlbSz7Q9aiSZUvyWYIYsd+qj+o24G5ZU2zJz" crossorigin="anonymous"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/contrib/auto-render.min.js" integrity="sha384-kWPLUVMOks5AQFrykwIup5lo0m3iMkkHrD0uJ4H5cjeGihAutqP0yW0J6dpFiVkI" crossorigin="anonymous" onload="renderMathInElement(document.body);"></script>
</head>
<body>
<p>Math can be inline like \(2^{2x}=4\), or displayed like:</p>
\[2^{3x}=8\]
</body>
</html>
你可以试试LaTexRenderer。我不知道它是否是最好的,但它确实有效。
如果这符合您的要求,我肯定会鼓励您查看 MathML,但是使用JsTeX进行一些工作可以为您提供所需的一切。