Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
06766ffa0d | ||
|
|
d85de92c2e | ||
|
|
8ad72aa225 | ||
|
|
bbba00592d | ||
|
|
47cf7ae583 | ||
|
|
2e9e072158 | ||
|
|
4b0979893b | ||
|
|
771760632d | ||
|
|
80f015a1ad | ||
|
|
1ef109fcf9 | ||
|
|
a9f262656c | ||
|
|
40a466859c | ||
|
|
c359bc007c | ||
|
|
9ed3bfdf0d | ||
|
|
69baada6d5 | ||
|
|
21b33e74a6 | ||
|
|
52e2278f4d | ||
|
|
19c6be7357 | ||
|
|
4436f141eb | ||
|
|
d498205e42 | ||
|
|
b74be29ee6 | ||
|
|
61e1d39248 | ||
|
|
841ea6cdc2 | ||
|
|
34f9f921b2 | ||
|
|
ff05f7996a | ||
|
|
91834e7164 | ||
|
|
b1a604e91c |
|
After Width: | Height: | Size: 5.8 KiB |
|
After Width: | Height: | Size: 73 KiB |
|
After Width: | Height: | Size: 160 KiB |
|
After Width: | Height: | Size: 156 KiB |
|
After Width: | Height: | Size: 185 KiB |
|
After Width: | Height: | Size: 180 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 59 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 106 KiB |
|
After Width: | Height: | Size: 108 KiB |
|
After Width: | Height: | Size: 92 KiB |
|
After Width: | Height: | Size: 102 KiB |
|
After Width: | Height: | Size: 169 KiB |
|
After Width: | Height: | Size: 66 KiB |
|
After Width: | Height: | Size: 179 KiB |
|
After Width: | Height: | Size: 100 KiB |
|
After Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 122 KiB |
|
After Width: | Height: | Size: 58 KiB |
|
After Width: | Height: | Size: 108 KiB |
|
After Width: | Height: | Size: 359 KiB |
|
After Width: | Height: | Size: 155 KiB |
|
After Width: | Height: | Size: 53 KiB |
|
After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 40 KiB |
@@ -25,18 +25,22 @@
|
|||||||
// })
|
// })
|
||||||
// }
|
// }
|
||||||
|
|
||||||
#let definition(body, name: none) = {
|
#let definition(body, name: none, numbered: false) = {
|
||||||
// show figure: statement-style(name, numbered: false)
|
// show figure: statement-style(name, numbered: false)
|
||||||
figure(body, kind: "definition", supplement: {
|
figure(
|
||||||
[Definizione]
|
//
|
||||||
if name != none {
|
body,
|
||||||
[ -- ]
|
kind: "definition",
|
||||||
name
|
supplement: if name != none {
|
||||||
}
|
[#name]
|
||||||
})
|
},
|
||||||
|
numbering: if numbered {
|
||||||
|
"1"
|
||||||
|
},
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
#let fact(body, name: none) = {
|
#let fact(body, numbered: false, name: none) = {
|
||||||
// show figure: statement-style(name, numbered: false)
|
// show figure: statement-style(name, numbered: false)
|
||||||
figure(body, kind: "fact", supplement: {
|
figure(body, kind: "fact", supplement: {
|
||||||
[Fatto]
|
[Fatto]
|
||||||
@@ -44,7 +48,12 @@
|
|||||||
[ -- ]
|
[ -- ]
|
||||||
name
|
name
|
||||||
}
|
}
|
||||||
})
|
}, numbering: if numbered { "1" })
|
||||||
|
}
|
||||||
|
|
||||||
|
#let observation(body) = {
|
||||||
|
// show figure: statement-style(name, numbered: false)
|
||||||
|
figure(body, kind: "observation", supplement: [Osservazione], numbering: "1")
|
||||||
}
|
}
|
||||||
|
|
||||||
#let proposition(body, numbered: true) = {
|
#let proposition(body, numbered: true) = {
|
||||||
@@ -142,4 +151,10 @@
|
|||||||
} #h(0.125em)$
|
} #h(0.125em)$
|
||||||
}
|
}
|
||||||
|
|
||||||
#let marker(content) = metadata(("marker", content))
|
#let marker(content) = metadata(("marker", content))
|
||||||
|
|
||||||
|
#let qquad = h(2em)
|
||||||
|
|
||||||
|
#let diff-add(body) = block(fill: green.mix(white), outset: (x: 2pt, y: 3pt), radius: 2pt, body)
|
||||||
|
|
||||||
|
#let diff-del(body) = block(fill: red.mix(white), outset: (x: 2pt, y: 3pt), radius: 2pt, body)
|
||||||
|
|||||||
@@ -0,0 +1,302 @@
|
|||||||
|
#import "@preview/touying:0.6.1": *
|
||||||
|
|
||||||
|
#let _tblock(self: none, title: none, it) = {
|
||||||
|
grid(
|
||||||
|
columns: 1,
|
||||||
|
row-gutter: 0pt,
|
||||||
|
block(
|
||||||
|
fill: self.colors.primary-dark,
|
||||||
|
width: 100%,
|
||||||
|
radius: (top: 6pt),
|
||||||
|
inset: (top: 0.4em, bottom: 0.3em, left: 0.5em, right: 0.5em),
|
||||||
|
text(fill: self.colors.neutral-lightest, weight: "bold", title),
|
||||||
|
),
|
||||||
|
rect(
|
||||||
|
fill: gradient.linear(self.colors.primary-dark, self.colors.primary.lighten(90%), angle: 90deg),
|
||||||
|
width: 100%,
|
||||||
|
height: 4pt,
|
||||||
|
),
|
||||||
|
block(
|
||||||
|
fill: self.colors.primary.lighten(90%),
|
||||||
|
width: 100%,
|
||||||
|
radius: (bottom: 6pt),
|
||||||
|
inset: (top: 0.4em, bottom: 0.5em, left: 0.5em, right: 0.5em),
|
||||||
|
it,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
#let tblock(title: none, it) = touying-fn-wrapper(_tblock.with(title: title, it))
|
||||||
|
|
||||||
|
#let slide(
|
||||||
|
title: auto,
|
||||||
|
header: auto,
|
||||||
|
footer: auto,
|
||||||
|
align: auto,
|
||||||
|
config: (:),
|
||||||
|
repeat: auto,
|
||||||
|
setting: body => body,
|
||||||
|
composer: auto,
|
||||||
|
..bodies,
|
||||||
|
) = touying-slide-wrapper(self => {
|
||||||
|
if align != auto {
|
||||||
|
self.store.align = align
|
||||||
|
}
|
||||||
|
if title != auto {
|
||||||
|
self.store.title = title
|
||||||
|
}
|
||||||
|
if header != auto {
|
||||||
|
self.store.header = header
|
||||||
|
}
|
||||||
|
if footer != auto {
|
||||||
|
self.store.footer = footer
|
||||||
|
}
|
||||||
|
let new-setting = body => {
|
||||||
|
show: std.align.with(self.store.align)
|
||||||
|
show: setting
|
||||||
|
body
|
||||||
|
}
|
||||||
|
touying-slide(self: self, config: config, repeat: repeat, setting: new-setting, composer: composer, ..bodies)
|
||||||
|
})
|
||||||
|
|
||||||
|
#let title-slide(config: (:), ..args) = touying-slide-wrapper(self => {
|
||||||
|
self = utils.merge-dicts(self, config)
|
||||||
|
self.store.title = none
|
||||||
|
let info = self.info + args.named()
|
||||||
|
info.authors = {
|
||||||
|
let authors = if "authors" in info {
|
||||||
|
info.authors
|
||||||
|
} else {
|
||||||
|
info.author
|
||||||
|
}
|
||||||
|
if type(authors) == array {
|
||||||
|
authors
|
||||||
|
} else {
|
||||||
|
(authors,)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let body = {
|
||||||
|
show: std.align.with(center + horizon)
|
||||||
|
block(fill: self.colors.primary, inset: 1.5em, radius: 0.5em, breakable: false, {
|
||||||
|
text(size: 1.2em, fill: self.colors.neutral-lightest, weight: "bold", info.title)
|
||||||
|
if info.subtitle != none {
|
||||||
|
parbreak()
|
||||||
|
text(size: 1.0em, fill: self.colors.neutral-lightest, weight: "bold", info.subtitle)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
// authors
|
||||||
|
grid(
|
||||||
|
columns: (1fr,) * calc.min(info.authors.len(), 3),
|
||||||
|
column-gutter: 1em,
|
||||||
|
row-gutter: 1em,
|
||||||
|
..info.authors.map(author => text(fill: black, author)),
|
||||||
|
)
|
||||||
|
v(0.5em)
|
||||||
|
// institution
|
||||||
|
if info.institution != none {
|
||||||
|
parbreak()
|
||||||
|
text(size: 0.8em, info.institution)
|
||||||
|
}
|
||||||
|
// date
|
||||||
|
if info.date != none {
|
||||||
|
parbreak()
|
||||||
|
text(size: 1.0em, utils.display-info-date(self))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
touying-slide(self: self, body)
|
||||||
|
})
|
||||||
|
|
||||||
|
#let outline-slide(
|
||||||
|
config: (:),
|
||||||
|
title: utils.i18n-outline-title,
|
||||||
|
numbered: true,
|
||||||
|
level: none,
|
||||||
|
..args,
|
||||||
|
) = touying-slide-wrapper(self => {
|
||||||
|
self.store.title = "Indice"
|
||||||
|
touying-slide(self: self, config: config, std.align(
|
||||||
|
self.store.align,
|
||||||
|
components.adaptive-columns({
|
||||||
|
text(fill: self.colors.primary, weight: 600, components.custom-progressive-outline(
|
||||||
|
level: level,
|
||||||
|
alpha: self.store.alpha,
|
||||||
|
indent: (0em, 1em),
|
||||||
|
vspace: (.4em,),
|
||||||
|
numbered: (numbered,),
|
||||||
|
depth: 1,
|
||||||
|
..args.named(),
|
||||||
|
))
|
||||||
|
})
|
||||||
|
+ args.pos().sum(default: none),
|
||||||
|
))
|
||||||
|
})
|
||||||
|
|
||||||
|
#let new-section-slide(
|
||||||
|
config: (:),
|
||||||
|
title: utils.i18n-outline-title,
|
||||||
|
level: 1,
|
||||||
|
numbered: true,
|
||||||
|
..args,
|
||||||
|
body,
|
||||||
|
) = outline-slide(config: config, title: title, level: level, numbered: numbered, ..args, body)
|
||||||
|
|
||||||
|
#let focus-slide(config: (:), align: horizon + center, body) = touying-slide-wrapper(self => {
|
||||||
|
self = utils.merge-dicts(self, config-common(freeze-slide-counter: true), config-page(
|
||||||
|
fill: self.colors.primary,
|
||||||
|
margin: 2em,
|
||||||
|
header: none,
|
||||||
|
footer: none,
|
||||||
|
))
|
||||||
|
set text(fill: self.colors.neutral-lightest, weight: "bold", size: 1.5em)
|
||||||
|
touying-slide(self: self, config: config, std.align(align, body))
|
||||||
|
})
|
||||||
|
|
||||||
|
#let ending-slide(config: (:), title: none, body) = touying-slide-wrapper(self => {
|
||||||
|
let content = {
|
||||||
|
set std.align(center + horizon)
|
||||||
|
if title != none {
|
||||||
|
block(fill: self.colors.tertiary, inset: (top: 0.7em, bottom: 0.7em, left: 3em, right: 3em), radius: 0.5em, text(
|
||||||
|
size: 1.5em,
|
||||||
|
fill: self.colors.neutral-lightest,
|
||||||
|
title,
|
||||||
|
))
|
||||||
|
}
|
||||||
|
body
|
||||||
|
}
|
||||||
|
touying-slide(self: self, config: config, content)
|
||||||
|
})
|
||||||
|
|
||||||
|
#let dm-unipi-theme(
|
||||||
|
aspect-ratio: "16-9",
|
||||||
|
align: horizon,
|
||||||
|
alpha: 20%,
|
||||||
|
title: self => utils.display-current-heading(depth: self.slide-level),
|
||||||
|
header-right: self => self.info.logo,
|
||||||
|
progress-bar: true,
|
||||||
|
footer-columns: (25%, 1fr, 5em),
|
||||||
|
footer-a: self => self.info.author,
|
||||||
|
footer-c: self => if self.info.short-title == auto {
|
||||||
|
self.info.title
|
||||||
|
} else {
|
||||||
|
self.info.short-title
|
||||||
|
},
|
||||||
|
footer-d: context utils.slide-counter.display() + " / " + utils.last-slide-number,
|
||||||
|
..args,
|
||||||
|
body,
|
||||||
|
) = {
|
||||||
|
let header(self) = {
|
||||||
|
set std.align(top)
|
||||||
|
grid(
|
||||||
|
rows: (auto, auto),
|
||||||
|
utils.call-or-display(self, self.store.navigation),
|
||||||
|
utils.call-or-display(self, self.store.header),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
let footer(self) = {
|
||||||
|
set text(size: .5em)
|
||||||
|
set std.align(center + bottom)
|
||||||
|
grid(
|
||||||
|
rows: (auto, auto),
|
||||||
|
utils.call-or-display(self, self.store.footer),
|
||||||
|
if self.store.progress-bar {
|
||||||
|
utils.call-or-display(self, components.progress-bar(
|
||||||
|
height: 2pt,
|
||||||
|
self.colors.primary,
|
||||||
|
self.colors.neutral-lightest,
|
||||||
|
))
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
show: touying-slides.with(
|
||||||
|
config-page(
|
||||||
|
paper: "presentation-" + aspect-ratio,
|
||||||
|
header: header,
|
||||||
|
footer: footer,
|
||||||
|
header-ascent: 0em,
|
||||||
|
footer-descent: 0em,
|
||||||
|
margin: (top: 3.5em, bottom: 2.5em, x: 2.5em),
|
||||||
|
),
|
||||||
|
config-common(slide-fn: slide, new-section-slide-fn: new-section-slide),
|
||||||
|
config-methods(
|
||||||
|
init: (self: none, body) => {
|
||||||
|
set text(size: 18pt, font: "Open Sans")
|
||||||
|
set par(leading: 0.75em)
|
||||||
|
set list(marker: {
|
||||||
|
place(top + left, dy: 0.2em, circle(fill: self.colors.primary, radius: 3pt))
|
||||||
|
h(0.25em)
|
||||||
|
})
|
||||||
|
show figure.caption: set text(size: 0.6em)
|
||||||
|
show footnote.entry: set text(size: 0.6em)
|
||||||
|
show heading: set text(fill: self.colors.primary)
|
||||||
|
show link: it => if type(it.dest) == str {
|
||||||
|
set text(fill: self.colors.primary)
|
||||||
|
it
|
||||||
|
} else {
|
||||||
|
it
|
||||||
|
}
|
||||||
|
show figure.where(kind: table): set figure.caption(position: top)
|
||||||
|
|
||||||
|
body
|
||||||
|
},
|
||||||
|
alert: utils.alert-with-primary-color,
|
||||||
|
tblock: _tblock,
|
||||||
|
),
|
||||||
|
config-colors(
|
||||||
|
primary: rgb("#003c71"),
|
||||||
|
primary-dark: rgb("#005baa"),
|
||||||
|
secondary: rgb("#ffffff"),
|
||||||
|
neutral-lightest: rgb("#ffffff"),
|
||||||
|
neutral-darkest: rgb("#001c35"),
|
||||||
|
),
|
||||||
|
config-store(
|
||||||
|
align: align,
|
||||||
|
alpha: alpha,
|
||||||
|
title: title,
|
||||||
|
header-right: header-right,
|
||||||
|
progress-bar: progress-bar,
|
||||||
|
footer-columns: footer-columns,
|
||||||
|
footer-a: footer-a,
|
||||||
|
footer-c: footer-c,
|
||||||
|
footer-d: footer-d,
|
||||||
|
navigation: self => components.simple-navigation(
|
||||||
|
self: self,
|
||||||
|
primary: white,
|
||||||
|
secondary: gray,
|
||||||
|
background: self.colors.neutral-darkest,
|
||||||
|
logo: utils.call-or-display(self, self.store.header-right),
|
||||||
|
),
|
||||||
|
header: self => if self.store.title != none {
|
||||||
|
block(width: 100%, height: 2em, fill: self.colors.primary, place(
|
||||||
|
left + horizon,
|
||||||
|
text(fill: self.colors.neutral-lightest, weight: 600, size: 1.2em, utils.call-or-display(
|
||||||
|
self,
|
||||||
|
self.store.title,
|
||||||
|
)),
|
||||||
|
dx: 1.5em,
|
||||||
|
))
|
||||||
|
},
|
||||||
|
footer: self => {
|
||||||
|
let cell(fill: none, it) = rect(
|
||||||
|
width: 100%,
|
||||||
|
height: 100%,
|
||||||
|
inset: 1mm,
|
||||||
|
outset: 0mm,
|
||||||
|
fill: fill,
|
||||||
|
stroke: none,
|
||||||
|
std.align(horizon, text(fill: self.colors.neutral-lightest, it)),
|
||||||
|
)
|
||||||
|
grid(
|
||||||
|
columns: self.store.footer-columns,
|
||||||
|
rows: (1.5em, auto),
|
||||||
|
cell(fill: self.colors.neutral-darkest, utils.call-or-display(self, self.store.footer-a)),
|
||||||
|
cell(fill: self.colors.primary, utils.call-or-display(self, self.store.footer-c)),
|
||||||
|
cell(fill: self.colors.primary, utils.call-or-display(self, self.store.footer-d)),
|
||||||
|
)
|
||||||
|
},
|
||||||
|
),
|
||||||
|
..args,
|
||||||
|
)
|
||||||
|
|
||||||
|
body
|
||||||
|
}
|
||||||
@@ -44,3 +44,13 @@
|
|||||||
year = {1977},
|
year = {1977},
|
||||||
publisher = {Springer New York}
|
publisher = {Springer New York}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@book{lickorish1997introduction,
|
||||||
|
title = {An Introduction to Knot Theory},
|
||||||
|
author = {Lickorish, W.B.R.},
|
||||||
|
isbn = {9780387982540},
|
||||||
|
lccn = {97016660},
|
||||||
|
series = {Graduate Texts in Mathematics},
|
||||||
|
year = {1997},
|
||||||
|
publisher = {Springer New York}
|
||||||
|
}
|
||||||
@@ -23,6 +23,8 @@ for i in $(seq 0 3); do
|
|||||||
X_OFFSET=$(( i * TILE_WIDTH ))
|
X_OFFSET=$(( i * TILE_WIDTH ))
|
||||||
TEMP_FILE="_temp_${i}.png"
|
TEMP_FILE="_temp_${i}.png"
|
||||||
OUTPUT_FILE=$(printf "$OUTPUT_TEMPLATE" "$i")
|
OUTPUT_FILE=$(printf "$OUTPUT_TEMPLATE" "$i")
|
||||||
|
|
||||||
|
echo "Generating tile $i: $OUTPUT_FILE"
|
||||||
|
|
||||||
magick "$INPUT_IMAGE" -crop "${TILE_WIDTH}x${TILE_HEIGHT}+${X_OFFSET}+0" +repage "$TEMP_FILE"
|
magick "$INPUT_IMAGE" -crop "${TILE_WIDTH}x${TILE_HEIGHT}+${X_OFFSET}+0" +repage "$TEMP_FILE"
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,10 @@
|
|||||||
import cetz.draw: *
|
import cetz.draw: *
|
||||||
|
|
||||||
// draw the white outline
|
// draw the white outline
|
||||||
set-style(..cetz.styles.resolve((stroke: (paint: white, thickness: size-factor * 0.75pt * 8, cap: "butt")), base: style))
|
set-style(..cetz.styles.resolve(
|
||||||
|
(stroke: (paint: white, thickness: size-factor * 0.75pt * 8, cap: "butt")),
|
||||||
|
base: style,
|
||||||
|
))
|
||||||
polyline
|
polyline
|
||||||
|
|
||||||
// draw the black line
|
// draw the black line
|
||||||
@@ -81,6 +84,49 @@
|
|||||||
draw-strand({ hobby((1.5, +1), (1, +1), (-0.5, 0), (-0.1, -1), (0, -1)) })
|
draw-strand({ hobby((1.5, +1), (1, +1), (-0.5, 0), (-0.1, -1), (0, -1)) })
|
||||||
}),
|
}),
|
||||||
//
|
//
|
||||||
|
// Large
|
||||||
|
//
|
||||||
|
unit-large: skein-canvas(size-factor: 1.5, {
|
||||||
|
import cetz.draw: *
|
||||||
|
|
||||||
|
circle((0, 0), radius: 1, stroke: (paint: black, thickness: 0.75pt))
|
||||||
|
}),
|
||||||
|
over-large: skein-canvas(size-factor: 1.5, {
|
||||||
|
import cetz.draw: *
|
||||||
|
draw-strand({ line((-1, -1), (1, 1)) })
|
||||||
|
draw-strand({ line((-1, 1), (1, -1)) })
|
||||||
|
}),
|
||||||
|
under-large: skein-canvas(size-factor: 1.5, {
|
||||||
|
import cetz.draw: *
|
||||||
|
draw-strand({ line((-1, 1), (1, -1)) })
|
||||||
|
draw-strand({ line((-1, -1), (1, 1)) })
|
||||||
|
}),
|
||||||
|
h-large: skein-canvas(size-factor: 1.5, {
|
||||||
|
import cetz.draw: *
|
||||||
|
draw-strand({ hobby((-1, -1), (0, -0.61), (1, -1), omega: 1) })
|
||||||
|
draw-strand({ hobby((-1, 1), (0, +0.61), (1, 1), omega: 1) })
|
||||||
|
}),
|
||||||
|
v-large: skein-canvas(size-factor: 1.5, {
|
||||||
|
import cetz.draw: *
|
||||||
|
draw-strand({ hobby((-1, -1), (-0.61, 0), (-1, 1), omega: 1) })
|
||||||
|
draw-strand({ hobby((1, -1), (+0.61, 0), (1, 1), omega: 1) })
|
||||||
|
}),
|
||||||
|
strand-large: skein-canvas(size-factor: 1.5, {
|
||||||
|
import cetz.draw: *
|
||||||
|
rect((-1, -1), (1, 1), fill: white, stroke: none)
|
||||||
|
draw-strand({ hobby((-1, 0), (0, 0.25), (1, 0), omega: 1) })
|
||||||
|
}),
|
||||||
|
over-twist-large: skein-canvas(size-factor: 1.5, {
|
||||||
|
import cetz.draw: *
|
||||||
|
draw-strand({ hobby((1.5, +1), (1, +1), (-0.5, 0), (-0.1, -1), (0, -1)) })
|
||||||
|
draw-strand({ hobby((-1.5, +1), (-1, +1), (0.5, 0), (0.1, -1), (0, -1)) })
|
||||||
|
}),
|
||||||
|
under-twist-large: skein-canvas(size-factor: 1.5, {
|
||||||
|
import cetz.draw: *
|
||||||
|
draw-strand({ hobby((-1.5, +1), (-1, +1), (0.5, 0), (0.1, -1), (0, -1)) })
|
||||||
|
draw-strand({ hobby((1.5, +1), (1, +1), (-0.5, 0), (-0.1, -1), (0, -1)) })
|
||||||
|
}),
|
||||||
|
//
|
||||||
// Medium
|
// Medium
|
||||||
//
|
//
|
||||||
unit-medium: skein-canvas(size-factor: medium-scale-factor, {
|
unit-medium: skein-canvas(size-factor: medium-scale-factor, {
|
||||||
@@ -123,16 +169,16 @@
|
|||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
|
|
||||||
#let skein-generic(kind: "over", direction: (+1, +1), arrows: (true, true), styles: ((:), (:))) = {
|
#let skein-generic(kind: "over", direction: (+1, +1), arrows: (true, true), styles: ((:), (:)), size-factor: 1.0) = {
|
||||||
skein-canvas({
|
skein-canvas(size-factor: size-factor, {
|
||||||
import cetz.draw: *
|
import cetz.draw: *
|
||||||
if kind == "over" {
|
if kind == "over" {
|
||||||
draw-strand({ line((-1, -1), (1, 1)) }, style: styles.at(1))
|
draw-strand(size-factor: size-factor, { line((-1, -1), (1, 1)) }, style: styles.at(1))
|
||||||
draw-strand({ line((-1, 1), (1, -1)) }, style: styles.at(0))
|
draw-strand(size-factor: size-factor, { line((-1, 1), (1, -1)) }, style: styles.at(0))
|
||||||
}
|
}
|
||||||
if kind == "under" {
|
if kind == "under" {
|
||||||
draw-strand({ line((-1, 1), (1, -1)) }, style: styles.at(0))
|
draw-strand(size-factor: size-factor, { line((-1, 1), (1, -1)) }, style: styles.at(0))
|
||||||
draw-strand({ line((-1, -1), (1, 1)) }, style: styles.at(1))
|
draw-strand(size-factor: size-factor, { line((-1, -1), (1, 1)) }, style: styles.at(1))
|
||||||
}
|
}
|
||||||
|
|
||||||
if arrows.at(0) {
|
if arrows.at(0) {
|
||||||
|
|||||||
@@ -174,7 +174,7 @@
|
|||||||
|
|
||||||
show raw.where(block: true): it => block(outset: (x: 2pt, y: 3pt), fill: luma(92%), radius: 4pt, inset: 4pt, it)
|
show raw.where(block: true): it => block(outset: (x: 2pt, y: 3pt), fill: luma(92%), radius: 4pt, inset: 4pt, it)
|
||||||
|
|
||||||
set std.bibliography(style: "ieee", title: none)
|
set std.bibliography(style: "ieee", title: none, full: true)
|
||||||
|
|
||||||
set figure(gap: 1em)
|
set figure(gap: 1em)
|
||||||
show figure: set block(above: 1.5em, below: 1.5em)
|
show figure: set block(above: 1.5em, below: 1.5em)
|
||||||
@@ -183,7 +183,7 @@
|
|||||||
show figure.caption: caption => block(inset: (x: 1.4em), {
|
show figure.caption: caption => block(inset: (x: 1.4em), {
|
||||||
set align(left)
|
set align(left)
|
||||||
set text(size: 10.5pt)
|
set text(size: 10.5pt)
|
||||||
smallcaps(caption.supplement)
|
smallcaps([Figura])
|
||||||
if caption.numbering != none {
|
if caption.numbering != none {
|
||||||
[ ]
|
[ ]
|
||||||
numbering(caption.numbering, ..caption.counter.at(it.location()))
|
numbering(caption.numbering, ..caption.counter.at(it.location()))
|
||||||
@@ -223,7 +223,20 @@
|
|||||||
|
|
||||||
block({
|
block({
|
||||||
strong({
|
strong({
|
||||||
it.supplement
|
[Definizione]
|
||||||
|
|
||||||
|
if it.numbering != none {
|
||||||
|
[ #(
|
||||||
|
..counter(heading).get().slice(0, 1).map(it => str(it)),
|
||||||
|
numbering(it.numbering, ..it.counter.at(it.location())),
|
||||||
|
).join(".") ]
|
||||||
|
}
|
||||||
|
|
||||||
|
if it.supplement != none {
|
||||||
|
[ -- ]
|
||||||
|
it.supplement
|
||||||
|
}
|
||||||
|
|
||||||
[.]
|
[.]
|
||||||
})
|
})
|
||||||
[ ]
|
[ ]
|
||||||
@@ -236,12 +249,42 @@
|
|||||||
block({
|
block({
|
||||||
strong({
|
strong({
|
||||||
it.supplement
|
it.supplement
|
||||||
|
if it.numbering != none {
|
||||||
|
[ ]
|
||||||
|
// current chapter and section
|
||||||
|
|
||||||
|
[#(
|
||||||
|
..counter(heading).get().slice(0, 1).map(it => str(it)),
|
||||||
|
numbering(it.numbering, ..it.counter.at(it.location())),
|
||||||
|
).join(".")]
|
||||||
|
}
|
||||||
[.]
|
[.]
|
||||||
})
|
})
|
||||||
it.body
|
it.body
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
show figure.where(kind: "observation"): it => {
|
||||||
|
set align(start)
|
||||||
|
block({
|
||||||
|
strong({
|
||||||
|
it.supplement
|
||||||
|
if it.numbering != none {
|
||||||
|
[ ]
|
||||||
|
// current chapter and section
|
||||||
|
|
||||||
|
[#(
|
||||||
|
..counter(heading).get().slice(0, 1).map(it => str(it)),
|
||||||
|
numbering(it.numbering, ..it.counter.at(it.location())),
|
||||||
|
).join(".")]
|
||||||
|
}
|
||||||
|
[.]
|
||||||
|
})
|
||||||
|
[ ]
|
||||||
|
it.body
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
show figure.where(kind: "proposition"): it => {
|
show figure.where(kind: "proposition"): it => {
|
||||||
set align(start)
|
set align(start)
|
||||||
block({
|
block({
|
||||||
@@ -308,9 +351,17 @@
|
|||||||
show ref: it => {
|
show ref: it => {
|
||||||
if it.element != none {
|
if it.element != none {
|
||||||
let el = it.element
|
let el = it.element
|
||||||
if el.func() == figure and (el.kind == "definition" or el.kind == "proposition" or el.kind == "lemma" or el.kind == "theorem") {
|
if el.func() == figure {
|
||||||
link(el.location(), {
|
link(el.location(), {
|
||||||
if it.supplement != auto { it.supplement } else { el.supplement }
|
if it.supplement != auto {
|
||||||
|
it.supplement
|
||||||
|
} else {
|
||||||
|
if el.kind == "definition" {
|
||||||
|
[Definizione]
|
||||||
|
} else {
|
||||||
|
el.supplement
|
||||||
|
}
|
||||||
|
}
|
||||||
[ ]
|
[ ]
|
||||||
(
|
(
|
||||||
..counter(heading).at(el.location()).slice(0, 1).map(it => str(it)),
|
..counter(heading).at(el.location()).slice(0, 1).map(it => str(it)),
|
||||||
@@ -327,9 +378,10 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Highlight ref
|
||||||
// show ref: it => {
|
// show ref: it => {
|
||||||
// set text(fill: white)
|
// set text(fill: red.mix(black))
|
||||||
// box(fill: red, outset: (y: 0.5em), it)
|
// box(fill: red.mix(white), outset: (y: 0.5em), it)
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// First thesis page
|
// First thesis page
|
||||||
|
|||||||