繁体   English   中英

如何在 MathJax 中左对齐某些方程

[英]How to left align certain equations in MathJax

因此,默认情况下 MathJax 方程居中,但我想左对齐某些方程。 我知道如何使所有方程与 MathJax.Hub.Config 左对齐,但这不是我想要的。

我试过在网上找到的其他代码,例如:

<script type="text/javascript">
  MathJax.Hub.Queue(function () {
      MathJax.Hub.Config({displayAlign:"left"});
      MathJax.Hub.Typeset(["leqn"]);
    });
 </script>

然后用一个 id 为 leqn 的等式包裹一个 div,如下所示:

<div id="leqn">$$e^{\pi i} - 1 = 0$$</div>

这不起作用,我对 MathJax 甚至 JS 的了解不够,无法知道我做错了什么。 有任何想法吗?

您原来的方法不起作用的原因是方程在 MathJax 执行的初始排版过程中已经排版了,并且您对MathJax.Hub.Typeset()调用不会重新排版现有数学,而只是排版自上次排版调用以来的数学。 所以数学保持原样。

相反,您可以使用MathJax.Hub.Rerender(["leqn"])来使用新的displayAlign设置重新渲染数学。

话虽如此,彼得的方法更好,因为它不需要将数学排版两次。 我在下面对他的方法稍作改进。 您可以将leqn添加到被忽略的类,然后在第二次排版之前再次将其删除,而不是使用tex2jax_ignore并且必须返回并从具有该类的所有元素中删除它。 这是代码:

 MathJax = { tex2jax: {ignoreClass: "tex2jax_ignore|leqn"}, AuthorInit: function() { MathJax.Hub.Register.StartupHook("End",function () { MathJax.Hub.Queue(function () { MathJax.Hub.Config({ tex2jax: {ignoreClass: "tex2jax_ignore"}, displayAlign: "left" }); return MathJax.Hub.Typeset(); }); }); } }; (function(d, script) { script = d.createElement('script'); script.type = 'text/javascript'; script.src = 'https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML-full'; d.getElementsByTagName('head')[0].appendChild(script); }(document));
 $$e^{\\pi i} - 1 = 0$$ <span class="leqn">$$e^{\\pi i} - 1 = 0$$</span> $$e^{\\pi i} - 1 = 0$$

编辑:这是另一种方法, indentalign TeX 输入 jax 使用后置过滤器,它根据父元素的类设置底层 MathML 的indentalign属性(您也可以使用 ID,但请记住 ID 需要是唯一的,所以你必须为每个方程使用不同的 ID,这就是类更好的原因)。

 MathJax = { AuthorInit: function() { MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () { MathJax.InputJax.TeX.postfilterHooks.Add(function (data) { if (data.script.parentNode.className === "leqn") data.math.root.indentalign = "left"; }); }); } }; (function(d, script) { script = d.createElement('script'); script.type = 'text/javascript'; script.src = 'https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML-full'; d.getElementsByTagName('head')[0].appendChild(script); }(document));
 $$e^{\\pi i} - 1 = 0$$ <span class="leqn">$$e^{\\pi i} - 1 = 0$$</span> $$e^{\\pi i} - 1 = 0$$

也可以向 TeX 输入 jax 添加一个宏,允许您指定indentalign属性,但这需要做更多的工作。

没有使用 TeX 输入执行此操作的优雅方法。 该方法将因用例而异。 在这里,您似乎可以将 HTML 包裹在您想要向左对齐的方程周围。 为此,您通常走在正确的轨道上。 这是需要修复的内容:

  • 使用正确的方式连接到 MathJax 的内部
  • 通过添加class="tex2jax_ignore"让 MathJax 在第一轮排版时忽略相关方程
  • 删除该类,更改配置,然后让 MathJax 排版其余部分

下面是一种方法。

  • 您可以配置其他类名,请参阅文档
  • 由于 SO 对片段中外部资源的限制(不允许查询字符串,所以我“手动”注入它),这有点复杂——在您的页面中,只需使用window.MathJax部分并在加载MathJax.js之前加载它MathJax.js

 window.MathJax = { AuthorInit: function() { MathJax.Hub.Register.StartupHook("Begin", function() { MathJax.Hub.Queue(function() { var elements = document.getElementsByClassName('tex2jax_ignore'); for (var i = 0; i < elements.length; i++) { elements[i].classList.remove('tex2jax_ignore'); } MathJax.Hub.Config({ displayAlign: "left" }); MathJax.Hub.Queue(["Typeset", MathJax.Hub]); }); }); } }; (function(d, script) { script = d.createElement('script'); script.type = 'text/javascript'; script.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS_HTML-full'; d.getElementsByTagName('head')[0].appendChild(script); }(document));
 $$e^{\\pi i} - 1 = 0$$ <span class="tex2jax_ignore">$$e^{\\pi i} - 1 = 0$$</span> $$e^{\\pi i} - 1 = 0$$

覆盖 css 样式可能会起作用:

<style>
    mjx-container {text-align: left !important;}
</style>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM