/// captioned image with label derived from path: /// - "image.png" = @image /// - "img/image.png" = @image /// - "img/foo/image.png" = @foo_image /// - "img/foo/foo_image.png" = @foo_image /// the caption will be modified based on a conditional positional value: /// - `none`: no change /// - some value: "`caption` (за даними `value`)" /// - no value: "`caption` (рисунок виконано самостійно)" /// additional named arguments will be passed to original `image` function #let img(path, caption, ..sink) = { let parts = path.split(".").first().split("/") let label_string = if ( parts.len() <= 2 or parts.at(-1).starts-with(parts.at(-2)) ) { // ("image",), (_, "image") and (.., "img", "img_image") parts.last() } else { // (.., "img", "image") = "img_image" parts.at(-2) + "_" + parts.at(-1) }.replace(" ", "_") let caption = if sink.pos().len() == 0 { caption } else if sink.pos().first() == none { caption + " (рисунок виконано самостійно)" } else { [#caption (за даними #sink.pos().first())] } [#figure( image(path, ..sink.named()), caption: caption, ) #label(label_string)] }