From 53ab99152433970943381b121a19359ffeee7650 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Wed, 25 Dec 2024 18:19:29 +0100 Subject: finish v1.2 --- lib.typ | 86 +++++++++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 57 insertions(+), 29 deletions(-) (limited to 'lib.typ') diff --git a/lib.typ b/lib.typ index 3828b3e..e9900c5 100644 --- a/lib.typ +++ b/lib.typ @@ -4,6 +4,7 @@ #let defaults = ( drop-tex: 0.5em*ex, drop-xe: 0.5em*ex, + drop-a: -.2em, kern-te: -.1667em, kern-ex: -.125em, @@ -14,55 +15,82 @@ kern-el: -.125em, kern-x2: 0.15em, ) + #let config = state("metalogo", defaults) -#let metalogo(..opts) = context{ - config.update(c => { - for (key, value) in opts.named() { - assert( - c.at(key, default: none) != none, - message: "metalogo: Unknown option \"" + key + "\"" - ) - let expected_type = type(c.at(key)) - let actual_type = type(value) - assert( - expected_type == actual_type, - message: "metalogo: Option \"" + key + "\" has type `" + - str(expected_type) + "` but was assigned a `" + str(actual_type) + "`" - ) - c.insert(key, value) - } - return c - }) +#let metalogo( + ..opts, + body, +) = context{ + // save configuration before applying `opts` + let before = config.get() + + if opts.named().len() == 0 { + // reset default options if no options are passed + config.update(defaults) + } else { + config.update(c => { + for (key, value) in opts.named() { + assert( + c.at(key, default: none) != none, + message: "metalogo: Unknown option \"" + key + "\"" + ) + let expected_type = type(c.at(key)) + let actual_type = type(value) + assert( + expected_type == actual_type, + message: "metalogo: Option \"" + key + "\" has type `" + + str(expected_type) + "` but was assigned a `" + str(actual_type) + "`" + ) + c.insert(key, value) + } + return c + }) + } + + body + + // restore config from before invocation of #metalogo + config.update(before) } +// utility commands #let drop(distance, body) = box(move(dy: distance, body)) #let mirror(body) = scale(x: -100%)[#body] +#let kern(distance) = h(distance) #let TeX = context[#box[#{ let cfg = config.get() + [T] - h(cfg.kern-te) + kern(cfg.kern-te) drop(cfg.drop-tex)[E] - h(cfg.kern-ex) + kern(cfg.kern-ex) [X] }]] #let Xe = context[#box[#{ let cfg = config.get() + [X] - h(cfg.kern-xe) + kern(cfg.kern-xe) drop(cfg.drop-xe)[#mirror[E]] }]] +#let a = context[#box[#{ + let cfg = config.get() + + drop(cfg.drop-a)[#text(size: 0.7em)[A]] +}]] + #let LaTeX = context[#box[#{ let cfg = config.get() [L] - h(cfg.kern-la) - // TODO: factor out `A` component and add spacing parameters to config - // TODO: `A` is too far to the left compared to real LaTeX - drop(-.2em)[#text(0.7em)[A]] - h(cfg.kern-at) + // TODO: `A` is too far to the left compared to real LaTeX due to optical + // size support, see + kern(cfg.kern-la) + a + kern(cfg.kern-at) TeX }]] @@ -70,7 +98,7 @@ let cfg = config.get() Xe - h(cfg.kern-et) + kern(cfg.kern-et) TeX }]] @@ -78,7 +106,7 @@ let cfg = config.get() Xe - h(cfg.kern-el) + kern(cfg.kern-el) LaTeX }]] @@ -89,7 +117,7 @@ let cfg = config.get() LaTeX - h(cfg.kern-x2) + kern(cfg.kern-x2) [2] [$attach(, b: #sym.epsilon)$] }]] -- cgit v1.2.3