如何左对齐MathJax中的某些方程式
因此,默认情况下,MathJax方程式是居中的,但我想左对齐某些方程式。我知道如何使所有方程与MathJax.Hub.Config左对齐,但这不是我想要的。如何左对齐MathJax中的某些方程式
我试着在网上找到其他的代码,如下列:
<script type="text/javascript">
MathJax.Hub.Queue(function() {
MathJax.Hub.Config({displayAlign:"left"});
MathJax.Hub.Typeset(["leqn"]);
});
</script>
然后包裹式围绕一个div leqn的ID,像这样:
<div id="leqn">$$e^{\pi i} - 1 = 0$$</div>
这是行不通的,我对MathJax甚至JS不了解我做错了什么。有任何想法吗?
有没有优雅的方式来做到这一点使用TeX输入。这种方法会随用例而变化。在这里,你似乎能够围绕那些你想要排列在左边的公式来包装HTML。为此,你通常是在正确的轨道上。这里是需要固定:
- 使用挂接到MathJax的内部的正确方法
- 有MathJax加入
class="tex2jax_ignore"
- 删除类忽略在第一轮排版的相关公式,更改配置,并有MathJax排版其余
下面是这样做的一种方法。
- 您可以配置其他类名称see the docs。
- 由于SO对片段中外部资源的限制(不允许查询字符串,因此我正在将其手动注入) - 在您的页面中,只需使用
window.MathJax
部分并在加载之前加载它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$$
之所以你原来的做法不工作是方程式已经被MathJax执行初始排版通期间排版,和你的MathJax.Hub.Typeset()
打不重新排版现有的数学,但仅排版新的自上次排版调用后的数学。所以数学保持原样。
取而代之,您可以使用MathJax.Hub.Rerender(["leqn"])
将数学重新呈现为新的displayAlign
设置。
这就是说,彼得的方法更好,因为它不需要数学排版两次。我在下面提供了一些细节。而不是使用tex2jax_ignore
并且必须返回并从具有该类的所有元素中删除该元素,可以将leqn
添加到被忽略的类中,然后在第二次排版之前再次将其删除。下面是代码:
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$$
EDIT:下面是一个使用一个后置滤波器对,设置底层MathML的所述indentalign
属性基于所述类TeX的输入JAX另一种方法(您也可以使用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
属性,但是这将是一个多一点的工作。
只是一个小记录,他正在使用一个id为leqn –
是的,但要使用我们的任何一种方法,他必须使用一个类。我应该指出这一点,谢谢。 –
不用担心。但是完全不公平的,你的回答如何排在我的前面;-) –