2016-06-19 8 views
0

MathJaxの推奨コマンドをWebページの<head>要素に貼り付けてMathJaxを読み込んで設定しました。 MathJaxは自分のウェブページの<body>にLaTexをレンダリングする素晴らしい仕事をしています。MathJaxが定義されていません

私の問題は、<body>要素の最後で実行されるjavascriptでMathJaxオブジェクトにアクセスすることです。たとえば、以下のコードはundefinedをコンソールに返します。これは私にとって紛らわしいことです。<head>要素の私のコマンドがどこにでもアクセスできるグローバル変数としてMathJaxを作成していないとしたらどうですか?ここで

は、私のコードのスクリーンショットです:ここで code screenshot

<head>要素からのコードの該当部分である:

<script type="text/x-mathjax-config"> 
    MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}}); 
</script> 
<script type="text/javascript" async 
    src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML"> 
</script> 

ここ<body>からのコードの関連セクションがあります要素:

<h1 class="header"> 
    If $ax^2+bx+c=0$, then $x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}$. 
</h1> 

<script type="text/javascript" > 
    console.log(window.MathJax); 
</script> 
+0

スクリプトに含まれている順序が間違っています。参照する前にMathJaxスクリプトをインクルードする必要があります。 –

+0

@EvanTrimboli、ありがとうございます。問題は、スクリプトの行25:27であり、スクリプトの順序は ''要素ではありません。 (私は ' '要素のスクリプトの順序が逆になることに同意しますが、私は[http://docs.mathjax.org/en/latest/start.html]からそのままコピーしています。 (MathJax.org)、彼らは正常に動作しているようです。 – Patch

+0

将来の注意:cdn.mathjax.orgの寿命が近づいています。https://www.mathjax.org/cdn-shutting-ダウン/マイグレーションのヒント。 –

答えて

2

MathJax.jsasync attributeでロードしています。したがって、スクリプトは読み込まれるまでレンダリングをブロックしませんが、代わりにページを処理し続けます。これで、MathJax.jsがフェッチされて読み込まれ、ブラウザのパーサがscriptタグをページのさらに下に移動することになります。必然的に、パーサーはMathJax.jsのロードが完了する前にログを取得して実行します。したがって、グローバルMathJaxオブジェクトはありません。

asyncを削除すると、ブラウザは最初にMathJax.jsを実行してから、残りのページを解析するため、console.logは意味のある内容を提供します。

しかし、MathJax自体は非常に非同期であり(追加のコンポーネントや設定などを読み込む)、ほとんどの場合、必要となるでしょうsynchronize your code with Matax's APIs

+0

@PeterSmith、ありがとう! – Patch

関連する問題