如何左对齐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属性,但是这将是一个多一点的工作。

+0

只是一个小记录,他正在使用一个id为leqn –

+0

是的,但要使用我们的任何一种方法,他必须使用一个类。我应该指出这一点,谢谢。 –

+0

不用担心。但是完全不公平的,你的回答如何排在我的前面;-) –