From 0f4e6d41f9ae71ae18c3baa72d8b9a007b6dbb2c Mon Sep 17 00:00:00 2001 From: chillcicada <2210227279@qq.com> Date: Fri, 13 Mar 2026 02:19:31 +0000 Subject: [PATCH 1/2] simple-handout:0.2.0 > Auto-generated release commit by GitHub Actions --- packages/preview/simple-handout/0.2.0/LICENSE | 21 ++++ .../preview/simple-handout/0.2.0/README.md | 11 ++ .../preview/simple-handout/0.2.0/src/font.typ | 19 +++ .../simple-handout/0.2.0/src/imports.typ | 1 + .../preview/simple-handout/0.2.0/src/lib.typ | 54 +++++++++ .../simple-handout/0.2.0/src/pages/cover.typ | 61 ++++++++++ .../0.2.0/src/pages/preface.typ | 34 ++++++ .../simple-handout/0.2.0/template/main.typ | 109 ++++++++++++++++++ .../simple-handout/0.2.0/template/refs.bib | 0 .../simple-handout/0.2.0/thumbnail.png | Bin 0 -> 91199 bytes .../preview/simple-handout/0.2.0/typst.toml | 17 +++ 11 files changed, 327 insertions(+) create mode 100644 packages/preview/simple-handout/0.2.0/LICENSE create mode 100644 packages/preview/simple-handout/0.2.0/README.md create mode 100644 packages/preview/simple-handout/0.2.0/src/font.typ create mode 100644 packages/preview/simple-handout/0.2.0/src/imports.typ create mode 100644 packages/preview/simple-handout/0.2.0/src/lib.typ create mode 100644 packages/preview/simple-handout/0.2.0/src/pages/cover.typ create mode 100644 packages/preview/simple-handout/0.2.0/src/pages/preface.typ create mode 100644 packages/preview/simple-handout/0.2.0/template/main.typ create mode 100644 packages/preview/simple-handout/0.2.0/template/refs.bib create mode 100644 packages/preview/simple-handout/0.2.0/thumbnail.png create mode 100644 packages/preview/simple-handout/0.2.0/typst.toml diff --git a/packages/preview/simple-handout/0.2.0/LICENSE b/packages/preview/simple-handout/0.2.0/LICENSE new file mode 100644 index 0000000000..0592470ab6 --- /dev/null +++ b/packages/preview/simple-handout/0.2.0/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 chillcicada + +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. diff --git a/packages/preview/simple-handout/0.2.0/README.md b/packages/preview/simple-handout/0.2.0/README.md new file mode 100644 index 0000000000..924f914ac6 --- /dev/null +++ b/packages/preview/simple-handout/0.2.0/README.md @@ -0,0 +1,11 @@ +# Simple Handout Template + +This is a simple typst handout template for Chinese typesetting based on [TnTT](https://github.com/chillcicada/tntt), **original made for my course 'Polymer Molding and Processing' at the Tsinghua University.** It is designed to be easy to use and modify, with a focus on simplicity and clarity. + +## Example + +See the [`example`](example/README.md) folder for an example handout, which is made for the course 'Polymer Molding and Processing' at Tsinghua University. + +## LICENSE + +For the source code of the template, it's released under the [MIT](LICENSE) license. And the example handout under the `example` folder is released under the CC BY-NC-SA 4.0 license. You can use them for non-commercial purposes, but please give credit to the original author and share any derivative works under the same license. diff --git a/packages/preview/simple-handout/0.2.0/src/font.typ b/packages/preview/simple-handout/0.2.0/src/font.typ new file mode 100644 index 0000000000..8f80c6bd49 --- /dev/null +++ b/packages/preview/simple-handout/0.2.0/src/font.typ @@ -0,0 +1,19 @@ +//! Currently, there are already many related packages available to implement similar functions. +//! So you should explore and use them instead of relying on this built-in implementation. +//! since the current implementation is not perfect. All inherits from tntt and is not exported. + +#let _builtin-font-family = ("SongTi", "HeiTi", "KaiTi", "FangSong", "Mono", "Math") + +/// Get the font configuration from the fonts dictionary by font family name. +/// +/// - fonts (dict): the fonts configuration dictionary. +/// - name (str): the font family name, must be one of fonts. +/// -> array +#let _use-fonts(fonts, name) = { + assert( + _builtin-font-family.all(k => k in fonts), + message: "Required font families: " + _builtin-font-family.filter(k => k not in fonts).join(", "), + ) + assert(name in fonts, message: "Unsupported font family for fonts: " + name) + fonts.at(name) +} diff --git a/packages/preview/simple-handout/0.2.0/src/imports.typ b/packages/preview/simple-handout/0.2.0/src/imports.typ new file mode 100644 index 0000000000..b302109348 --- /dev/null +++ b/packages/preview/simple-handout/0.2.0/src/imports.typ @@ -0,0 +1 @@ +#import "@preview/tntt:0.5.1" diff --git a/packages/preview/simple-handout/0.2.0/src/lib.typ b/packages/preview/simple-handout/0.2.0/src/lib.typ new file mode 100644 index 0000000000..2d7edfd301 --- /dev/null +++ b/packages/preview/simple-handout/0.2.0/src/lib.typ @@ -0,0 +1,54 @@ +#import "imports.typ": tntt +#import tntt: cuti, use-size + +#let define-config( + info: (:), + fonts: (:), + twoside: false, + bibliography: none, +) = { + import "font.typ": _use-fonts + + import tntt.exports: * + import "pages/cover.typ": cover + import "pages/preface.typ": preface + + if type(info.title) == str { info.title = info.title.split("\n") } else { + assert(type(info.title) == array, message: "标题(info.title)必须是字符串或字符串数组") + } + + return ( + /// ------ /// + /// config /// + /// ------ /// + info: info, + fonts: fonts, + twoside: twoside, + /// --------- /// + /// utilities /// + /// --------- /// + use-fonts: _use-fonts.with(fonts), + /// ------- /// + /// layouts /// + /// ------- /// + meta: meta.with(info: (..info, author: info.authors.map(a => a.name))), + doc: doc.with(default-fonts: fonts), + front-matter: front-matter, + main-matter: main-matter.with(twoside: twoside), + back-matter: back-matter.with(twoside: twoside), + /// ----- /// + /// pages /// + /// ----- /// + fonts-display: fonts-display.with(fonts: fonts), + cover: cover.with(info: info, default-fonts: fonts), + preface: preface.with(twoside: twoside, default-fonts: fonts), + outline-wrapper: outline-wrapper.with(twoside: twoside, default-fonts: fonts), + notation: notation.with(twoside: twoside), + master-list: master-list.with(twoside: twoside), + figure-list: figure-list.with(twoside: twoside), + table-list: table-list.with(twoside: twoside), + equation-list: equation-list.with(twoside: twoside), + bilingual-bibliography: bilingual-bibliography.with(bibliography), + ) +} + diff --git a/packages/preview/simple-handout/0.2.0/src/pages/cover.typ b/packages/preview/simple-handout/0.2.0/src/pages/cover.typ new file mode 100644 index 0000000000..be50dbdf26 --- /dev/null +++ b/packages/preview/simple-handout/0.2.0/src/pages/cover.typ @@ -0,0 +1,61 @@ +#let cover( + // from entry + info: (:), + fonts: (:), + // options + default-fonts: (:), + display-version: false, +) = { + import "../font.typ": _use-fonts + import "../imports.typ": tntt + import tntt: space-text, use-size + + let use-fonts = _use-fonts.with(fonts + default-fonts) + + let parse-semver-major(version) = numbering("一", int(version.split(".").at(0))) + + set text(font: use-fonts("SongTi")) + + /// Render the cover page + // Title + v(1fr) + + block(width: 100%, align(center, [ + #text(size: use-size("小初"), weight: "bold", spacing: 200%, space-text(info.title.sum())) + + #text(size: use-size("一号"), weight: "regular", info.subtitle) + + #text(size: use-size("三号"), weight: "regular", [(第#parse-semver-major(info.version)版)]) + ])) + + v(3fr) + + // Author + block(width: 100%, { + set text(font: use-fonts("FangSong")) + + let author-chunk = range(info.authors.len()).chunks(2) + + for author-pair in author-chunk { + grid( + columns: (1fr,) * author-pair.len(), column-gutter: -2em, + ..author-pair.map(index => align(center)[ + #text(size: use-size("四号"), weight: "bold")[ #info.authors.at(index).name \ ] + #text(size: use-size("小四"), weight: "regular", link("mailto:" + info.authors.at(index).email)) + #v(1em) + ]) + ) + } + }) + + v(4fr) + + // Date + block(width: 100%, text(size: use-size("小四"), align(center, info.date.display("[year] 年 [month] 月 [day] 日")))) + + if display-version { + block(width: 100%, text(size: use-size("小四"), gray, align(center, [version #info.version]))) + } + + v(1fr) +} diff --git a/packages/preview/simple-handout/0.2.0/src/pages/preface.typ b/packages/preview/simple-handout/0.2.0/src/pages/preface.typ new file mode 100644 index 0000000000..72372dc418 --- /dev/null +++ b/packages/preview/simple-handout/0.2.0/src/pages/preface.typ @@ -0,0 +1,34 @@ +#let preface( + // from entry + fonts: (:), + twoside: false, + // options + default-fonts: (:), + date: datetime.today(), + date-display: "[year] 年 [month] 月 [day] 日", + title: [前  言], + outlined: false, + body-font: "FangSong", + back-font: "KaiTi", + // self + it, +) = { + import "../font.typ": _use-fonts + import "../imports.typ": tntt + import tntt: twoside-pagebreak, use-size + + let use-fonts = _use-fonts.with(fonts + default-fonts) + + /// Render the preface page + twoside-pagebreak(twoside) + + heading(level: 1, outlined: outlined, bookmarked: true, title) + + // body + set text(font: use-fonts(body-font), size: use-size("小四")) + + it + + // back + align(right, text(font: use-fonts(body-font), size: use-size("小四"), date.display(date-display))) +} diff --git a/packages/preview/simple-handout/0.2.0/template/main.typ b/packages/preview/simple-handout/0.2.0/template/main.typ new file mode 100644 index 0000000000..a067a37090 --- /dev/null +++ b/packages/preview/simple-handout/0.2.0/template/main.typ @@ -0,0 +1,109 @@ +#import "@preview/simple-handout:0.2.0": define-config + +/// 以下字体配置适用于安装了 Windows 10/11 字体及 Windows 10/11 简体中文字体扩展的设备, +/// 请勿修改 font-family 中定义的键值,一般情况下,其含义为: +/// - SongTi: 宋体,正文字体,通常对应西文中的衬线字体 +/// - HeiTi: 黑体,标题字体,通常对应西文中的无衬线字体 +/// - KaiTi: 楷体,用于说明性文本和主观性的表达 +/// - FangSong: 仿宋,通常用于注释、引文及权威性阐述 +/// - Mono: 等宽字体,对于代码,会优先使用此项,推荐中文字体使用黑体或楷体,或者一些流行的中文等宽字体 +/// - Math: 数学字体,通常用于数学公式和符号,中文字体默认使用楷体 +#let font-family = ( + SongTi: ((name: "Times New Roman", covers: "latin-in-cjk"), "NSimSun"), + HeiTi: ((name: "Arial", covers: "latin-in-cjk"), "SimHei"), + KaiTi: ((name: "Times New Roman", covers: "latin-in-cjk"), "KaiTi"), + FangSong: ((name: "Times New Roman", covers: "latin-in-cjk"), "FangSong"), + Mono: ((name: "DejaVu Sans Mono", covers: "latin-in-cjk"), "SimHei"), + Math: ("New Computer Modern Math", "KaiTi"), +) + +#let ( + ..config, + /// entry options + twoside, + use-fonts, + /// layouts + meta, + doc, + front-matter, + main-matter, + back-matter, + /// pages + fonts-display, + cover, + preface, + outline-wrapper, + notation, + master-list, + figure-list, + table-list, + equation-list, + bilingual-bibliography, +) = define-config( + info: ( + title: "标题", + subtitle: "副标题", + authors: ( + (name: "作者", email: "mail@example.com"), + ), + version: "0.0.0", + date: datetime.today(), + ), + fonts: font-family, + twoside: false, + bibliography: read("refs.bib"), +) + +/// Document Configuration +#show: it => meta(it) + +/// Font Display Page +#fonts-display() + +/// Cover Page +#cover() + +/// After Cover Layout, basical layout for Front Matter, Main Matter and Back Matter +#show: doc + +/// ------------ /// +/// Front Matter /// +/// ------------ /// + +#show: front-matter + +// Preface Page +#preface[] + +// Outline Page +#outline-wrapper() + +/// ----------- /// +/// Main Matter /// +/// ----------- /// + +#show: main-matter + += 第一部分 + +== 第1.1章 + +=== 第1.1.1节 + +/// ----------- /// +/// Back Matter /// +/// ----------- /// + +#show: back-matter + +#notation[ + / D#sub[m]: 预混通道外径 (mm) +] + +#figure-list() + +#table-list() + +#equation-list() + +#bilingual-bibliography() diff --git a/packages/preview/simple-handout/0.2.0/template/refs.bib b/packages/preview/simple-handout/0.2.0/template/refs.bib new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/preview/simple-handout/0.2.0/thumbnail.png b/packages/preview/simple-handout/0.2.0/thumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..f6e571e979240f8c184267cef4c3a0ce540ece07 GIT binary patch literal 91199 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

