SATySFi用のjlreq作りかけだけど,レコードを引数にとると全部指定しないとならなくなって面倒になる.例えば紙サイズを変更したいだけで
document(|
title = {たいとる};
author = {ああああ};
date = {};
show-title = true;
show-toc = false;
|) ?:(|
paper-size = <紙サイズ>; % 指定したいのはこれだけ!
twoside = <true/false>;
horizontal-layout = <横方向配置>;
vertical-layout = <縦方向配置>;
header-sep = <ヘッダと本文の空き>;
header-height = <ヘッダ高さ>;
font-size = <フォントサイズ>;
line-gap = <行間>;
cjk-font = <和文フォント>;
latin-font = <欧文フォント>;
|) '<
(本文)
>
と九つも余計に引数を指定しないとならない.必要ないならば省略できると嬉しいんだけどなぁ,と思ってたどり着いたのがこんなコード.
@require: stdja
let-inline ctx \test l =
let-rec aux r lst =
match lst with
| x :: xs -> aux (x r) xs
| [] -> r
in
let rec = aux (|a = `a`;b = `b`;c = `c`;d = `d`;|) l in
read-inline ctx (embed-string (`a = ` ^ rec#a ^ `, b = ` ^ rec#b ^ `, c = ` ^ rec#c ^ `, d = ` ^ rec#d))
let a s r = (|a = s; b = r#b; c = r#c; d = r#d|)
let b s r = (|a = r#a; b = s; c = r#c; d = r#d|)
let c s r = (|a = r#a; b = r#b; c = s; d = r#d|)
let d s r = (|a = r#a; b = r#b; c = r#c; d = s|)
in
document(|
title = {};
author = {};
date = {};
show-title = false;
show-toc = false;
|) '<
+p{\test [a `A`; d `X`];}
>
つまり
document(|
title = {たいとる};
author = {ああああ};
date = {};
show-title = true;
show-toc = false;
|) ?:[
paper-size A4Paper;
] '<
(本文)
>
みたいに指定することになるんだけど,うーん…….
追記:まともな構文があると教えてもらいました.
0 件のコメント:
コメントを投稿
コメントの追加にはサードパーティーCookieの許可が必要です