首页 > 解决方案 > Mathjax 更新了 Latex 方程的渲染

问题描述

我一直在使用这段代码来渲染乳胶。但是,当我更新我的方程式时,呈现的 HTML 不会刷新。我尝试查找文档typeset()typesetPromise()但在此处的代码示例中找不到太多帮助:

//rederMath.tsx 
import { mathjax } from 'mathjax-full/js/mathjax';
import { TeX } from 'mathjax-full/js/input/tex';
import { CHTML } from 'mathjax-full/js/output/chtml'
import { AllPackages } from 'mathjax-full/js/input/tex/AllPackages';
import { browserAdaptor } from 'mathjax-full/js/adaptors/browserAdaptor';
import { RegisterHTMLHandler } from 'mathjax-full/js/handlers/html';

RegisterHTMLHandler(browserAdaptor());

const html = mathjax.document(document, {
  InputJax: new TeX({
    inlineMath: [['$', '$'], ['\\(', '\\)']],
    packages: AllPackages
  }),
  OutputJax: new CHTML()
});

html.findMath()
  .compile()
  .getMetrics()
  .typeset()
  .updateDocument();

有没有办法在等式更改后获取更新的 HTML?

标签: typescriptmathjax

解决方案


正如我在您启动的MathJax 问题跟踪器中提到的那样,MathJax 会跟踪已经执行的步骤,以便在进程中断时不必重做它们(例如,对于扩展的动态加载)。但这也意味着这些步骤不会被第二次执行,除非你告诉 MathJax 你想要它们。你通过html.reset(). 所以

html.findMath()
    .compile()
    .getMetrics()
    .typeset()
    .updateDocument()
    .reset();

将允许您重复该过程。

此示例是一个旧示例,并且有一个更新的 API 可以为您执行第一个修复步骤(以及注册的任何其他步骤,renderActions例如添加 MahJax 上下文菜单等)。这是

html.render()
    .reset();

如果您愿意,您仍然可以像以前一样执行各个步骤。

如果您经常更新同一个方程(即,用新方程替换它),那么您可能还想调用html.clear()而不是html.reset()为了删除前一个表达式的记录(否则排版表达式的列表会增加,因为它还包括该表达式的所有过去版本)。


推荐阅读