Author SHA1 Message Date
aziis98 06766ffa0d finite le slide 2025-07-17 14:29:17 +02:00
aziis98 d85de92c2e fweijpfiewjpe 2025-07-17 03:17:56 +02:00
aziis98 8ad72aa225 finite forse boh 2025-07-17 03:10:35 +02:00
aziis98 bbba00592d fjwfjewifpwe 2025-07-17 01:23:30 +02:00
aziis98 47cf7ae583 prima di cambiare le K in D 2025-07-17 01:15:12 +02:00
aziis98 2e9e072158 fewifjeiwpifpew 2025-07-16 19:58:56 +02:00
aziis98 4b0979893b fewefw 2025-07-16 13:51:54 +02:00
aziis98 771760632d feojfwepjfewpi 2025-07-15 21:01:24 +02:00
aziis98 80f015a1ad presentation, test: ~30min 2025-07-15 01:52:40 +02:00
aziis98 1ef109fcf9 presentation fwjpfejipwfwe 2025-07-14 20:07:29 +02:00
aziis98 a9f262656c reformatted 2025-07-14 15:41:23 +02:00
aziis98 40a466859c versione finale 2025-07-13 23:30:21 +02:00
aziis98 c359bc007c fiwjpfewjpifew 2025-07-13 16:09:32 +02:00
aziis98 9ed3bfdf0d fewjfewipjfwe 2025-07-13 01:47:48 +02:00
aziis98 69baada6d5 fewjfewipjfwe 2025-07-12 23:56:36 +02:00
aziis98 21b33e74a6 fewjfewipjfwe 2025-07-12 20:30:46 +02:00
aziis98 52e2278f4d maybe fixed dim 2025-07-12 02:24:40 +02:00
aziis98 19c6be7357 fewjfipewjfw 2025-07-11 01:05:33 +02:00
aziis98 4436f141eb fewifewp 2025-07-11 01:04:39 +02:00
aziis98 d498205e42 presentation prototype with llm 2025-07-11 01:03:54 +02:00
aziis98 b74be29ee6 fwejifjewpfep 2025-07-09 23:00:30 +02:00
aziis98 61e1d39248 fewofw 2025-07-09 21:26:24 +02:00
aziis98 841ea6cdc2 almost finished 2025-07-09 21:01:05 +02:00
aziis98 34f9f921b2 more work 2025-07-09 13:12:34 +02:00
aziis98 ff05f7996a more work 2025-07-09 01:46:25 +02:00
aziis98 91834e7164 categorical proof with diagrams and crossings 2025-07-08 20:08:52 +02:00
aziis98 b1a604e91c preventivamente post esplosione 2025-07-08 13:42:55 +02:00
53 changed files with 2393 additions and 456 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 359 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

+857 -431
View File
File diff suppressed because it is too large Load Diff
+26 -11
View File
@@ -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)
+1084
View File
File diff suppressed because it is too large Load Diff
+302
View File
@@ -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
}
+10
View File
@@ -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}
}
+2
View File
@@ -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"
+53 -7
View 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) {
+59 -7
View File
@@ -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