~Ez+l*}l6dCHVt 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 b(GwKg@|)kSEF2~O{Ce5Sr6+#z`>p>4OS0PR literal 0 HcmV?d00001 diff --git a/packages/preview/simple-handout/0.2.0/typst.toml b/packages/preview/simple-handout/0.2.0/typst.toml new file mode 100644 index 0000000000..97e5359921 --- /dev/null +++ b/packages/preview/simple-handout/0.2.0/typst.toml @@ -0,0 +1,17 @@ +[package] +name = "simple-handout" +version = "0.2.0" +entrypoint = "src/lib.typ" +authors = ["chillcicada"] +license = "MIT" +description = "A simple handout template for Chinese typesetting based on TnTT." +repository = "https://github.com/chillcicada/simple-handout-template" +keywords = ["book", "handout", "template", "cjk", "tntt"] +categories = ["book"] +exclude = [".*", "example"] +compiler = "0.14.0" + +[template] +path = "template" +entrypoint = "main.typ" +thumbnail = "thumbnail.png" From cf0dfeeaf16376b5dfba01678d54c76c190b4cf5 Mon Sep 17 00:00:00 2001 From: chillcicada <116548943+chillcicada@users.noreply.github.com> Date: Mon, 16 Mar 2026 12:10:43 +0800 Subject: [PATCH 2/2] chore: fix example link in README.md Updated the example link in README to point to the GitHub repository. --- packages/preview/simple-handout/0.2.0/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/preview/simple-handout/0.2.0/README.md b/packages/preview/simple-handout/0.2.0/README.md index 924f914ac6..866d705926 100644 --- a/packages/preview/simple-handout/0.2.0/README.md +++ b/packages/preview/simple-handout/0.2.0/README.md @@ -4,7 +4,7 @@ This is a simple typst handout template for Chinese typesetting based on [TnTT]( ## Example -See the [`example`](example/README.md) folder for an example handout, which is made for the course 'Polymer Molding and Processing' at Tsinghua University. +See the [`example`](https://github.com/chillcicada/simple-handout-template/tree/webapp/example) folder for an example handout, which is made for the course 'Polymer Molding and Processing' at Tsinghua University. ## LICENSE