この前RIMSで話したときの報告をSATySFiで書いている.stdjaをもとにちょっと改変したクラスファイル(?)を利用.フォントサイズはもう少し大きい方がよいかな.
必要な部分しか手を入れていないので,かなりもとのままだけど,タイトルをシンプルにして,基本版面改変して,定理環境を入れたくらいかな.LaTeXと違って,何を書くべきかがThe SATySFi bookに書いてあったのであまり苦労はしていない.凝ったことをしようとすると大変そうだけど.参考文献だけちょっと困った.やっぱりBibTeXを使いたいので,昔作って放置してあるLuaなBibTeXに手を入れて,連携させるようにしてみた.\cite
を定義して相互参照を吐き出させて,それを読み込んでデータベースを吐き出す感じ.こんな感じのファイルを作るようにした.
let bibliography-data = [
(`arXiv:1901.02336`,`Abe19`,{N. Abe, \emph{On Soergel bimodules}, arXiv:1901.02336. });
(`MR3555156`,`EW16`,{B. Elias and G. Williamson, \emph{Soergel calculus}, Represent. Theory \textbf{20} (2016), 295–374. });
(`MR2329762`,`Soe07`,{W. Soergel, \emph{Kazhdan-Lusztig-Polynome und unzerlegbare Bimoduln über Polynomringen}, J. Inst. Math. Jussieu \textbf{6} (2007), no. 3, 501–525. });
]
これを受けて文献一覧を吐き出すように+bibliography
を定義.具体的な\cite
と+bibliography
の定義はこんな感じ.
let-block ctx +bibliography dbs =
let a = dbs |> List.mapi (fun n x -> register-cross-reference (`bibliography_database_` ^ arabic(n)) x) in
let b = bibliography-data |> List.map (fun (key,label,i) -> register-cross-reference (`cite_key:` ^ key) label) in
let get-length inb = match get-natural-metrics inb with (l,a,b) -> l in
let length-list = bibliography-data |>
List.map (fun (key,label,item) -> get-length (read-inline ctx (embed-string(`[` ^ label ^ `]`))))
in
let max a b = if a >' b then a else b in
let label-length = (List.fold-left max 0pt length-list) +' 10pt in
let output lst ctx =
let get-block (key,label,item) =
let label-box = read-inline ctx (embed-string(`[` ^ label ^ `]`)) in
let length = get-length label-box in
line-break true true ctx (
inline-skip (0pt -' label-length) ++ label-box ++ inline-skip (label-length -' length) ++
read-inline ctx item ++ inline-fil
)
in
let a = lst |> List.map get-block in
List.fold-left (+++) block-nil a
in
let ctxheading =
ctx |> set-font HanIdeographic font-cjk-gothic
|> set-font Kana font-cjk-gothic
|> set-font Latin font-latin-sans
|> set-font-size 16pt
in
let pads = (label-length, 0pt, 0pt, 0pt) in
let decos =
let deco _ _ _ _ = [] in
(deco, deco, deco, deco)
in
block-skip 5pt +++
(line-break true true ctxheading ((read-inline ctxheading {参考文献}) ++ inline-fil)) +++
block-skip 0pt +++
block-frame-breakable ctx pads decos (output bibliography-data)
let-inline \cite key =
let opt = get-cross-reference (`cite_key:` ^ key) in
let () = register-cross-reference (`cite_keys_` ^ arabic(!cite-keys-counter)) key in
let () = cite-keys-counter <- !cite-keys-counter + 1 in
match opt with
| None -> {[???]}
| Some(s) -> embed-string(`[` ^ s ^ `]`)
使い方は\cite(`key`);
で引用して,+bibliography [`db1`;`db2`];
で文献出力.本当は文献自身の読み込みをSATySFi側ですればよいのかもしれないけどなー..bibにあるLaTeXの命令は引っかかることも多いので,適当に変換している.\'{e}
をé
にしたりとか.
0 件のコメント:
コメントを投稿
コメントの追加にはサードパーティーCookieの許可が必要です