はじめに
仕事や研究上,数式やグラフの入った文書を書くことの多い人向け。VSCodeエディタでMarkdown-review-enhanced
を使うと、文書・数式の記述とグラフ描画まで、1つのMarkdownファイル内で全て完結する。
自分用の計算メモはもちろん、ちょっとしたレポートや技術資料ならこれで十分。
2023.5追記:
当初使用していたAtomエディタが2022年で開発中止になったため、VSCodeを用いる方法に変更。
それなりのコードで数値計算をして、インタラクティブにプロットしたいならJupyter notebookでコーディングしてmatplotlib、あるいはHydrogenを使うのがよいと思う。
さくさくMarkdown文書を書きながら、ちょっとしたプロットをしたい場合にはMarkdown+gnuplotがオススメ。
環境
MacOS 10.15 Catalina + VSCode 1.77.3 (Universal) で動作確認。
Gnuplotのインストール
以下を参考に、Homebrewを使ってinstallしておく。
Mac OS (Catalina) にHomebrewでgnuplot5をインストール
gnuplotではなくMatplotlibでグラフを書きたい場合はpython環境をinstallしておく。
関数プロットはMatplotlibよりgnuplotの方が便利な気がする。
Visual Studio Code (VSCode)エディタのセットアップ(~5分)
Atomは2022年で開発中止になったので、VSCodeをつかいます。
VSCodeのインストール
https://code.visualstudio.com/download から最新版のVSCodeをインストールする。
markdown-preview-enhancedを入れる。
VSCodeを起動し、メニューのView>Extensions (または左バーのExtensionsアイコン)から,markdown-preview-enhancedを検索してInstallする。
Packageの設定
メニューのCode>Preference>Settings (または左バーの設定アイコン)タブを開き,markdown preview enhancedの設定項目からEnable Script Executionを有効にする。これによりスクリプトの実行が可能になる。
以上で設定は完了。
書き方
Markdown文書の書き方については、Markdown記法 サンプル集などを参考に。
Atomエディタのウィンドウ右下の文書タイプがPlain textになっていたら、これをGitHub Markdownにしておこう。WindowメニューからMarkdown Preview Enhanced > Toggle preview するとウィンドウ右側にリアルタイムのプレビュー画面が表示される。
数式を書くには
$\alpha_a + \beta^{2x} = \frac{\sqrt{2}}{t}$
のようにtex記法を使えば、
$\alpha_a + \beta^{2x} = \frac{\sqrt{2}}{t}$
のように出力される。
グラフはgnuplotの場合、
~~~gnuplot {cmd=true output="html"}
set terminal svg
plot sin(x)
~~~
のようにスクリプトを入力するとグラフが出力される。編集中にControl + Shift + Enter
するとスクリプトが実行されてグラフが更新される。プレビューにスクリプトを出したくない(出力グラフのみ表示)ときは、オプションにhide=true
を追加する。
matplotlibを使う場合には
```python {cmd=true matplotlib=true}
import matplotlib.pyplot as plt
plt.plot([1,2,3, 4])
plt.show() # show figure
```
のように書く。
あとはPDFなりhtmlなりで書き出してやればよい。例えばこんな感じのが、たった数分で書けてしまう。後から修正も非常に簡単。
↓↓↓↓↓↓↓↓↓↓
まとめ
文書、数式、グラフがMarkdownファイル内で完結するので、ちょっとした資料やレポート作成に便利。後になってプロットを再利用したいときに、グラフの元ファイルが行方不明ということにもならない。A4用紙へのプリントアウトを想定する場合は、少しCSSを調整した方が見栄えがよいと思う。
matplotlibでlatex表記を使うとレイアウトが崩れることがあった。原因は調査中。
latexエラーの回避や、印刷向けCSSなどの情報があればぜひコメントください。