diff --git a/packages/preview/beago-suite/0.1.0/LICENSE b/packages/preview/beago-suite/0.1.0/LICENSE new file mode 100644 index 0000000000..d824e52595 --- /dev/null +++ b/packages/preview/beago-suite/0.1.0/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Aaron P. Murniadi + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/packages/preview/beago-suite/0.1.0/README.md b/packages/preview/beago-suite/0.1.0/README.md new file mode 100644 index 0000000000..6bf2030a1b --- /dev/null +++ b/packages/preview/beago-suite/0.1.0/README.md @@ -0,0 +1,95 @@ +# beago-suite + +A minimal [Typst](https://typst.app) template package with two layouts: quick drafts and structured articles. + +## Install + +Published package: + +```typst +#import "@preview/beago-suite:0.1.0": * +``` + +Local development: + +```typst +#import "../src/beago.typ": * +``` + +## Templates + +| Template | Use for | +| --------- | --------------------------------------------------------------------------- | +| `beago-draft` | Quick notes and working documents with an optional DRAFT watermark | +| `beago-article` | Long-form writing with abstract, heading numbering, and justified body text | + +Full demos: [draft.typ](template/draft.typ), [main.typ](template/main.typ). + +## Draft + +```typst +#import "@preview/beago-suite:0.1.0": beago-draft + +#show: beago-draft.with( + title: [Routing Config Notes], + author: [Your Name], + date: "2026-06-16", +) + += Open questions + +- Should fallback chains be explicit or inferred? +``` + +### Parameters + +| Parameter | Default | Description | +| ------------- | ---------- | ---------------------------- | +| `title` | `[Title]` | Document title | +| `author` | `[Author]` | Author name | +| `date` | today | Date string | +| `font-size` | `11pt` | Base font size | +| `paper` | `"a4"` | Page size | +| `watermark` | `true` | Show rotated DRAFT watermark | +| `title-align` | `left` | Title block alignment | + +## Article + +```typst +#import "@preview/beago-suite:0.1.0": beago-article + +#show: beago-article.with( + title: [Document Title], + subtitle: [Optional subtitle], + author: [Your Name], + date: "2026-06-16", + abstract: [A short summary of the document.], + paper: "a4", + heading-numbering: "1.1.", + first-line-indent: (amount: 2em, all: false), +) + += Introduction + +$ (-1.32865 plus.minus 0.50273) times 10^(-6) $ +``` + +### Parameters + +| Parameter | Default | Description | +| ------------------- | ---------- | ----------------------------------------- | +| `title` | `[Title]` | Document title | +| `subtitle` | `none` | Optional subtitle | +| `author` | `[Author]` | Author name | +| `date` | today | Date string | +| `abstract` | `none` | Optional abstract block | +| `font-size` | `11pt` | Base font size | +| `paper` | `"a4"` | Page size | +| `heading-numbering` | `"1.1."` | Heading number format (`none` to disable) | +| `title-align` | `center` | Title block alignment | +| `first-line-indent` | `none` | Paragraph first-line indent | +| `line-spacing` | `1em` | Line and paragraph spacing | + +## License + +MIT diff --git a/packages/preview/beago-suite/0.1.0/src/beago.typ b/packages/preview/beago-suite/0.1.0/src/beago.typ new file mode 100644 index 0000000000..2225f27efe --- /dev/null +++ b/packages/preview/beago-suite/0.1.0/src/beago.typ @@ -0,0 +1,3 @@ +// Templates +#import "templates/draft.typ": beago-draft +#import "templates/article.typ": beago-article diff --git a/packages/preview/beago-suite/0.1.0/src/templates/article.typ b/packages/preview/beago-suite/0.1.0/src/templates/article.typ new file mode 100644 index 0000000000..0e933bf938 --- /dev/null +++ b/packages/preview/beago-suite/0.1.0/src/templates/article.typ @@ -0,0 +1,94 @@ +#let beago-article( + title: [Title], + subtitle: none, + author: [Author], + date: datetime.today().display("[month repr:long] [day], [year]"), + abstract: none, + font-size: 12pt, + paper: "a4", + heading-numbering: "1.1.", + title-align: center, + first-line-indent: none, + line-spacing: 1em, + body, +) = { + set document(title: title) + set text(size: font-size, hyphenate: true) + + set page( + paper: paper, + footer: context { + set text(size: font-size * 0.85) + [ + #h(1fr) #counter(page).display("1 / 1", both: true) + ] + }, + ) + + set par( + justify: true, + leading: line-spacing, + spacing: line-spacing, + ) + + set par(first-line-indent: first-line-indent) if first-line-indent != none + set heading(numbering: heading-numbering) if heading-numbering != none + + show heading.where(level: 1): it => { + set text(weight: "bold") + it + } + + show heading.where(level: 2): it => { + set text(weight: "regular", style: "italic") + it + } + + block( + width: if title-align == left { 85% } else { 100% }, + { + set par(justify: if title-align == left { + false + } else if title-align == right { false } else { true }) + set align(title-align) + text(size: font-size * 1.35, weight: "bold", title) + if subtitle != none { + linebreak() + text(style: "italic", subtitle) + } + + linebreak() + + if date != none { + text(date) + } + if author != none and date != none { + [, #text(author)] + } else { + text(author) + } + }, + ) + + if abstract != none { + block( + width: 100%, + inset: (x: 3em, y: 0.75em), + [ + #set align(title-align) + #set text(size: font-size * 0.95) + #set par( + justify: true, + leading: 0.8em, + spacing: 0.8em, + first-line-indent: 0em, + ) + #text(weight: "bold")[Abstract] + #v(0.5em) + #abstract + ], + ) + } + + body +} diff --git a/packages/preview/beago-suite/0.1.0/src/templates/draft.typ b/packages/preview/beago-suite/0.1.0/src/templates/draft.typ new file mode 100644 index 0000000000..54aa6f9c78 --- /dev/null +++ b/packages/preview/beago-suite/0.1.0/src/templates/draft.typ @@ -0,0 +1,47 @@ +#let beago-draft( + title: [Title], + author: [Author], + date: datetime.today().display("[month repr:long] [day], [year]"), + font-size: 12pt, + paper: "a4", + watermark: true, + title-align: left, + body, +) = { + set document(title: title) + set text(size: font-size) + + set page( + paper: paper, + footer: context { + set text(size: font-size * 0.85) + [ + #h(1fr) #counter(page).display("1 / 1", both: true) + ] + }, + ) + + set page( + background: rotate(-45deg, text( + size: font-size * 4, + tracking: font-size * 0.08, + fill: luma(230), + )[*DRAFT*]), + ) if watermark + + block( + width: if title-align == left { 85% } else { 100% }, + { + set align(title-align) + text(size: font-size * 1.35, weight: "bold", title) + linebreak() + text(date) + linebreak() + text(author) + }, + ) + + v(1em) + + body +} diff --git a/packages/preview/beago-suite/0.1.0/template/draft.typ b/packages/preview/beago-suite/0.1.0/template/draft.typ new file mode 100644 index 0000000000..dc4eb27800 --- /dev/null +++ b/packages/preview/beago-suite/0.1.0/template/draft.typ @@ -0,0 +1,18 @@ +#import "@preview/beago-suite:0.1.0": * + +#show: beago-draft.with( + title: [Routing Config Notes], + author: [Aaron P. Murniadi], + date: "2026-06-16", +) + += Open questions + +- Should fallback chains be explicit or inferred? +- What is the max zone depth before solver time spikes? + +#lorem(40) + += Scratch ideas + +#lorem(60) diff --git a/packages/preview/beago-suite/0.1.0/template/main.typ b/packages/preview/beago-suite/0.1.0/template/main.typ new file mode 100644 index 0000000000..5897eba5ff --- /dev/null +++ b/packages/preview/beago-suite/0.1.0/template/main.typ @@ -0,0 +1,90 @@ +#import "@preview/beago-suite:0.1.0": * + +#show: beago-article.with( + title: [The Architecture of Distributed Logistics Systems], + subtitle: [A Case Study of the Beago Logistics System], + author: [Aaron P. Murniadi], + title-align: left, + heading-numbering: "1.1.", + paper: "a4", + first-line-indent: (amount: 2em, all: false), + font-size: 12pt, + line-spacing: 1em, + abstract: [ + Modern logistics networks require automated routing configuration at scale. + This case study describes the Beago logistics system, its hierarchical zone + decomposition, and the composable routing schemas that reduce solver time + while preserving delivery accuracy. + ], +) + += Introduction + +#lorem(80) + += Background + +$ (-1.32865 plus.minus 0.50273) times 10^(-6) $ + +== Motivation + +Modern logistics networks operate at a scale that makes manual routing +infeasible. The combinatorial complexity of assigning parcels to zones, hubs, +and drivers grows exponentially with fleet size. Automated routing configuration +systems address this by encoding business rules — coverage zones, capacity +constraints, and service-level agreements — into structured, machine-readable +formats.#footnote[This is a test footnote] + +#lorem(80) + +== Related Work + +Prior work in vehicle routing (VRP) and its variants established the theoretical +foundations now used in production systems. Recent industry efforts have shifted +toward hybrid approaches that combine constraint solvers with learned +heuristics, enabling real-time re-routing in response to traffic or failed +delivery attempts. + +#lorem(60) + += Methodology + +== System Design + +#lorem(100) + +== Routing Configuration + +Routing nodes are the atomic unit of the configuration layer. Each node encodes +a mapping from a geographic zone identifier to a set of operational parameters: +hub assignment, delivery window, vehicle class, and fallback rules. Nodes are +composed into directed graphs, enabling cascading resolution when primary +assignments are unavailable. + +#lorem(50) + +== Evaluation + +#lorem(90) + += Results + +#lorem(110) + +== Discussion + +The results confirm that hierarchical zone decomposition significantly reduces +solver time without sacrificing delivery accuracy. Notably, configurations that +expose fallback chains — rather than hard-failing on unresolvable zones — +improved overall fulfillment rate by reducing manual intervention in edge cases. + +#lorem(40) + += Conclusion + +#lorem(70) + +Taken together, these findings suggest that investing in expressive, composable +routing configuration schemas is a more tractable path to scalable logistics +than pursuing purely algorithmic improvements in isolation. Future work will +explore dynamic reconfiguration triggered by real-time demand signals. diff --git a/packages/preview/beago-suite/0.1.0/thumbnail.png b/packages/preview/beago-suite/0.1.0/thumbnail.png new file mode 100644 index 0000000000..990bd46af1 Binary files /dev/null and b/packages/preview/beago-suite/0.1.0/thumbnail.png differ diff --git a/packages/preview/beago-suite/0.1.0/typst.toml b/packages/preview/beago-suite/0.1.0/typst.toml new file mode 100644 index 0000000000..ce20e48038 --- /dev/null +++ b/packages/preview/beago-suite/0.1.0/typst.toml @@ -0,0 +1,16 @@ +[package] +name = "beago-suite" +version = "0.1.0" +compiler = "0.14.2" +entrypoint = "src/beago.typ" +authors = ["Aaron P. Murniadi "] +repository = "https://github.com/aaronmurniadi/beago-suite" +license = "MIT" +keywords = ["suite", "minimal", "template", "pack"] +description = "Minimal templates for quick drafts and structured articles" +categories = ["layout", "paper"] + +[template] +path = "template" +entrypoint = "main.typ" +thumbnail = "thumbnail.png" diff --git a/packages/preview/beago-suite/0.2.0/LICENSE b/packages/preview/beago-suite/0.2.0/LICENSE new file mode 100644 index 0000000000..d824e52595 --- /dev/null +++ b/packages/preview/beago-suite/0.2.0/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Aaron P. Murniadi + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/packages/preview/beago-suite/0.2.0/README.md b/packages/preview/beago-suite/0.2.0/README.md new file mode 100644 index 0000000000..8e755d68b2 --- /dev/null +++ b/packages/preview/beago-suite/0.2.0/README.md @@ -0,0 +1,178 @@ +# beago-suite + +A minimal [Typst](https://typst.app) template package with draft, article, and fantasy-book layouts. + +## Install + +Published package: + +```typst +#import "@preview/beago-suite:0.2.0": * +``` + +Local development: + +```typst +#import "../src/lib.typ": * +``` + +## Templates + +| Template | Use for | +| --------------- | --------------------------------------------------------------------------- | +| `beago-draft` | Quick notes and working documents with an optional DRAFT watermark | +| `beago-article` | Long-form writing with abstract, heading numbering, and justified body text | +| `book-fantasy` | A5 fantasy/historical book: front matter, parts, drop caps, auto colophon | + +Full demos: [draft.typ](example/draft.typ), [article.typ](example/article.typ), [book-fantasy.typ](example/book-fantasy.typ). + +## Draft + +```typst +#import "@preview/beago-suite:0.2.0": beago-draft + +#show: beago-draft.with( + title: [Routing Config Notes], + author: [Your Name], + date: "2026-06-16", +) + += Open questions + +- Should fallback chains be explicit or inferred? +``` + +### Parameters + +| Parameter | Default | Description | +| ------------- | ---------- | ---------------------------- | +| `title` | `[Title]` | Document title | +| `author` | `[Author]` | Author name | +| `date` | today | Date string | +| `font-size` | `11pt` | Base font size | +| `paper` | `"a4"` | Page size | +| `watermark` | `true` | Show rotated DRAFT watermark | +| `title-align` | `left` | Title block alignment | + +## Article + +```typst +#import "@preview/beago-suite:0.2.0": beago-article + +#show: beago-article.with( + title: [Document Title], + subtitle: [Optional subtitle], + author: [Your Name], + date: "2026-06-16", + abstract: [A short summary of the document.], + paper: "a4", + heading-numbering: "1.1.", + first-line-indent: (amount: 2em, all: false), +) + += Introduction + +$ (-1.32865 plus.minus 0.50273) times 10^(-6) $ +``` + +### Parameters + +| Parameter | Default | Description | +| ------------------- | ---------- | ----------------------------------------- | +| `title` | `[Title]` | Document title | +| `subtitle` | `none` | Optional subtitle | +| `author` | `[Author]` | Author name | +| `date` | today | Date string | +| `abstract` | `none` | Optional abstract block | +| `font-size` | `11pt` | Base font size | +| `paper` | `"a4"` | Page size | +| `heading-numbering` | `"1.1."` | Heading number format (`none` to disable) | +| `title-align` | `center` | Title block alignment | +| `first-line-indent` | `none` | Paragraph first-line indent | +| `line-spacing` | `1em` | Line and paragraph spacing | + + +## Book Fantasy + +A5 two-sided book layout (typearea + Schola by default): classic cover, optional front matter, roman TOC pages, then arabic body. Chapters open with drop caps; parts and chapters are numbered and listed in the TOC. + +**Page order:** cover → title page → publishing-info → dedication → acknowledgements → epigraph → frontmatter → TOC → body → colophon + +**Structure:** +- `=` — top-level sections (Preface, Appendix); unnumbered +- `#book-part[Title]` — Part I, II, … (title page + TOC entry) +- `==` — chapters under a part; auto Roman numerals (I, II, …) above the title and in the TOC +- `#show: book-backmatter` — end matter (e.g. appendix); no page footer + +```typst +#import "@preview/beago-suite:0.2.0": book-fantasy, dropped, book-part, book-backmatter + +#show: book-fantasy.with( + title-prefix: [The], + title: [Maid of Orleans], + subtitle: [Translated from the German of Frederick Henning], + author: [George P. Upton], + author-note: [Translator of "Memories," etc.], + place: [Chicago], + publisher: [A. C. McClurg & Co.], + year: [1904], + publishing-info: [Copyright, 1904], + dedication: [To the memory of the Maid of Orleans], + epigraph: quote(attribution: [Voltaire])[Courage is womanish when it is Joan's.], + colophon: true, +) + += Preface + +#dropped[The life story of Joan of Arc,][ + as told in this volume, closely follows the historical facts.] + +#book-part[The Pastoral Years] + +== The Fairy Tree + +#dropped[As the traveller,][ descending the valley approaches Domremy.] + +#show: book-backmatter + += Appendix +``` + +### Parameters + +| Parameter | Default | Description | +| --- | --- | --- | +| `title` | `[Title]` | Cover / title-page title | +| `title-prefix` | `none` | Small word above title (e.g. `The`) | +| `subtitle` | `none` | Cover subtitle | +| `author` | `[Author]` | Author / translator | +| `author-note` | `none` | Line under author on the cover | +| `publisher` / `place` / `year` | `none` | Cover imprint | +| `cover-image` | `none` | Cover art (e.g. `#image(...)`) | +| `titlepage` | `auto` | Title page after cover (`none` to skip; or custom content) | +| `publishing-info` | `none` | Copyright / imprint page | +| `dedication` | `none` | Dedication page (italic, centered) | +| `acknowledgements` | `none` | Acknowledgements page | +| `epigraph` | `none` | Epigraph before the TOC | +| `frontmatter` | `none` | Free-form page before the TOC | +| `colophon` | `false` | If `true`, auto page: font, size, paper, two-sided, Typst credit | +| `font` | `"TeX Gyre Schola"` | Body font | +| `font-size` | `11pt` | Base font size | +| `paper` | `"a5"` | Page size | +| `two-sided` | `true` | Mirrored margins (typearea) | +| `binding-correction` | `8mm` | typearea binding correction | +| `show-outline` | `true` | Table of contents (roman page numbers) | +| `show-figures-outline` | `false` | List of figures | + +### Helpers + +| Helper | Use | +| --- | --- | +| `dropped[First,][ rest…]` | Drop cap chapter opening (droplet) | +| `framed-image(path, caption)` | Framed plate; optional list of figures | +| `book-part[Title]` | Numbered part title page + TOC | +| `book-backmatter` | `#show:` before appendix / end matter | + +## License + +MIT diff --git a/packages/preview/beago-suite/0.2.0/example/article.typ b/packages/preview/beago-suite/0.2.0/example/article.typ new file mode 100644 index 0000000000..4772754911 --- /dev/null +++ b/packages/preview/beago-suite/0.2.0/example/article.typ @@ -0,0 +1,90 @@ +#import "@preview/beago-suite:0.2.0": * + +#show: beago-article.with( + title: [The Architecture of Distributed Logistics Systems], + subtitle: [A Case Study of the Beago Logistics System], + author: [Aaron P. Murniadi], + title-align: left, + heading-numbering: "1.1.", + paper: "a4", + first-line-indent: (amount: 2em, all: false), + font-size: 12pt, + line-spacing: 1em, + abstract: [ + Modern logistics networks require automated routing configuration at scale. + This case study describes the Beago logistics system, its hierarchical zone + decomposition, and the composable routing schemas that reduce solver time + while preserving delivery accuracy. + ], +) + += Introduction + +#lorem(80) + += Background + +$ (-1.32865 plus.minus 0.50273) times 10^(-6) $ + +== Motivation + +Modern logistics networks operate at a scale that makes manual routing +infeasible. The combinatorial complexity of assigning parcels to zones, hubs, +and drivers grows exponentially with fleet size. Automated routing configuration +systems address this by encoding business rules — coverage zones, capacity +constraints, and service-level agreements — into structured, machine-readable +formats.#footnote[This is a test footnote] + +#lorem(80) + +== Related Work + +Prior work in vehicle routing (VRP) and its variants established the theoretical +foundations now used in production systems. Recent industry efforts have shifted +toward hybrid approaches that combine constraint solvers with learned +heuristics, enabling real-time re-routing in response to traffic or failed +delivery attempts. + +#lorem(60) + += Methodology + +== System Design + +#lorem(100) + +== Routing Configuration + +Routing nodes are the atomic unit of the configuration layer. Each node encodes +a mapping from a geographic zone identifier to a set of operational parameters: +hub assignment, delivery window, vehicle class, and fallback rules. Nodes are +composed into directed graphs, enabling cascading resolution when primary +assignments are unavailable. + +#lorem(50) + +== Evaluation + +#lorem(90) + += Results + +#lorem(110) + +== Discussion + +The results confirm that hierarchical zone decomposition significantly reduces +solver time without sacrificing delivery accuracy. Notably, configurations that +expose fallback chains — rather than hard-failing on unresolvable zones — +improved overall fulfillment rate by reducing manual intervention in edge cases. + +#lorem(40) + += Conclusion + +#lorem(70) + +Taken together, these findings suggest that investing in expressive, composable +routing configuration schemas is a more tractable path to scalable logistics +than pursuing purely algorithmic improvements in isolation. Future work will +explore dynamic reconfiguration triggered by real-time demand signals. diff --git a/packages/preview/beago-suite/0.2.0/example/book-fantasy.typ b/packages/preview/beago-suite/0.2.0/example/book-fantasy.typ new file mode 100644 index 0000000000..5493ee58fb --- /dev/null +++ b/packages/preview/beago-suite/0.2.0/example/book-fantasy.typ @@ -0,0 +1,168 @@ +#import "@preview/beago-suite:0.2.0": * + +#show: book-fantasy.with( + paper: "a5", + font-size: 12pt, + font: "EB Garamond", + title-prefix: [The], + title: [Maid of Orleans], + subtitle: [Translated from the German of Frederick Henning], + author: [George P. Upton], + author-note: [Translator of "Memories," etc.], + place: [Chicago], + publisher: [A. C. McClurg & Co.], + year: [1904], + publishing-info: [ + Copyright, 1904\ By A. C. McClurg \& Co.\ + #v(1em) + Published October 10, 1904 + ], + dedication: [To the memory of the Maid of Orleans], + acknowledgements: [ + The translator acknowledges the courtesy of those who assisted in verifying + the historical notes attached to this volume. #lorem(20) + ], + epigraph: quote(attribution: [Voltaire], block: true)[Courage is womanish when + it is Joan's.], + colophon: true, +) + += Preface + +#dropped[The life story of Joan of Arc,][ + as told in this volume, closely follows the historical facts as well as the + official records bearing upon her trial. It divides into pastoral life at + Domremy and the campaigns of the Maid of Orleans. #lorem(55)] + +#linebreak() + +#align(right)[--- G. P. U.] + +#book-part[The Pastoral Years] + +== The Fairy Tree + +#dropped[As the traveller,][ + descending the valley from Neufchâteau, approaches the village of + Domremy,#footnote[Both in the department of Vosges, France.] he will observe a + chestnut-tree hung with wreaths of flowers. #lorem(70)] + +This tree is the "Fairy Tree."#footnote[Witnesses at the trial of Joan of Arc + spoke of the Fairy Tree and the Lætare Sunday walks.] + +#lorem(40) + +#lorem(120) + +#lorem(28) + +#lorem(75) + +== The Voices + +#dropped[In her thirteenth year,][ + Jeanne began to hear voices that called her to the service of France. + #lorem(95)] + +#lorem(55) + +#lorem(18) + +#lorem(140) + +#lorem(65) + +== Farewell to Domremy + +#dropped[When the time of parting came,][ + she took leave of her home with that quiet courage which never afterward left + her. #lorem(80)] + +#lorem(35) + +#lorem(160) + +#lorem(50) + +#book-part[The Campaigns] + +== The Siege of Orleans + +#dropped[At Orleans the English,][ + long masters of the approaches, watched the city as a hunter watches a trapped + stag. #lorem(110)] + +#lorem(70) + +#lorem(22) + +#lorem(100) + +#lorem(45) + +#lorem(155) + +== Patay + +#dropped[The field of Patay,][ + afterward so famous, lay quiet in the summer heat until the banners of the + Maid appeared upon the road. #lorem(85)] + +#lorem(60) + +#lorem(175) + +#lorem(30) + +== The Coronation + +#dropped[At Rheims the last act,][ + so long deferred, was the coronation of the Dauphin amid the joy of a people + who had almost forgotten hope. #lorem(100)] + +#lorem(48) + +#lorem(80) + +#lorem(25) + +#lorem(125) + +== Capture and Martyrdom + +#dropped[The end came at Rouen,][ + where English power and ecclesiastical malice joined to destroy what they + could not understand. #lorem(120)] + + +#lorem(42) + +#lorem(98) + +#lorem(55) + +#lorem(170) + +#lorem(33) + +#show: book-backmatter + += Appendix + +It is impossible to compile a chronological statement of all the events in the +life of Joan of Arc, as many of the dates are uncertain, but those given below +are measurably accurate. + +#lorem(35) + +#list( + marker: [--], + [1411, Born at Domremy, France.], + [1428, The Voices bid Joan to crown the Dauphin and raise the siege.], + [1429, Raises the siege of Orleans; victory at Patay; coronation at Rheims.], + [1430, Taken prisoner at Compiègne.], + [1431, Burned at the stake at Rouen.], + [1456, Sentence revoked by the Pope.], +) + +#lorem(20) diff --git a/packages/preview/beago-suite/0.2.0/example/draft.typ b/packages/preview/beago-suite/0.2.0/example/draft.typ new file mode 100644 index 0000000000..5e832eb987 --- /dev/null +++ b/packages/preview/beago-suite/0.2.0/example/draft.typ @@ -0,0 +1,18 @@ +#import "@preview/beago-suite:0.2.0": * + +#show: beago-draft.with( + title: [Routing Config Notes], + author: [Aaron P. Murniadi], + date: "2026-06-16", +) + += Open questions + +- Should fallback chains be explicit or inferred? +- What is the max zone depth before solver time spikes? + +#lorem(40) + += Scratch ideas + +#lorem(60) diff --git a/packages/preview/beago-suite/0.2.0/src/article.typ b/packages/preview/beago-suite/0.2.0/src/article.typ new file mode 100644 index 0000000000..0e933bf938 --- /dev/null +++ b/packages/preview/beago-suite/0.2.0/src/article.typ @@ -0,0 +1,94 @@ +#let beago-article( + title: [Title], + subtitle: none, + author: [Author], + date: datetime.today().display("[month repr:long] [day], [year]"), + abstract: none, + font-size: 12pt, + paper: "a4", + heading-numbering: "1.1.", + title-align: center, + first-line-indent: none, + line-spacing: 1em, + body, +) = { + set document(title: title) + set text(size: font-size, hyphenate: true) + + set page( + paper: paper, + footer: context { + set text(size: font-size * 0.85) + [ + #h(1fr) #counter(page).display("1 / 1", both: true) + ] + }, + ) + + set par( + justify: true, + leading: line-spacing, + spacing: line-spacing, + ) + + set par(first-line-indent: first-line-indent) if first-line-indent != none + set heading(numbering: heading-numbering) if heading-numbering != none + + show heading.where(level: 1): it => { + set text(weight: "bold") + it + } + + show heading.where(level: 2): it => { + set text(weight: "regular", style: "italic") + it + } + + block( + width: if title-align == left { 85% } else { 100% }, + { + set par(justify: if title-align == left { + false + } else if title-align == right { false } else { true }) + set align(title-align) + text(size: font-size * 1.35, weight: "bold", title) + if subtitle != none { + linebreak() + text(style: "italic", subtitle) + } + + linebreak() + + if date != none { + text(date) + } + if author != none and date != none { + [, #text(author)] + } else { + text(author) + } + }, + ) + + if abstract != none { + block( + width: 100%, + inset: (x: 3em, y: 0.75em), + [ + #set align(title-align) + #set text(size: font-size * 0.95) + #set par( + justify: true, + leading: 0.8em, + spacing: 0.8em, + first-line-indent: 0em, + ) + #text(weight: "bold")[Abstract] + #v(0.5em) + #abstract + ], + ) + } + + body +} diff --git a/packages/preview/beago-suite/0.2.0/src/book-fantasy.typ b/packages/preview/beago-suite/0.2.0/src/book-fantasy.typ new file mode 100644 index 0000000000..a5a96bacdf --- /dev/null +++ b/packages/preview/beago-suite/0.2.0/src/book-fantasy.typ @@ -0,0 +1,347 @@ +#import "dependencies.typ": dropcap, typearea + +/// Drop cap for chapter openings: `#dropped[First words,][ rest of paragraph.]` +#let dropped(first, rest) = { + dropcap(height: 3, gap: 0.5em)[#smallcaps(first)#rest] +} + +/// Framed full-page illustration with italic caption. +#let framed-image(img-path, cap, height: 95%) = { + figure( + rect( + stroke: 1pt + black, + inset: 1pt, + image(img-path, height: height, scaling: "smooth"), + ), + caption: text(size: 10pt, style: "italic", cap), + kind: "beago-image", + supplement: [], + numbering: none, + ) +} + +/// Part title page: `#book-part[The Pastoral Years]` → "Part I", "Part II", … (outline too) +#let book-part(title) = { + counter("beago-part").step() + heading( + level: 1, + supplement: [Part], + outlined: true, + bookmarked: true, + title, + ) +} + +/// Switch into end matter (appendix, notes): `#show: book-backmatter` +#let book-backmatter(body) = { + set heading(numbering: none, outlined: true) + set page(footer: none) + body +} + +#let _titlepage-auto( + title, + title-prefix, + subtitle, + author, + author-note, + font-size, +) = { + align(center)[ + #v(2fr) + #if title-prefix != none { + text( + size: font-size * 1.5, + weight: "semibold", + tracking: 0.05em, + upper(title-prefix), + ) + v(0.5em) + } + #text( + size: font-size * 2, + weight: "semibold", + tracking: 0.1em, + upper(title), + ) + #v(0.35em) + #text(size: font-size * 1.4, tracking: 0.025em, smallcaps(author)) + #v(2fr) + ] +} + +#let _centered-page(body, style: none, size: none) = { + pagebreak() + set text(style: style) if style != none + set text(size: size) if size != none + set par(justify: false, first-line-indent: 0em) + align(center)[ + #v(1fr) + #body + #v(1fr) + ] +} + +/// A5 two-sided fantasy/historical book layout (Schola, drop caps, mirrored margins). +/// +/// Order: cover → titlepage → publishing-info → dedication → +/// acknowledgements → epigraph → frontmatter → TOC → body → colophon +#let book-fantasy( + title: [Title], + title-prefix: none, + subtitle: none, + author: [Author], + author-note: none, + publisher: none, + place: none, + year: none, + cover-image: none, + titlepage: auto, + publishing-info: none, + dedication: none, + acknowledgements: none, + epigraph: none, + frontmatter: none, + colophon: false, + font: "TeX Gyre Schola", + font-size: 11pt, + paper: "a5", + two-sided: true, + binding-correction: 8mm, + show-outline: true, + show-figures-outline: false, + body, +) = { + set document(title: title) + + show: typearea.with( + two-sided: two-sided, + paper: paper, + div: 12, + binding-correction: binding-correction, + footer-include: false, + header-include: false, + footer-height: 0em, + header-height: 0em, + ) + + set text(font: font, size: font-size, lang: "en") + + set par( + justify: true, + justification-limits: ( + spacing: ( + min: 47%, // default: 66.67% + max: 150%, + ), + ), + first-line-indent: (amount: 1em, all: true), + spacing: 0.8em, + leading: 0.8em, + ) + + // Parts = level 1 (with supplement Part); chapters = level 2. + // Unnumbered level-1 (Preface, Appendix) keeps chapter styling. + show heading.where(level: 1): it => { + if it.supplement == [Part] { + let n = counter("beago-part").at(it.location()).first() + pagebreak() + align(center)[ + #v(1fr) + #text(size: 12pt, tracking: 0.15em, smallcaps[Part #numbering("I", n)]) + #v(1.25em) + #text(size: 18pt, weight: "regular", style: "italic", it.body) + #v(1fr) + ] + pagebreak() + } else { + set align(center) + set text(size: 18pt, weight: "regular", style: "italic") + pagebreak() + v(4em) + it.body + v(3em) + } + } + + show heading.where(level: 2): it => { + counter("beago-chapter").step() + pagebreak() + v(4em) + context { + let n = counter("beago-chapter").at(it.location()).first() + align(center)[ + #text(size: 14pt, weight: "regular", tracking: 0.1em, numbering("I", n)) + #v(0.85em) + #text(size: 18pt, weight: "regular", style: "italic", it.body) + #v(4em) + ] + } + } + + set footnote(numbering: "*") + set footnote.entry(indent: 0em) + set page(header: counter(footnote).update(0)) + + set figure( + numbering: none, + placement: auto, + kind: "beago-image", + supplement: [], + ) + + // Cover + set page(footer: none) + align(center)[ + #v(1fr) + #if title-prefix != none { + text( + size: 18pt, + weight: "semibold", + tracking: 0.05em, + upper(title-prefix), + ) + v(0.5em) + } + #text(size: 22pt, weight: "semibold", tracking: 0.1em, upper(title)) + #v(1fr) + #if subtitle != none { + text(size: 12pt, style: "italic", subtitle) + v(1fr) + } + #text(size: 11pt, smallcaps[by]) + #v(0.35em) + #text(size: 16pt, tracking: 0.025em, smallcaps(author)) + #if author-note != none { + linebreak() + text(size: 9pt, style: "italic", author-note) + } + #v(2fr) + #if cover-image != none { + cover-image + v(2fr) + } + #if place != none { + text(size: 12pt, tracking: 0.1em, smallcaps(place)) + } + #v(1fr) + #if publisher != none { + text(size: 12pt, smallcaps(publisher)) + } + #if year != none { + linebreak() + text(size: 12pt, smallcaps(year)) + } + ] + + // Title page + if titlepage == auto { + pagebreak() + _titlepage-auto( + title, + title-prefix, + subtitle, + author, + author-note, + font-size, + ) + } else if titlepage != none { + pagebreak() + titlepage + } + + // Publishing info (copyright) + if publishing-info != none { + _centered-page(publishing-info, size: font-size * 0.9) + } + + // Dedication + if dedication != none { + _centered-page(dedication, style: "italic") + } + + // Acknowledgements + if acknowledgements != none { + pagebreak() + v(1fr) + linebreak() + set par(first-line-indent: 0em) + align(center, acknowledgements) + v(2fr) + } + + // Epigraph + if epigraph != none { + pagebreak() + set text(size: font-size * 0.9, style: "italic") + set par(justify: false, first-line-indent: 0em) + v(1fr) + align(center, epigraph) + v(2fr) + } + + set heading(numbering: none) + set outline.entry(fill: none) + show outline.entry.where(level: 1): it => { + v(1.5em, weak: true) + if it.element.supplement == [Part] { + let n = counter("beago-part").at(it.element.location()).first() + it.indented([Part #numbering("I", n)#h(0.35em)], it.inner()) + } else { + it + } + } + show outline.entry.where(level: 2): it => { + let n = counter("beago-chapter").at(it.element.location()).first() + it.indented( + box(width: 1.75em, align(right, numbering("I", n))) + h(0.5em), + it.inner(), + ) + } + + if show-outline or show-figures-outline { + // `set page` already starts a new page; a prior pagebreak would leave a blank "i". + set page( + footer: context { + let n = counter(page).get().first() + align(if calc.odd(n) { right } else { left }, numbering("i", n)) + }, + ) + counter(page).update(1) + if show-outline { + outline(title: "Table of Contents", indent: auto) + } + if show-figures-outline { + outline( + title: "List of Figures", + target: figure.where(kind: "beago-image"), + ) + } + } + + // Body + set page( + footer: context { + let n = counter(page).get().first() + align(if calc.odd(n) { right } else { left }, numbering("1", n)) + }, + ) + counter(page).update(1) + + body + + // Colophon + if colophon { + pagebreak() + set page(footer: none) + set text(size: font-size * 0.85) + set par(justify: false, first-line-indent: 0em) + align(left)[ + #v(3fr) + Set in #font, #font-size.\ + Paper #upper(paper)#if two-sided [, two-sided].\ + Typeset with Typst and #link( + "https://typst.app/universe/package/beago-suite/", + "beago-suite", + )'s `book-fantasy` layout. + #v(1fr) + ] + } +} diff --git a/packages/preview/beago-suite/0.2.0/src/dependencies.typ b/packages/preview/beago-suite/0.2.0/src/dependencies.typ new file mode 100644 index 0000000000..206fd020cc --- /dev/null +++ b/packages/preview/beago-suite/0.2.0/src/dependencies.typ @@ -0,0 +1,2 @@ +#import "@preview/droplet:0.3.1": dropcap +#import "@preview/typearea:0.2.0": typearea diff --git a/packages/preview/beago-suite/0.2.0/src/draft.typ b/packages/preview/beago-suite/0.2.0/src/draft.typ new file mode 100644 index 0000000000..54aa6f9c78 --- /dev/null +++ b/packages/preview/beago-suite/0.2.0/src/draft.typ @@ -0,0 +1,47 @@ +#let beago-draft( + title: [Title], + author: [Author], + date: datetime.today().display("[month repr:long] [day], [year]"), + font-size: 12pt, + paper: "a4", + watermark: true, + title-align: left, + body, +) = { + set document(title: title) + set text(size: font-size) + + set page( + paper: paper, + footer: context { + set text(size: font-size * 0.85) + [ + #h(1fr) #counter(page).display("1 / 1", both: true) + ] + }, + ) + + set page( + background: rotate(-45deg, text( + size: font-size * 4, + tracking: font-size * 0.08, + fill: luma(230), + )[*DRAFT*]), + ) if watermark + + block( + width: if title-align == left { 85% } else { 100% }, + { + set align(title-align) + text(size: font-size * 1.35, weight: "bold", title) + linebreak() + text(date) + linebreak() + text(author) + }, + ) + + v(1em) + + body +} diff --git a/packages/preview/beago-suite/0.2.0/src/lib.typ b/packages/preview/beago-suite/0.2.0/src/lib.typ new file mode 100644 index 0000000000..4a0ac267a6 --- /dev/null +++ b/packages/preview/beago-suite/0.2.0/src/lib.typ @@ -0,0 +1,3 @@ +#import "draft.typ": beago-draft +#import "article.typ": beago-article +#import "book-fantasy.typ": book-fantasy, dropped, framed-image, book-part, book-backmatter diff --git a/packages/preview/beago-suite/0.2.0/template/main.typ b/packages/preview/beago-suite/0.2.0/template/main.typ new file mode 100644 index 0000000000..4772754911 --- /dev/null +++ b/packages/preview/beago-suite/0.2.0/template/main.typ @@ -0,0 +1,90 @@ +#import "@preview/beago-suite:0.2.0": * + +#show: beago-article.with( + title: [The Architecture of Distributed Logistics Systems], + subtitle: [A Case Study of the Beago Logistics System], + author: [Aaron P. Murniadi], + title-align: left, + heading-numbering: "1.1.", + paper: "a4", + first-line-indent: (amount: 2em, all: false), + font-size: 12pt, + line-spacing: 1em, + abstract: [ + Modern logistics networks require automated routing configuration at scale. + This case study describes the Beago logistics system, its hierarchical zone + decomposition, and the composable routing schemas that reduce solver time + while preserving delivery accuracy. + ], +) + += Introduction + +#lorem(80) + += Background + +$ (-1.32865 plus.minus 0.50273) times 10^(-6) $ + +== Motivation + +Modern logistics networks operate at a scale that makes manual routing +infeasible. The combinatorial complexity of assigning parcels to zones, hubs, +and drivers grows exponentially with fleet size. Automated routing configuration +systems address this by encoding business rules — coverage zones, capacity +constraints, and service-level agreements — into structured, machine-readable +formats.#footnote[This is a test footnote] + +#lorem(80) + +== Related Work + +Prior work in vehicle routing (VRP) and its variants established the theoretical +foundations now used in production systems. Recent industry efforts have shifted +toward hybrid approaches that combine constraint solvers with learned +heuristics, enabling real-time re-routing in response to traffic or failed +delivery attempts. + +#lorem(60) + += Methodology + +== System Design + +#lorem(100) + +== Routing Configuration + +Routing nodes are the atomic unit of the configuration layer. Each node encodes +a mapping from a geographic zone identifier to a set of operational parameters: +hub assignment, delivery window, vehicle class, and fallback rules. Nodes are +composed into directed graphs, enabling cascading resolution when primary +assignments are unavailable. + +#lorem(50) + +== Evaluation + +#lorem(90) + += Results + +#lorem(110) + +== Discussion + +The results confirm that hierarchical zone decomposition significantly reduces +solver time without sacrificing delivery accuracy. Notably, configurations that +expose fallback chains — rather than hard-failing on unresolvable zones — +improved overall fulfillment rate by reducing manual intervention in edge cases. + +#lorem(40) + += Conclusion + +#lorem(70) + +Taken together, these findings suggest that investing in expressive, composable +routing configuration schemas is a more tractable path to scalable logistics +than pursuing purely algorithmic improvements in isolation. Future work will +explore dynamic reconfiguration triggered by real-time demand signals. diff --git a/packages/preview/beago-suite/0.2.0/thumbnail.png b/packages/preview/beago-suite/0.2.0/thumbnail.png new file mode 100644 index 0000000000..a329d72842 Binary files /dev/null and b/packages/preview/beago-suite/0.2.0/thumbnail.png differ diff --git a/packages/preview/beago-suite/0.2.0/typst.toml b/packages/preview/beago-suite/0.2.0/typst.toml new file mode 100644 index 0000000000..89123bfca8 --- /dev/null +++ b/packages/preview/beago-suite/0.2.0/typst.toml @@ -0,0 +1,17 @@ +[package] +name = "beago-suite" +version = "0.2.0" +compiler = "0.14.2" +entrypoint = "src/lib.typ" +authors = ["Aaron P. Murniadi "] +repository = "https://github.com/aaronmurniadi/beago-suite" +license = "MIT" +keywords = ["suite", "minimal", "template", "pack", "book", "fantasy"] +description = "Minimal templates for drafts, articles, and fantasy books" +categories = ["layout", "paper", "book"] +exclude = ["example/", "*.pdf"] + +[template] +path = "template" +entrypoint = "main.typ" +thumbnail = "thumbnail.png"