私はJekyllブログを持っていて、MathJaxを使って、次のようなものを入力できるようにしたいという意味で
$$\sum_{n=1}^\infty 1/n^2 = \frac{\pi^2}{6}$$
私のマークダウンファイルで、MathJaxで生成された正しいLaTeX式を持ちます。これは math.stackexchange で行われる方法と同様です。
これを行う最も簡単な方法は何ですか?現在、ディレクトリにファイル jsmath.js (GitHub Gist)があり、mathjs
という名前の単純なファイルを_includes
行のあるディレクトリ
<script src="path/to/jsmath.js></script>
それを各投稿に含める
{% include mathjs %}
しかし、これは機能していないようです-実行するとjekyll --server
ページは生成されますが、コンテンツは表示されません。
私はこれについて正しい方法で行っていますか? JekyllでMathJaxを使用するより良い方法はありますか?
確かに、Jekyllでmathjaxを使用できます。これを機能させるには、
<div>
要素に表示数学を入れ、<span>
要素にインライン数学を入れて、ほとんどのマークダウンインタープリターが放っておくことです。Javascript行はhtmlソースで正しく表示されていますか?独自のコピーを提供するよりも、mathjax CDNを指す方が簡単かつ迅速であることがわかりました。ラインを使用してみてください
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
(これらの構成オプションにより、\begin{equation}
などのように、より多くのtex表記を使用して数学環境を開始できます)。
おそらく、jsmath.js
スクリプトに問題がある可能性があります。 CDNバージョンはより高速で、おそらくより信頼性が高くなります。 (私はすべてのページのフッターにjavascriptをロードしていますが、もちろん、必要でないときにjavascriptをロードしたくない場合は、インクルードを使用した戦略が理にかなっています。)
あなたのブログへのリンクを提供していただければ、さらにお手伝いできますか?いくつかの例を見ることができます 私のブログで (もしそれが役立つなら、githubのJekyllセットアップへのリンクもあります)。
公開プロセスを十分に制御できる場合(たとえば、自分でJekyllを実行している場合)、 簡単な解決策 は、マークダウンパーサーをTeXをサポートするものに切り替えることです。たとえば、 kramdown を使用します。
gem install kramdown
_config.yml
のmarkdown
行を変更します
markdown: kramdown
のようなものを追加します
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
_layouts/default.html
に。これで、単純に 投稿内の数学を$$
でマーク にできます。
kramdown
をマークダウンフレーバーとして使用している場合、簡単です。 Kramdownにはmathjax
の組み込みサポートがあります。
これをデフォルトのレイアウトの_</head>
_タグの前に追加します。
_<script type="text/javascript" async
src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?
config=TeX-AMS-MML_HTMLorMML"></script>
_
__config.yml
_行の後の_markdown: kramdown
_でこれをtrueに設定します。
_mathjax: true
_
できたMathjaxのリネーダリング用
\( ... \)
を使用、ブロックするには、_\[ ... \]
_を使用します。
注目すべき唯一のことは、マークダウンを使用するときにバックスラッシュをエスケープすることです。そのため、区切り文字は、インライン数学とブロック数学でそれぞれ\\( ... \\)
と_\\[ ... \\]
_になります。
これは例 MathJaxインラインレンダリング\\( 1/x^{2} \\)
であり、ブロックレンダリングは_\\[ \frac{1}{n^{2}} \\]
_です。
ブログでこれを使用しています。
しばらく前にMathJaxの設定に関するブログ記事を書きました: Latex Math Magic
本質的に、MathJaxを使用してmessingからMarkdownを停止する必要があります。
最終的にはコードブロックを使用することになりました。したがって、何かを書く前に少なくとも4つのスペースを使用するか、アキュートシンボルを使用します:`
;残念ながら、MathJaxは<code>
タグをスキップします。これは、本来すべきではないコードを変換したくないためです。
したがって、メインレイアウトファイルのどこかに、小さなJavaScriptコードを追加する必要があります。
MathJax.Hub.Config({
tex2jax: {
skipTags: ['script', 'noscript', 'style', 'textarea', 'pre']
}
});
さらに、MathJaxに非ラテックスコードブロックまたは通常のコードブロックを無視するように指示する必要があります。
MathJax.Hub.Queue(function() {
var all = MathJax.Hub.getAllJax(), i;
for(i=0; i < all.length; i += 1) {
all[i].SourceElement().parentNode.className += ' has-jax';
}
});
彼の時点で、ラテックスコードブロックはすべて、クラス名にhas-jax文字列を持っています。したがって、CSSシートにいくつかの簡単なスタイルを適用して、独自のスタイルを設定できます。
code.has-jax {font: inherit; font-size: 100%; background: inherit; border: inherit;}
最良のアプローチとは言えないかもしれませんが、過去数年間私のブログで機能し、それ以上の問題に遭遇することはありませんでした。
静的なブログジェネレーター Jekyde を試してみてください。 JekydeはJekyllに似ていますが、MarkdownファイルのLaTeXをうまく処理します。数式は$ ... $と$$ ... $$に入れるだけです。また、Jekydeには、LaTeXプレビュー付きのブラウザーにマークダウンエディターが含まれています。
オプション0
は、--incremental
を使用してもビルド時間を増加させ、実際にはオプション1
をmostインスタンスで使用する必要がありますが、これは、ネットワークに展開する場合は余分なスペースと一緒に使用する価値がありますCDNにアクセスできない可能性のあるクライアントで。
両方のオプションは、マークダウンインタープリターとしてkramdown
を使用し、プロジェクトのmathjax: true
ファイル内で_config.yml
を設定して、プライベートサーバーでテストされています。 Soham Bhattacharyya の回答とその序文のステップ2
を参照し、 Caramdir の最初の2つのコードブロックまでこれらのビットのハウツーについて。
0
をダウンロードして、解凍したソースをproject-name
にコピーしますcd ~
mkdir -p git/hub && cd git/hub
git clone --depth 1 https://github.com/mathjax/MathJax.git
MathJax/unpacked
からこのパスにファイルをコピーしますcd ~
mkdir -p git/lan/project-name/assets/JS_3rd_Party/MathJax
cp -r git/hub/MathJax/unpacked/* git/lan/project-name/assets/JS_3rd_Party/MathJax/
git
trackingに追加しますcd git/lan/project-name/
git add assets/JS_3rd_Party/MathJax
git commit -m 'Added MathJax.js unpacked source to git tracking'
tee ./_includes/MathJax.html 1>/dev/null <<EOF
{%- if jekyll.environment == 'production' and site.mathjax == true -%}
<script type="text/javascript" src="{{'/assets/javascripts/JS_3rd_Party/latest.js?config=TeX-AMS-MML_HTMLorMML' | relative_url}}"></script>
{%- elsif jekyll.environment != 'production' and site.mathjax == true -%}
<script type="text/javascript" src="{{'/assets/javascripts/JS_3rd_Party/MathJax.js?config=TeX-AMS-MML_HTMLorMML' | relative_url}}"></script>
{%- endif -%}
EOF
プライベートサーバービルドは
MathJax.js
を使用しますが、本番環境(GitHub)は上記のLiquidif
...elsif
...endif
ステートメントを使用してlatest.js
を使用します。
tee ./_posts/$(date +'%Y-%d-%m')-math-tests.markdown 1>/dev/null <<EOF
---
layout: post
title: "Math Tests"
date: $(date +'%Y-%d-%m %H:%M:%S %z')
categories: math
---
{%- include MathJax.html -%}
<span>
for $x,y,z \in \{1, 2,\dots 9\}$
</span>
<span>
$$
\sum_{i=1}^n X_n
$$
</span>
EOF
cboettig の提案seemsがトリックを完全に行うため、
<span>
sなしで試したことはありません。さらに、span
s内の余分な改行は間違いであり、レンダリングされた出力に問題がある場合はありません。
git
トラッキングに追加しますgit add _posts/$(date +'%Y-%d-')math-tests.markdown
git add _includes/MathJax.html
bundle exec jekyll build --destination /tmp/www/project-name --config _config.yml --incremental
1
だけlatest.js
をコピーして、CDN(コンテンツ配信ネットワーク)を使用しますOption 0
ステップ1.
を参照
サードパーティのJavaScriptのディレクトリパスを作成し、そこにMathJax/unpacked/latest.js
をコピーします
cd ~
mkdir -p git/lan/project-name/assets/JS_3rd_Party/MathJax
cp git/hub/MathJax/unpacked/latest.js git/lan/project-name/assets/JS_3rd_Party/MathJax/
cd git/lan/project-name
tee ./_includes/MathJax.html 1>/dev/null <<EOF
<script type="text/javascript" src="{{'/assets/javascripts/JS_3rd_Party/latest.js?config=TeX-AMS-MML_HTMLorMML' | relative_url}}"></script>
EOF
Option 0
ステップ5.
を参照
これら3つのファイルをgit
trackingに追加します
git add _includes/MathJax.html
git add _posts/$(date +'%Y-%d-')math-tests.markdown
git add assets/JS_3rd_Party/MathJax
git commit -m 'Added `MathJax.html`, `latest.js`, and a test post to git tracking'
Option 0
ステップ7.
を参照してくださいプライベートサーバーにデプロイする場合、特にGitHubがプライベートサーバーで使用する_config.yml
URLスキームをエミュレートする場合は、プロジェクトのusername.tld/project-name
ファイル内でbaseurl
を定義する必要もあります。
プライベートサーバーとGitHubの両方にデプロイする場合は、個別の設定ファイルを使用することをお勧めします。たとえば、問題--config _config.yml,_config_baseurl.yml
を作成する場合は...
# Write the special config file
tee ./_config_baseurl.yml 1>/dev/null <<EOF
baseurl: "project-name"
EOF
# Build with extra config
bundle exec jekyll build --destination /tmp/www/project-name --config _config.yml,_config_baseurl.yml --incremental
インクルードを介したアセットのロードに役立つことを願っています。