質問
IPython(またはJupyter)ノートブックでMathJaxの「プリアンブル」をセットアップして、他の人が私のドキュメントを読みやすいように繰り返し使用するにはどうすればよいですか(このサイトについて) で、LaTeX/PDF 生成に使用できますか?
背景
私は、後で LaTeX ( を使用) 経由で PDF に変換するドキュメントに IPython (現在は Jupyter) ノートブックを使用したいと考えていますipython nbconvert
。問題は、ほぼすべてのドキュメントで使用する一連のマクロ定義をどのように組み込むかです。次のようになります。
\newcommand{\vect}[1]{\vec{#1}}
\newcommand{\abs}[1]{\lvert#1\rvert}
\DeclareMathOperator{\erf}{erf}
ノートブックに関する限り、不十分な解決策の 1 つは、これらをノートブックの上部にあるマークダウン セルに単純に含め、2 つのドル記号の間に埋め込んで$$
数式として解釈されるようにすることです。これを導入テキストの後に行うと、出力には影響しません。
問題は、LaTeX に変換するとき (PDF エクスポート用)、これらのコマンドが LaTeX ファイルの数式環境に埋め込まれることです。これにはいくつかの問題があります。
- のようなコマンドは、
\DeclareMathOperator
LaTeX ドキュメントのプリアンブルに記述する必要があります。 - コマンド定義は方程式にローカルであり、ドキュメントの後半では使用できません。(これは または を使用することで克服できます
\gdef
が\global\def
、その場合、MathJax にこれらのコマンドを認識させるには、LaTeX から何らかの方法で隠されている のようなものを使用する必要があります\let\gdef{\def}
。これを機能させる方法はどれも、醜いハックに相当します。) - コマンドがすでに LaTeX で定義されていて、それが必要になる場合もあります
\renewcommand
(MathJax ではサポートされていませんが、これも etc で提供できます。MathJax\let\renewcommand\newcommand
は最終的な LaTeX ファイルにどのようなプリアンブルが使用されるかを把握できないため、これは合理的であると思われます)。
おそらく解決策はMathJaxにマクロのセットを提供する次のようなコードを追加します (\DeclareMathOperator
ここに相当するものが何かはわかりませんが...)
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
TeX: {
Macros: {
vect: ["{\\vec #1}",1],
abs: ["{\\lvert #1 \\rvert}",1]
}
}
});
</script>
ファイルに出力しcustom.js
、PDF に変換するときに LaTeX パッケージを含めるようにします。このアプローチの問題は次のとおりです。custom.js
ファイルと LaTeX スタイル ファイルを他の人 (共同作業者や閲覧者) が使用できるように配布するにはどうすればよいですか?
共同作業者がグローバル構成にカスタム拡張機能をインストールしなくても、私のドキュメントを編集したり読んだりできるようにしたい。具体的には、
python setup.py configure
コードをダウンロード/チェックアウトしたら、次のようなコマンドを実行するように要求しても構わない。地元ノートブックを含むすべてのディレクトリにファイルを追加するなどのプロジェクトの変更は可能ですが、拡張機能をインストールしたり、個人のグローバルファイルipython_notebook_config.py
を変更したりするのは好ましくありません。custom.js
ここでの私のつまずきは、ローカル ファイルからノートブック チェーンにコントリビュートを追加する方法がわからず
custom.js
、これがセキュリティ ポリシーに違反する可能性があると疑っていることです。最善の解決策は、協力者側で何らかのアクションを必要としないことです。
ノートブックをこのサイトについて、そして人々がノートブックをダウンロードしてPDFを作成できるようにします。(私は考える
custom.js
これにより、ハックや分散ファイルを使用する可能性は排除されます*.sty
が、確信はありません。各ノートブックの先頭に大量の定型コードを挿入せずに、新しいノートブックを開始して書き込みを開始できる方が望ましいのですが、ノートブック拡張機能または のフックを使用してこのプロセスを自動化する簡単な方法があれば、それも可能です
python_notebook_config.py
。
参考文献
以下の投稿では、これらの問題のいくつかを取り上げていますが、ほとんどの面で不十分です。
- usepackage と ipython ノートブックでのマクロの作成
- IPython における物理ブラケット記号(具体的にはこの答えメモ関連の難しさ)
- ipythonノートブックでMathJaxを使用してmhchem拡張機能を有効にするにはどうすればいいですか
(潜在的な)問題についての議論パンドックIPython ノートブックからの LaTeX ファイルの生成:
- pandocとmathjaxで問題が発生する
- Markdown から Pandoc に変換するときの \newcommand 環境
- Pandoc IPythonノートブックはMathjaxの一部を失う
ノートブックにおける数学の一般的な議論:
ベストアンサー1
いくつかの問題は解決できると思いますが、すべては解決できないと思います。
まず、障害です。私は(間違っているかもしれませんが)nbviewerはノートブック自体以外は何も見ないと思っています。たとえば、ipython_notebook_config.py
ノートブックと一緒に保存. というわけで、その考え方は不可能です。つまり、覚悟を決めてすべてのノートブックに定型文を追加する必要があると思います。しかし、少なくとも定型文を最小限に抑えることはできるかもしれません。その意味では:
github などで (おそらくより説明的な名前で) スクリプトを維持しcustom.js
、すべてのノートブックに 1 行の定型文を追加して、URL からそのスクリプトを読み込むことができます。定型文は必要ですが、はるかに短くなります。
JavaScriptを含むコードセルを実行すると、ノートブックに保存されます。つまり、コードセルが実行される前にブラウザが次に読み込んだときに自動的に実行されます。したがって、nbviewerがJavaScriptの実行を阻止しない限り、すべき問題なく動作します。これにより、共同作業者が追加のファイルをダウンロードする必要がなくなるため、共同作業者にとっても便利になります。
独自のスタイル ファイルについては、ipython と latex をインストールし、ノートブックをダウンロードして、nbconvert
その上で実行できるほど高度な知識を持つ人なら、ファイルもダウンロードできるほど高度な知識を持っていると思います.sty
。いずれにしても、それを実行する必要性を回避する方法はないと思います...