Typst:ゆきだるま☃のマフラーに色を付ける
「原ノ味明朝」フォントがTypstで使用可能である必要がある。
全項目インポートの形式を想定している。
#import "@local/scmuffler:0.3.0": *
-
scmuffler(«色»)
(content): マフラーの部分を指定した色に変えて「原ノ味明朝」の“☃”(U+2603)を出力する。引数:
«色»
(color): マフラーの色。
Typst:ゆきだるま☃のマフラーに色を付ける
「原ノ味明朝」フォントがTypstで使用可能である必要がある。
全項目インポートの形式を想定している。
#import "@local/scmuffler:0.3.0": *
scmuffler(«色»)
(content): マフラーの部分を指定した色に変えて「原ノ味明朝」の“☃”(U+2603)を出力する。
引数:
«色»
(color): マフラーの色。#import "@local/scmuffler:0.2.0": * | |
#set page(paper: "a5") | |
#set text( | |
lang: "ja", font: "Harano Aji Mincho", | |
) | |
私は#scmuffler(olive)よりも#scmuffler(red)の方が好きです。 | |
#let turbo = gradient.linear(..color.map.turbo) | |
#for k in range(21) { | |
scmuffler(turbo.sample(k / 20.0 * 100%).darken(25%)) | |
} |
#let scmuffler(color) = { | |
let p = ( | |
((769,371),(-5,-7),(5,8)), | |
((771,398),(3,-11),(-4,16)), | |
((751,445),(7,-12),(-3,6)), | |
((738,451),(5,2),(-21,-8)), | |
((689,406),(18,13),(-36,-26)), | |
((522,355),(76,0),(-90,0)), | |
((311,409),(52,-35),(-20,14)), | |
((255,453),(25,-4),(-7,1)), | |
((240,440),(4,8),(-6,-12)), | |
((222,396),(5,17),(-5,-17)), | |
((232,365),(-10,9),(6,-6)), | |
((251,348),(-7,5),(65,-52)), | |
((527,271),(-112,-3),(25,0)), | |
((597,280),(-14,-2),(14,2)), | |
((622,270),(-7,16),(7,-15)), | |
((643,206),(-5,20),(5,-19)), | |
((672,189),(-14,-5),(25,10)), | |
((748,229),(-16,-12),(11,9)), | |
((757,260),(5,-16),(-7,24)), | |
((734,318),(5,-14),(-4,10)), | |
((737,337),(-5,-4),(3,3)), | |
((752,352),(-6,-7),(6,6)), | |
).map((c) => { | |
c.map(((x, y)) => (x*.001em, y*-.001em)) | |
}) | |
let (f, s) = (color, color + .004em) | |
let v013 = "B" not in str(numbering("\u{3B1}A", 2, 1)) | |
let gr = if v013 { // >= v0.13 | |
let d(ax,ay,_,_,dx,dy,bx,by,ex,ey,..) = { | |
curve.cubic((ax + dx, ay + dy), (bx + ex, by + ey), (bx, by)) | |
} | |
let t = p + (p.at(0),) | |
t = ( | |
curve.move(t.at(0).at(0)), | |
..range(p.len()).map((i) => { | |
t.slice(i, i + 2) | |
}).map(e => d(..e.flatten())), | |
curve.close(), | |
) | |
curve(fill: f, stroke: s, ..t) | |
} else { // < v0.13 | |
eval("path")(fill: f, stroke: s, closed: true, ..p) | |
} | |
box(align(left, { | |
text(font: "Harano Aji Mincho", "\u{2603}") | |
h(-1em) | |
box(width: 1em, gr) | |
})) | |
} |
[package] | |
name = "scmuffler" | |
version = "0.3.0" | |
entrypoint = "scmuffler.typ" | |
compiler = "0.6.0" |