ようこそ

このページは

Franklin.jl を使った Web page のサンプルです.

Web 生成に使われたコードは全て こちら にて管理さてれています.

導入

 \ (Franklin.jl について)
Franklin.jl は Julia で記述された 静的サイトの生成を行うパッケージである.コーディング,数学などの技術ブログの作成をサポートする. 公式ドキュメントは https://franklinjl.org/ を参照せよ. なお,公式ドキュメントも Franklin.jl で作成されており, https://github.com/tlienart/franklindocs にてソースが公開されている.
 \ (特徴)
Franklin.jl では次の機能を持っている

  • マークダウンで記述することができる.

  • 数式のレンダリングは KaTeX を用いている. $ マークで挟むことで数式を表現できる.

  • 記述した Julia のコードを記述し, 対応する出力を自動で表示することができる.

  • グラフ描画結果を表示することができ, 数学の概念を可視化することができる.

  • HTML, CSS, JavaScript の知識があれば,ページの表示を変更することができる.

$ マークで挟むことで数式を表現できる.

  • 記述した Julia のコードを記述し, 対応する出力を自動で表示することができる.

  • グラフ描画結果を表示することができ, 数学の概念を可視化することができる.

  • HTML, CSS, JavaScript の知識があれば,ページの表示を変更することができる.

}

 \ (事後分布の定義)
真の分布 q(x)q(x) に従う nn 個の確率変数の組 Xn=(X1,,Xn)X^n = (X_1,\dots,X_n), パラメータ wWRdw \in W \subset \mathbb R^d を持つ確率モデル p(xw)p(x|w), パラメータの事前分布 φ(w)\varphi(w) から定まる逆温度 β\beta 付きの ww の事後分布 p(wXn)p(w|X^n) を次で定義する: p(wXn)=i=1np(Xiw)βφ(w)Zn(β). p(w|X^n) = \frac{\displaystyle\prod_{i=1}^n p(X_i|w)^\beta \varphi(w)}{Z_n(\beta)}.

ここで Zn(β)Z_n(\beta)p(wXn)p(w|X^n) の事後分布の正規化定数であり具体的には下記のように定義する:

Zn(β)=Wi=1np(Xiw)βφ(w)dw. Z_n(\beta) = \int_W \prod_{i=1}^n p(X_i|w)^\beta \varphi(w) dw .
 \
次のようにJuliaのコードを記述することができる:

x = 3.141592
y = sin(x)
@show y
このとき, y の値は評価され次の出力を得ることができる:
y = 6.535897930762419e-7

x = 3.141592
y = sin(x)
@show y
このとき, y の値は評価され次の出力を得ることができる: \output{simplecode} }

 \ 通し番号について
通し番号は Franklin ではデフォルトでサポートしていない. CSS でカウンタを定義しておく必要がある.

newcommand によるタイピングの簡略化

newcommand によるタイピングの簡略化}

config.md は文章を記述する上での設定を記述するために用いる. LaTeX\LaTeX\newcommand と同様に数式を記述するコマンドを簡略化できる.

 \ (R\mathbb{R} の例)
config.md に次を追加しておく:
\newcommand{\R}{\mathbb R}
これで \RR\mathbb R を表記できる.
config.md に次を追加しておく:
\newcommand{\R}{\mathbb R}
これで \R で $\R$ を表記できる. }

グラフの描画

PyPlot, gr,pyplot をバックエンドとする Plots.jl, PlotlyJS.jl を用いた場合で確認している.

using PyPlot
figure(figsize=(8, 6))
x = range(-2, 2, length=500)
for α in 1:5
    plot(x, sinc.(α .* x))
end
using Plots
Plots.plot([1,2,3])
pyplot()
Plots.plot(sin)
PlotlyJS による例はサイドメニューのページを参照

Python のコードの実行結果の表示

config.md のコマンドを定義しておく.

\newcommand{\pycode}[2]{
```julia:!#1
#hideall
using PyCall
lines = replace("""!#2""", r"(^|\n)([^\n]+)\n?$" => s"\1res = \2")
py"""
$$lines
"""
println(py"res")
```
```python
#2
```
\codeoutput{!#1}
}

そして該当する Markdown ファイルに例えば下記のように \pycode コマンドと組み合わせたものを記述しておく.

 \ (ソースコードの表示)
Pythonのコードの実行結果を貼り付けることができる.
\pycode{py1}{
import numpy as np
np.random.seed(2)
x = np.random.randn(5)
r = np.linalg.norm(x) / len(x)
np.round(r, 2)
}

と記述することで下記のようになる:

import numpy as np
np.random.seed(2)
x = np.random.randn(5)
r = np.linalg.norm(x) / len(x)
np.round(r, 2)
0.65

C のコードの実行結果を表示

config.md に次を記述しておく

\newcommand{\Ccode}[2]{
```julia:!#1
#hideall
using Markdown

mdC_code = Markdown.htmlesc(raw"""!#2""")
mdfile=joinpath(dirname(@OUTPUT), "!#1.md")
open(mdfile,"w") do f
    print(f, mdC_code)
end

C_code=raw"""
!#2
"""

exefile = tempname()

#=
This trick is taken from

https://discourse.julialang.org/t/how-to-make-a-c-function-compiled-by-myself-available-to-ccall/7972/26
=#

open(`gcc -Wall -O2 -march=native -xc -o $exefile -`, "w") do f
    print(f, C_code)
end

run(`$exefile`)
```

\input{c}{!#1.md}

\codeoutput{!#1}

}
 \ (ソースコードの表示)
つぎのように C のコードを貼り付けることができる.

次のコードをタイプすることで望むべき結果が得られる.


```c
\Ccode{how2embeddC}{
#include 
int main(){
    printf("Hello Pika\n");
    return 0;
}
}
```

```c
\Ccode{how2embeddC}{
#include 
int main(){
    printf("Hello Pika\n");
    return 0;
}
}
```
}

#include <stdio.h>
int main(){
    printf("Hello Pikachu\n");
    return 0;
}
 \ (Cのコードのハイライト)
Getting hightlight.js から ハイライトしたい言語を選択した後 highlight.pack.js_lib/hightlight にコピーする. もともと _lib/highlight/highlight.pack.js が配置されているが、Julia,Python,R、Markdownのみをハイライトするようになっている。