Typstの行取り改訂版.段間の取り方がわからない…….
#let gyodori(
lines: 2,
before_space: 0,
after_space: 0,
x
) = {
context{
// 和文文字の縦方向長さ
let letter_height = measure(box[阿]).height
// 段落間の長さ(block(spacing:**)のやつ)を計測
let block_spacing = measure(block[#par[阿];#par[阿]]).height - 2 * letter_height
// baselineskip
let baselineskip = letter_height + par.leading
let be_sp = {
if type(before_space) == int { before_space * baselineskip }
else { before_space }
}
let aft_sp = {
if type(after_space) == int { after_space * baselineskip }
else { after_space }
}
// 本文のテキスト長さの計算
let textlen = {
let totaltextlen = {
page.width - {
if page.margin == auto {
(5/21) * {
if page.width < page.height { page.width}
else { page.height }
}
} else if(type(page.margin)) == dictionary {
let margin_keys = page.margin.keys()
let left_margin = {
if(margin_keys.contains("left")) {
page.margin.left
} else if(margin_keys.contains("inside")){
page.margin.inside
} else { 0pt }
}
let right_margin = {
if(margin_keys.contains("right")){
page.margin.right
} else if(margin_keys.contains("outside")){
page.margin.outside
} else { 0pt }
}
right_margin + left_margin
} else { 2 * page.margin }
}
}
// 段間の取得方法がわからない.2*は根拠なしというか多分間違っている
(totaltextlen - (page.columns - 1) * 2 * columns.gutter)/page.columns
}
// とりあえずブロックに入れる
let b = block(width: textlen, x)
// 長さ計算
let total_len = baselineskip * (lines - 1) + letter_height
let ue = (total_len - measure(b).height)/2 + be_sp
let shita = (total_len - measure(b).height)/2 + aft_sp
block[
#v(ue)
#b
#v(shita)
]
}
}
0 件のコメント:
コメントを投稿
コメントの追加にはサードパーティーCookieの許可が必要です