ðSATySFiã§ã¯ãªã¹ãã¹ã®ãæçŽð
ã¯ããã«
æ¬èšäºã¯SATySFi Advent Calendar 2022ã®17æ¥ç®ã®æçš¿ã§ãã
ã¡ãªãŒã¯ãªã¹ãã¹ãïŒïŒïŒð
ã¯ãªã¹ãã¹ãœã³ã°ãèŽããšãã³ã·ã§ã³ãäžãã£ãŠãè«žã
ã®ããã©ãŒãã³ã¹ãäžããæ¥ã
ã§ãã
å
æ¥ãæè¡æžå
žã§èªäœã®ã³ããŒæ¬ã®é
åžãããŸããã
ããããæç« ãšããŠåçš¿ãä»äžãã£ãã®ãç· ãåã1é±éã§ã倧æ
ãŠã§ãçµçïŒçµçïŒããšå«ã³ãªããçµçã«ãã£ã¬ã³ãžãããããªäºæ
ã§ããã
æ§ã
ãªæ¢åã®ãµãŒãã¹ãè©Šããäžã§ããã©ã·ã¥ãŒæéãå«ããŠãæãæ©ããã£ããã¢ããåºæ¥ãã®ãæå€ã«ãSATySFiã§ãããçãæéã§ããã®ã§ãåºæ¬ã®ã¹ã¿ã€ã«ã«å ããŠãã©ã³ãå€æŽã»ãã©ã³ãè²å€æŽã»ãã£ãã¿ãŒèšå®çšåºŠã®å€æŽã«ãªããŸããããæžç±ã®èŠæ ããè¯ããªããèªåã®äœåãžã®ææ
ãæ·±ãŸããŸããã
æ°è»œã«å°å
¥ã§ããã®ã§ãçãããé©åœãªæç« ãSATySfiã§å¥œã¿ã®çµçãã¡ãããšãããšæããŸã(à¹ËÏË )Ùâ§
ä»åã¯æè¬ã®æ°æã¡ã蟌ããŠããããããšSATySFiã§ãµã³ã¿ãããžã®ãæçŽçšäŸ¿ç®ã§ãäœããããªãšæããŸãã
念ã®çºã«èšã£ãŠãããšãæ¢ã«ãããã䜿ã£ãŠããçããã«ãšã£ãŠã¯ç¥ã£ãŠããå
容ã ãšæããŸãïŒ&è²ã
ãšéã§ãã¿ãŸããã
ç§ãšåãããã«åããŠæ±ã人ãž
ã€ã³ã¹ããŒã«æ¹æ³ã¯ãæ€çŽ¢ã§åºãŠãããããªè«žèšäºãèªããšåºæ¥ãŸãã
è¿ã SATySFiã¯ããŒãžã§ã³0.1.0ããªãªãŒã¹ãããããããªããšã®ããšã§ãã€ã³ã¹ããŒã«æ¹æ³ãå€ããå¯èœæ§ããããŸããã
åããŠSATySFiãç¥ã£ã人ãå®éã«çµçããéã«ã¯ãThe SATySFi Bookãšããå¶äœè ã«ããããã¥ã¡ã³ããèªãã§åãçµãã®ããå§ãã«ãŒãã§ãã
ç§ã¯èª¬ææžãã£é£ã°ããŠãšãããã觊ã£ãŠé åããããŠãããåçããŠèª¬ææžãèªã¿å§ããçš®æãªã®ã§ãããæµç³ã«The SATySFi Bookã¯èªãã æ¹ãã€ã€ãšæããŸãããïŒä»èªãã§ããŸããïŒ
ç¹ã«ãããã å®è£
ããèªåã確å®ã«ç¥ã£ãŠããèšè¿°ãçãããŠã¯ã©ã¹ãã¡ã€ã«ãäœããã人ã¯ãThe SATySfi Bookã®äŸ12.1 135ããŒãžã«ãå€å°ãªããšããŸãšãã«äœ¿ããïŒå®è³ªçã«æå°ã®ã¯ã©ã¹ãã¡ã€ã«ããåèã«ãããšè¯ã...ã®ããªãç§ã¯2åç®ããã¯ãminimum.satyhãã¡ã€ã«ãäœã£ãŠã³ããããŠãèªåã®local.satyhã§
éã«ãšãããã觊ããã人ãæ¥ãã§çµçãããªããŠã¯ãªããªã人ã¯ãå ¬åŒé圢ã®stdjabookãstdjareportããã®ãŸãŸæµçšããããé圢ãããŒã«ã«ã«ã³ããŒããŠstdjabooklocal.satyhãã¡ã€ã«ã«ããŠåå空éçã®ä¿®æ£ãå ãã@importããããšã§ãæ±ããŠãããã®ã«ä»äžããŠããã®ãäžã€ã®æã§ã¯ãããšæããŸãã
The SATySFi Bookã®2ç« ãš7ç« ããã@requireã¯ã€ã³ã¹ããŒã«çµç±ã§ã®ããã±ãŒãžèªã¿èŸŒã¿ã@importã¯åäžãã£ã¬ã¯ããªã«èšçœ®ãããããã±ãŒãžãã¡ã€ã«ã®èªã¿èŸŒã¿ãšããŠæäŸãããŠããŸãã
ïŒäœè«ã§ããã@requireã§èšå®ãããã¡ã€ã«ãSATySFiåŽãèŠã€ããããªãã£ãæãæ¢çŽ¢ãè©Šã¿ãèšçœ®ãæ³å®ããããã¹åè£ããªã¹ãã¢ããããŠãããã®ã¯æ°ãå©ããŠãããªãšæããŸãããïŒ
äœäœãã®ïŒ
ãšãããããããããªæ ãäœã£ãŠã¿ãããªãŒãšæãã®ã§ãã¯ãªã¹ãã¹ã«ãŒãã«ããŸããã
ãµã³ã¿ãããžã®ãæçŽã®äŸ¿ç®ã§ãã
ä»ã«ãè²ã
äœãäºå®ã§ããããããã«ãéã«åããªãã®ã§æ¬¡åãã£ã¬ã³ãžããŸãã
ç°å¢
iMac M1 2021, Apple M1, Ventura 13.0.1[1]
SATySFi v0.0.7[2]
Satyrographos v0.0.2.11
satysfi-ruby v0.1.2
äœæ¥éå§
$ git clone https://github.com/gfngfn/SATySFi.git
$ mkdir card && cd card
$ cp ../SATySFi/demo/Makefile Makefile
$ touch minimum.satyh ïŒæå°éã®ã¯ã©ã¹ãã¡ã€ã«ãã³ããŒããŸãïŒ
$ touch card.saty
$ touch local.satyh
$ make
Makefileã®äžèº«ãæžãæããŸãã
TARGETS = \
card.pdf \ â»æç« ãæžãåŽã®ãã¡ã€ã«(.saty)ãšååãæãã
SATYSFI ?= satysfi
.PHONY: all clean
.SUFFIXES: .saty .pdf
.saty.pdf:
$(SATYSFI) $< -o $@
all:: $(TARGETS)
clean:
rm -f *.pdf *.satysfi-aux
minimum.satyhïŒThe SATySFi Book 135ããŒãžãå€å°ãªããšããŸãšãã«äœ¿ããïŒå®è³ªçã«æå°ã®ã¯ã©ã¹ãã¡ã€ã«ãïŒ
let-inline ctx \math m =
script-guard Latin (embed-math ctx m)
let-block ctx +p it =
line-break true true ctx (read-inline ctx it ++ inline-fil)
let document bt =
let ctx =
get-initial-context 440pt (command \math)
|> set-dominant-narrow-script Latin
in
let bb = read-block ctx bt in
page-break A4Paper
(fun _ -> (|
text-origin = (80pt, 100pt);
text-height = 630pt;
|))
(fun _ -> (|
header-origin = (0pt, 0pt);
header-content = block-nil;
footer-origin = (0pt, 0pt);
footer-content = block-nil;
|)) bb
ãããæ žã«ã¯ã©ã¹ãã¡ã€ã«ãäœæããŠæ¬åœã«è¯ãã®ãã¯ã¡ãã£ãšç¢ºä¿¡æãŠãŠããªãã足ããŠããªãèŠçŽ ããããã ãã©ãäžèšãšåãããŠãšããããã³ã³ãã€ã«ãéãããã«ãªãã
local.satyh
@import: minimum
let font-size-normal = 12pt â»æ¬æ¥å¿
èŠãªãæ³å®ã ã£ãããäœãããå€æ°ãå®çŸ©ã§ãããªããšmakeã§ããªãã£ãã
card.saty
@import: local
document '<
+p{ããµããµ}
>
æ ãç·šã
card.satyã§ããã¥ã¡ã³ãçŽäžã«frameã¿ã°ãä»äžããã
@import: local
document '<
+frame<
+p{ããµããµ}
>
>
vdecosetã®å®è£
ãšThe SATySFi Bookã®9.3ç« ãèŠãªãããèªåçšã®ãã³ã¬ãŒã·ã§ã³ã¯ã©ã¹ãã¡ã€ã«ãäœãã
deco.satyh
@require: color
@require: gr
module Deco : sig
val frame-design : length -> color -> deco-set
end=struct
let frame-design t scolor =
let dash = (t, t *' 3.0, 0pt) in
let strokef = stroke t scolor in
let strokeDashFunc = dashed-stroke t dash scolor in
let space = t +' 25.0pt in
let spaceNarrow = t +' 20.0pt in
let img = load-image `./crown.jpeg` in
let imgSize = 30pt in
let decoS (x, y) w h d =
[
strokeDashFunc (Gr.rectangle (x, y -' d) (x +' w +' 10pt, y +' h));
strokef (Gr.rectangle (x -' space, y -' d -' space) (x +' w +' space, y +' h +' space));
strokef (Gr.rectangle (x -' spaceNarrow, y -' d -' spaceNarrow) (x +' w +' spaceNarrow, y +' h +' spaceNarrow));
draw-text ((x +' w *' 0.5 -' imgSize *' 0.5) , y +' 3pt) (use-image-by-width img imgSize);
draw-text ((x +' w *' 0.5 -' imgSize *' 0.5) , y +' h -' imgSize -' 3pt) (use-image-by-width img imgSize);
]
in
let decoH (x, y) w h d =
[ç¥]
in
let decoM (x, y) w h d =
[ç¥]
in
let decoT (x, y) w h d =
[ç¥]
in
(decoS, decoH, decoM, decoT)
end
The SATySFi Book P115ããŒãžã«ãdeco-set åã® 4 ã€çµã¯ïŒ å žåçã« ã¯ãããã ããã 圢ïŒãåã 圢ïŒããã 圢ïŒãã³ã 圢ãããã°ã©ãã£ãã¯ã¹ãè¿ããã㪠åœæ°ã§ãã.ããšããããã«ãframeå ã®æç« ãããŒãžãè·šãã§frameãåããæã®è£ 食èšå®ãããããèšå®ããŠããã¿ããã
æ ã«ç»åãæã£ãŠããã®ã©ããã£ããè¯ããããããªãã£ãããã©ãdoc-privitivesãšããæäŸãããŠããé¢æ°ãæ³å®ããåŒæ°ã®åãšè¿ãå€ã®åã®ããã¥ã¡ã³ãã®ãé°ã§ãé¢æ°åèšèªããããã®ããªãããã¡ããã¡ããã£ãŠãããšã§ããæããã§ãªããšããªã£ããè£åŽã®åªåã¯è²ã ããã®ã ãããããŠãŒã¶ãŒãšããŠã¯å²ãšäœãèããã«å®è£ ã§ããã
ããã§importã§ããããã«ãªãã
ãã©ã³ãèšå®ã¯ãçŸæç¹ã§ã®ããŒãžã§ã³ã§ã¯è²ã
ãããå¿
èŠãããæš¡æ§ããšã¯ãããããªã«é£ãããªãã£ããããã±ãŒãžã䜿ãããšãã話ããã©ããšèŠãã
SATySFiã§ãã©ã³ããå€æŽããæ¹æ³
@import: minimum
@import: deco
let font-cjk-kokoro = (`kokoro` , 1.2 , 0.)
let font-latin-italic = (`Junicode-it`, 1.2, 0.)
let-block ctx +frame content =
let pads = (5pt, 5pt, 40pt, 40pt) in
let decoset = Deco.frame-design 2pt (Color.gray 0.75) in
let ctx-font =
ctx |> set-font-size 15pt
|> set-font Kana font-cjk-kokoro
|> set-font HanIdeographic font-cjk-kokoro
|> set-font Latin font-latin-italic
|> set-dominant-wide-script Kana
|> set-language Kana Japanese
|> set-language HanIdeographic Japanese
|> set-text-color (Color.gray 0.3)
|> set-min-gap-of-lines 20pt
in
block-frame-breakable ctx pads decoset (fun ctx -> read-block ctx-font content)
ãããã®äžç·ã¯èªåã§å®è£
ã§ãããã ã£ãããã©ãulineã@importããŠ\dotulineã¿ã°ã䜿ãããŠããã£ãŠããããªæãã
æ ãå¯æãããã ãã§ãæºè¶³åºŠãé«ãð
ãã©ã³ããã©ã³ã²ãŒãžã®èšå®ã¯æ¬åœã¯frameã§ã¯ãªããŠdocumentã®æ¹ã«èšå®ããŠããããã®ã ãã©ãdocumentå€æ°ã®äžæžããå¯èœãããããªãã£ããããã¥ã¡ã³ãã®å·Šå³ãå
šäœçã«æ ç·ã«è¿ãããã®ãæ°ã«ãªãã®ã ããããã£ã³ã°ãèšå®ãããèšå®ãæªãã£ãã®ããããã«åŽ©ããŠããŸã£ããæäœããŠããäžã§çŽ°ããçåãçºçããç¬éããã£ãã®ã§ãã¡ãããšSATySFiã³ãã¥ããã£ãé Œã£ãæ¹ãè¯ãæ°ãããŠããã
ææ³
ä»ååŸåæŠã§æéã足ããã·ã³ãã«ã«çµããŸããããSATySFiã§ãã£ãšè²ã
å¯æããã®ã»æŽèœãå·¥äœãåºæ¥ããã ãšæããŠããŸãã沢山å®è£
ããããã®ã®ã¢ã€ãã¢ã¯ããã®ã§ããããããšæ°ãåããæã«äœåãåºããŠããããè¯ãã§ãã...
æ¬èšäºãèªãã æ¹ãæ¯éè²ã
äœã£ãŠã¿ãŠãã ããã
rubyãããã±ãŒãžã䜿ããšè¯ãæãã«ã«ããæ¯ããŸãã
ãæå LaTeXãã¯ã€ã±ããã ãªãšããå°è±¡ã§ããåœå åŠäŒã®è«æã®ãã³ãã¬ãŒãã§ãæäŸãããã°ã䜿ã人å€ãã®ã§ã¯ãªãã§ãããããå¿çšäŸã¯ã¢ã€ãã¢æ¬¡ç¬¬ã§æ²¢å±±èããããã®ã§ãããããªãã®äœã£ãŠã¿ãŸãããŒãå ±åãå¢ãããšè¯ãããã§ãããŒã§ã¯ã§ã¯ã
-
Venturaã«OSã¢ããããŒãããããbrew updateãåºæ¥ãªããªã£ãŠãbrewèªäœã®åé€ã»åã€ã³ã¹ããŒã«ãããŠè§£æ±ºããŸãããäžæãæ¶ããŠæ»ããã®ãäžå®ã§ãæãã£ãã§ãã â©ïž
-
ææ°ã¯v0.0.8ã§ãããå·çæç¹ã§Satyrographosã§ããã±ãŒãžãšããŠæäŸãããŠããããŒãžã§ã³ã¯v0.0.7ãªã®ã§ããã¡ãã䜿ãããŠãã ããã â©ïž
Discussion