Weave.jl とは & この記事を通してできること
Weave.jl は,
- Markdown で記述した Juliaコードを実行してくれる.
- 書いたコード,出力された結果は出力先(HTML , pdf)に出力してくれる.
という特徴があるパッケージです.MarkdownとJuliaの融合ですね!(語彙力)
大学のレポート,ゼミの資料や自分の考えをまとめる...など用途が浮かびますね!
Weave.jl を書くにあたって,
は書ける(書き方を知ってる & 書き方を調べられる)という前提で進めます.
環境
私は VSCode で編集しています.
VSCode での Julia環境構築については,この記事 などを参考にしてください.
VSCode の拡張機能は
- Julia
- Markdown Julia
を入れています.
mac ↓
macOS Catalina
julia ↓
julia> versioninfo()
Julia Version 1.4.2
Commit 44fa15b150* (2020-05-23 18:35 UTC)
Platform Info:
OS: macOS (x86_64-apple-darwin18.7.0)
CPU: Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-8.0.1 (ORCJIT, skylake)
Environment:
JULIA_EDITOR = "/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code"
JULIA_NUM_THREADS =
流れ
1. jmd ファイル
お使いのブラウザで .jmd
拡張子のファイルを用意します.(jmdって多分,julia+markdownでしょうな...)
用意した .jmd
ファイルに以下のように記述します.
コードが書いてある部分を見ると,sin(x) のグラフに cos(x) のグラフを重ね合わせるコードですね.このように,3つのグレイヴアクセント(`)に囲まれた箇所にコードを書いていきます.出力の時は,この部分に書かれたコードが実行されます.
これを出力していきましょう.
2. 実行用の .jl ファイル
続いて,実行用の .jl
ファイルを準備します.私は .jmd
と同じディレクトリにおきましたが,後で相対パスを入れるので問題はないです.用意した .jl
ファイルには目的に応じて次のようなコードを書き込みます.
jmd → HTML をしたい人
using Weave
#相対パスを入力
filename = normpath("demo.jmd")
weave(filename , out_path = :pwd , doctype = "md2html")
jmd → pdf をしたい人
using Weave
#相対パスを入力
filename = normpath("demo.jmd")
# 英語のみでいいとき
weave(filename , out_path = :pwd , doctype = "md2pdf")
# 日本語を出力したいとき
weave(filename , out_path = :pwd , doctype = "md2pdf" , template="julia_tex.tpl")
ここでpdf変換のコードに出てきたjulia_tex.tpl
について,これは日本語対応のためのファイルです..jl
ファイルと同じディレクトリに置いておきましょう.中身は以下のようなものです.(黒木さんが書かれたコードです.こちら)
%%
%% Taken from
%% https://github.com/JunoLab/Weave.jl/blob/master/templates/julia_tex.tpl
%%
%% I've applied GenKuroki-san's patch
%% https://gist.github.com/genkuroki/479a1fec113035f05c661675eee8b830
%%
% \documentclass[12pt,a4paper]{article}
\documentclass[12pt,a4paper,xelatex,ja=standard]{bxjsarticle}
% \usepackage[a4paper,text={16.5cm,25.2cm},centering]{geometry}
\geometry{top=1cm, bottom=1cm, left=2cm, right=2cm}
\usepackage{lmodern}
\usepackage{amssymb,amsmath}
\usepackage{bm}
\usepackage{graphicx}
\usepackage{microtype}
\usepackage{hyperref}
\setlength{\parindent}{0pt}
\setlength{\parskip}{1.2ex}
\hypersetup
{ pdfauthor = { {{{:author}}} },
pdftitle={ {{{:title}}} },
colorlinks=TRUE,
linkcolor=black,
citecolor=blue,
urlcolor=blue
}
{{#:title}}
\title{ {{{ :title }}} }
{{/:title}}
{{#:author}}
\author{ {{{ :author }}} }
{{/:author}}
{{#:date}}
\date{ {{{ :date }}} }
{{/:date}}
{{ :highlight }}
\begin{document}
{{#:title}}\maketitle{{/:title}}
\tableofcontents
{{{ :body }}}
\end{document}
3. 実行
それでは,ここまで記述ができたら実行していきましょう.VSCodeでは,shift + Enter
で Julia REPLが動き出します.実行が成功すると,HTMLに変換した人はHTMLファイル,pdfに変換した人はpdfファイルがディレクトリ内に生成されています.pdf変換した後はこんな感じ↓(ついでに実行したHTMLファイルもいます)
どうでしょう,すごいですよね!!(鼻息)
しっかり実行された状態でpdfに変換されてくれましたね.HTMLに変換した人も,ブラウザで開いてもらうとしっかり表示されます.後これGitHubにあげて公開できますね,強い.
4. HTMLの日本語対応問題
記事の最後に,まだ触れていなかった「HTMLの日本語対応化」について書きます.これはもうHTMLファイルを直で編集するのが早い.エディタでHTMLファイルを開いて,2行目あたりにある
<HTML lang = "en">
を
<HTML lang = "ja">
に書き換えておしまいです.簡単簡単.
最後に
ここまで読んでくださりありがとうございました.ぜひ試してみてください.
Weave.jlを使っていろんなことができそうですね,私も想像が働きます.
ここまでたどり着くために参考にしたものは記事内リンクで埋め込ませていただきました.感謝します.
よりスマートに書いている記事はこちらです.