2015-05-06 41 views
1

因此,默認情況下,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不瞭解我做錯了什麼。有任何想法嗎?

回答

1

有沒有優雅的方式來做到這一點使用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$$

2

之所以你原來的做法不工作是方程式已經被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

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

相關問題