From 5b7d85c03c29cc60fd8d08a50789e2eb4858c98b Mon Sep 17 00:00:00 2001 From: huangjj27 Date: Sat, 14 Mar 2026 05:16:43 +0000 Subject: [PATCH] chore(release):prepare for modern-sysu-thesis:0.4.1 --- .../preview/modern-sysu-thesis/0.4.1/LICENSE | 21 ++ .../modern-sysu-thesis/0.4.1/README.md | 86 +++++ .../0.4.1/assets/vi/sysu_logo.svg | 1 + .../0.4.1/assets/vi/sysu_name.gif | Bin 0 -> 1951 bytes .../0.4.1/layouts/appendix.typ | 24 ++ .../modern-sysu-thesis/0.4.1/layouts/doc.typ | 34 ++ .../0.4.1/layouts/mainmatter.typ | 173 ++++++++++ .../0.4.1/layouts/preface.typ | 18 ++ .../preview/modern-sysu-thesis/0.4.1/lib.typ | 7 + .../0.4.1/pages/fonts-display-page.typ | 54 ++++ .../0.4.1/pages/list-of-figures.typ | 74 +++++ .../0.4.1/pages/list-of-tables.typ | 74 +++++ .../0.4.1/pages/notation.typ | 35 ++ .../specifications/bachelor/abstract-en.typ | 44 +++ .../specifications/bachelor/abstract.typ | 45 +++ .../bachelor/acknowledgement.typ | 36 +++ .../specifications/bachelor/appendix.typ | 42 +++ .../0.4.1/specifications/bachelor/cover.typ | 146 +++++++++ .../specifications/bachelor/declaration.typ | 25 ++ .../0.4.1/specifications/bachelor/lib.typ | 282 ++++++++++++++++ .../specifications/bachelor/titlepage.typ | 128 ++++++++ .../postgraduate/abstract-en.typ | 49 +++ .../specifications/postgraduate/abstract.typ | 46 +++ .../postgraduate/acknowledgement.typ | 36 +++ .../specifications/postgraduate/appendix.typ | 53 +++ .../specifications/postgraduate/contents.typ | 47 +++ .../specifications/postgraduate/cover.typ | 155 +++++++++ .../postgraduate/declaration.typ | 25 ++ .../0.4.1/specifications/postgraduate/lib.typ | 301 ++++++++++++++++++ .../specifications/postgraduate/titlepage.typ | 128 ++++++++ .../0.4.1/template/images/sysu_logo.svg | 1 + .../modern-sysu-thesis/0.4.1/template/ref.bib | 94 ++++++ .../0.4.1/template/thesis.typ | 182 +++++++++++ .../modern-sysu-thesis/0.4.1/thumbnail.png | Bin 0 -> 212704 bytes .../modern-sysu-thesis/0.4.1/typst.toml | 19 ++ .../0.4.1/utils/bilingual-bibliography.typ | 159 +++++++++ .../0.4.1/utils/custom-heading.typ | 65 ++++ .../0.4.1/utils/custom-numbering.typ | 30 ++ .../0.4.1/utils/custom-tablex.typ | 1 + .../0.4.1/utils/datetime-display.typ | 9 + .../0.4.1/utils/double-underline.typ | 11 + .../modern-sysu-thesis/0.4.1/utils/hline.typ | 4 + .../0.4.1/utils/invisible-heading.typ | 5 + .../0.4.1/utils/justify-text.typ | 9 + .../modern-sysu-thesis/0.4.1/utils/style.typ | 87 +++++ .../0.4.1/utils/unpairs.typ | 8 + 46 files changed, 2873 insertions(+) create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/LICENSE create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/README.md create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/assets/vi/sysu_logo.svg create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/assets/vi/sysu_name.gif create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/layouts/appendix.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/layouts/doc.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/layouts/mainmatter.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/layouts/preface.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/lib.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/pages/fonts-display-page.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/pages/list-of-figures.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/pages/list-of-tables.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/pages/notation.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/specifications/bachelor/abstract-en.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/specifications/bachelor/abstract.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/specifications/bachelor/acknowledgement.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/specifications/bachelor/appendix.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/specifications/bachelor/cover.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/specifications/bachelor/declaration.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/specifications/bachelor/lib.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/specifications/bachelor/titlepage.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/abstract-en.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/abstract.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/acknowledgement.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/appendix.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/contents.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/cover.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/declaration.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/lib.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/titlepage.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/template/images/sysu_logo.svg create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/template/ref.bib create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/template/thesis.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/thumbnail.png create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/typst.toml create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/utils/bilingual-bibliography.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/utils/custom-heading.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/utils/custom-numbering.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/utils/custom-tablex.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/utils/datetime-display.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/utils/double-underline.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/utils/hline.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/utils/invisible-heading.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/utils/justify-text.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/utils/style.typ create mode 100644 packages/preview/modern-sysu-thesis/0.4.1/utils/unpairs.typ diff --git a/packages/preview/modern-sysu-thesis/0.4.1/LICENSE b/packages/preview/modern-sysu-thesis/0.4.1/LICENSE new file mode 100644 index 0000000000..97048655fb --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 SYSU Typst Thesis Template Authors + +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/modern-sysu-thesis/0.4.1/README.md b/packages/preview/modern-sysu-thesis/0.4.1/README.md new file mode 100644 index 0000000000..216ba7527a --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/README.md @@ -0,0 +1,86 @@ +# 基于 Typst 的中山大学学位论文模板 + +[![GitHub stars](https://img.shields.io/github/stars/sysu/better-thesis.svg?style=social&label=Star&maxAge=2592000)](https://github.com/sysu/better-thesis) + +**[点击此处注册 typst.app 并创建你的论文工程](https://typst.app/app?template=modern-sysu-thesis&version=0.4.0)** + +本科生模板已经符合学位论文格式要求(~~[#6](https://gitlab.com/sysu-gitlab/thesis-template/better-thesis/-/issues/6)~~),欢迎同学/校友们[贡献代码](https://github.com/sysu/better-thesis/pulls)/反馈问题([GitHub issue][issues])! + +模板交流 QQ 群:[797942860](https://jq.qq.com/?_wv=1027&k=m58va1kd) + + +## 参考规范 +- 本科生论文模板参考 [中山大学本科生毕业论文(设计)写作与印制规范 2020年发](https://spa.sysu.edu.cn/zh-hans/article/1744) +- 研究生论文模板参考 [中山大学研究生学位论文格式要求](https://graduate.sysu.edu.cn/sites/graduate.prod.dpcms4.sysu.edu.cn/files/2019-04/%E4%B8%AD%E5%B1%B1%E5%A4%A7%E5%AD%A6%E7%A0%94%E7%A9%B6%E7%94%9F%E5%AD%A6%E4%BD%8D%E8%AE%BA%E6%96%87%E6%A0%BC%E5%BC%8F%E8%A6%81%E6%B1%82.pdf) + +## 使用方法 + +### typst.app +经过近一月紧张的迭代重构,本模板已经[发布在typst-app.universe](https://typst.app/universe/package/modern-sysu-thesis)上,[点击此处直接创建你的论文工程](https://typst.app/app?template=modern-sysu-thesis&version=0.4.0),并直接开始编写你的论文! + + + +### Windows 用户 + +1. [下载本仓库][download],或者使用 `git clone https://github.com/sysu/better-thesis` 命令克隆本仓库。 +2. 右键 `install_typst.ps1` 文件,选择“用 Powershell 运行”,等待 Typst 安装完成。 +3. 根据 [Typst 文档](https://typst.app/docs/),参考 [项目结构](#项目结构) 中的说明,按照你的需要修改论文的各个部分。 +4. 双击运行 `compile.bat`,即可生成 `thesis.pdf` 文件。 + +### Linux/macOS 用户 + +1. [下载本仓库][download],或者使用 `git clone https://github.com/sysu/better-thesis` 命令克隆本仓库。 +2. 使用命令行安装 Rust 工具链以及 Typst: + +```bash +# 安装 Rust 环境并激活,之前安装过则不需要执行下面这两行 +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y +source $HOME/.cargo/env + +# 安装 Typst CLI +cargo install typst-cli + +# 访问缓慢的话,执行以下命令设置清华镜像源,并从镜像站安装 +cat << EOF > $HOME/.cargo/config +[source.crates-io] +replace-with = "tuna" + +[source.tuna] +registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git" +EOF +cargo install typst-cli +``` + +3. 根据 [Typst 文档](https://typst.app/docs/),参考 [项目结构](#项目结构) 中的说明,按照你的需要修改论文的各个部分。 +4. 执行 `make` 命令,即可生成 `thesis.pdf` 文件。 + +## 项目结构 +详见 `template\thesis.typ` + +## FAQ +### 为什么 XXX 的功能不能用/不符合预期? +1. 先参考 [Typst 中文支持相关问题](https://typst-doc-cn.github.io/docs/chinese/),以及 [Typst 官方文档](https://typst.app/docs/) 与 [tpyst.app/universe 仓库](https://typst.app/universe),了解相关问题进展或解决方案 +2. 如果在以上资料中找不到关联资料,可以参考是否在的 [issue 列表][issues] 中能找到相关问题与进展。 +3. 如果依然没有线索,欢迎反馈问题([GitHub issue][issues]) + +### 为什么学校学位论文已经有了 [LaTeX 模板](https://github.com/SYSU-SCC/sysu-thesis),还有 Typst 模板? +- 前述 LaTeX 模板目前仅有计算机学院官方指定使用,其他学院并没有统一指定 +- 考虑到 LaTeX 对于大部分非计算机/理工科的学生入门成本比较高,因此有必要提供一种更加简洁清晰并且方便的论文模板,包括: + - 开箱即用: + - 如[前文所述](#typstapp),本模板提供了在线直接编辑/保存/备份方案 + - 本地使用模板时,模板组件可以简单地通过 `typst` 命令自动管理安装 + - 语法简洁:typst 是与 markdown 类似的标记性语言,可以通过标记的方式来轻松控制语法(如`= 标题`、`*粗体*`、`_斜体_` `@引用`、 数学公式`$E = m c^2$`) + +### 为什么有两份 Typst 模板([sysu-thesis-typst] 和 modern-sysu-thesis)? +后者是在前者的基础上,同时参考 [modern-nju-thesis] ,改造后适配了 [typst.app/universe](https://typst.app/universe)。以及,放到 [@sysu](https://github.com/sysu) 组织下提高了曝光度。 + +## 致谢 +- 感谢 [sysu-thesis-typst] 提供了中山大学的页面样式与初版源码 +- 感谢 [modern-nju-thesis] 提供了一个更好的代码组织架构 +- 感谢中山大学 Typst 模板交流群([797942860](https://jq.qq.com/?_wv=1027&k=m58va1kd))、Typst 中文交流群(793548390)群友的帮助交流。 +- 感谢 @debeetle 完善了硕博士论文模板([#26](https://github.com/sysu/better-thesis/pull/26)) + +[issues]: https://github.com/sysu/better-thesis/issues +[download]: https://github.com/sysu/better-thesis +[sysu-thesis-typst]: https://github.com/howardlau1999/sysu-thesis-typst +[modern-nju-thesis]: https://typst.app/universe/package/modern-nju-thesis diff --git a/packages/preview/modern-sysu-thesis/0.4.1/assets/vi/sysu_logo.svg b/packages/preview/modern-sysu-thesis/0.4.1/assets/vi/sysu_logo.svg new file mode 100644 index 0000000000..1c14f8ec98 --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/assets/vi/sysu_logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/preview/modern-sysu-thesis/0.4.1/assets/vi/sysu_name.gif b/packages/preview/modern-sysu-thesis/0.4.1/assets/vi/sysu_name.gif new file mode 100644 index 0000000000000000000000000000000000000000..582b100f36941e6108111ec937b4227b2a259387 GIT binary patch literal 1951 zcmait`#;l-0>{7KZFZrJtq5nzot5Jj=V*C4vkT__pc19Y+-fu$=8|V@u8+;7Ly^mP z5@ocos8nAihoroEN`&HZX-mnaSEPFFygL8D`TX$y>HU6vJeck-`y=*&Y@i?bIkj5d z(%A-tSZq6Cryu2F&Y{{T`M9PX_WbQca9$jzJdpPzt+T52v~$JNDNYv(N8a&C1TY1sw_mMB)>XKy9NczuC0@1p~MJmX0y2dYDSG1S(Yx8_jIP$ zYGt&_@A9;8IBhd*EiMBmhxfuuX z2D+mNj~l}+hb=6UBM2sfY&rOT9_mEQUJ~V?6wLGh2%pV9Ua7(3dAmId8u=^ub*!yh zV?wjO`dFdBKgWWGWI2CB4>$ZxU_N4D4(rR_yVuZP(Lq=rLwk?pgqlJW3fM8=lJdD7z7+(aOr#FrE6jbh!!KkKPMq~>r)F!D;G~z1vIvsW}dyfE^vd9PPt9PJ%J;SUAT5JKBD0_#Z`eBjP)c1@=DXg!@e62Nw~Ax;GQ%7oBnQcbfH9tAik^s7ROtD5iw8 z`-?rThyy)zc{@eZczwPxd%A+rM~rf1Yv&N{<1i1Uz|uK~!6?%UOeYAF0iNNNVRYrq8=mR3Z~LoMt zzsy+az#1}g0ah+61x|F2MFcL1K4!@&9d?R zd|N)${YR6uK$Zr*2ys@ok2Q&#;=%<314#jVeumO?SBT)%=qoB zris4Ketk|!H*zEg1QiCm*DhPBe87WR1>iH~ZnILqa!kRo-DmClBAAJ1sRoU>oLHk{ zuEt=RQ)wy1>977JR=4N241Z)ax|QMfSK?sy_oA}qs7NFKeNV{+PPR|M=6%{KINS(+ z#Sv|}Ox{9NZ_QqzLXSOok8=*y1Um{|%{ literal 0 HcmV?d00001 diff --git a/packages/preview/modern-sysu-thesis/0.4.1/layouts/appendix.typ b/packages/preview/modern-sysu-thesis/0.4.1/layouts/appendix.typ new file mode 100644 index 0000000000..ee33f6086b --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/layouts/appendix.typ @@ -0,0 +1,24 @@ +#import "@preview/i-figured:0.2.4" +#import "../utils/custom-numbering.typ": custom-numbering + +// 后记,重置 heading 计数器 +#let appendix( + numbering: custom-numbering.with(first-level: "", depth: 4, "1.1 "), + // figure 计数 + show-figure: i-figured.show-figure.with(numbering: "1.1"), + // equation 计数 + show-equation: i-figured.show-equation.with(numbering: "(1.1)"), + // 重置计数 + reset-counter: false, + it, +) = { + set heading(numbering: numbering) + if reset-counter { + counter(heading).update(0) + } + // 设置 figure 的编号 + show figure: show-figure + // 设置 equation 的编号 + show math.equation.where(block: true): show-equation + it +} \ No newline at end of file diff --git a/packages/preview/modern-sysu-thesis/0.4.1/layouts/doc.typ b/packages/preview/modern-sysu-thesis/0.4.1/layouts/doc.typ new file mode 100644 index 0000000000..011cf8de05 --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/layouts/doc.typ @@ -0,0 +1,34 @@ +// 文稿设置,可以进行一些像页面边距这类的全局设置 +#let doc( + // documentclass 传入参数 + info: (:), + // 其他参数 + fallback: false, // 字体缺失时使用 fallback,不显示豆腐块 + lang: "zh", + margin: (x: 89pt), + it, +) = { + // 1. 默认参数 + info = ( + title: ("基于 Typst 的", "中山大学学位论文模板"), + author: "张三", + ) + info + + // 2. 对参数进行处理 + // 2.1 如果是字符串,则使用换行符将标题分隔为列表 + if type(info.title) == str { + info.title = info.title.split("\n") + } + + // 3. 基本的样式设置 + set text(fallback: fallback, lang: lang) + set page(margin: margin) + + // 4. PDF 元信息 + set document( + title: (("",)+ info.title).sum(), + author: info.author, + ) + + it +} diff --git a/packages/preview/modern-sysu-thesis/0.4.1/layouts/mainmatter.typ b/packages/preview/modern-sysu-thesis/0.4.1/layouts/mainmatter.typ new file mode 100644 index 0000000000..b1454bb910 --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/layouts/mainmatter.typ @@ -0,0 +1,173 @@ +#import "@preview/anti-matter:0.0.2": anti-front-end +#import "@preview/i-figured:0.2.4" +#import "../utils/style.typ": 字号, 字体 +#import "../utils/custom-numbering.typ": custom-numbering +#import "../utils/custom-heading.typ": heading-display, active-heading, current-heading +#import "../utils/unpairs.typ": unpairs + +#let mainmatter( + // documentclass 传入参数 + twoside: false, + fonts: (:), + // 其他参数 + leading: 1.5 * 15.6pt - 0.7em, + spacing: 1.5 * 15.6pt - 0.7em, + justify: true, + first-line-indent: (amount: 2em, all: true), + numbering: custom-numbering.with(first-level: "第一章 ", depth: 4, "1.1 "), + // 正文字体与字号参数 + text-args: auto, + // 标题字体与字号 + heading-font: (字体.黑体, 字体.黑体, 字体.宋体), + heading-size: (字号.三号, 字号.四号, 字号.小四), + heading-weight: ("regular", "regular", "bold"), + heading-above: (2 * 15.6pt - 0.7em, 2 * 15.6pt - 0.7em), + heading-below: (2 * 15.6pt - 0.7em, 1.5 * 15.6pt - 0.7em), + heading-pagebreak: (true, false), + heading-align: (center, left, auto), + // 页眉 + header-render: auto, + header-vspace: 0em, + display-header: false, + skip-on-first-level: true, + stroke-width: 0.5pt, + reset-footnote: true, + // caption 的 separator + separator: " ", + // caption 样式 + caption-style: strong, + caption-size: 字号.五号, + // figure 计数 + show-figure: i-figured.show-figure, + // equation 计数 + show-equation: i-figured.show-equation, + ..args, + it, +) = { + // 0. 标志前言结束 + anti-front-end() + + // 1. 默认参数 + fonts = 字体 + fonts + if (text-args == auto) { + text-args = (font: fonts.宋体, size: 字号.小四) + } + // 1.1 字体与字号 + if (heading-font == auto) { + heading-font = (fonts.黑体,) + } + // 1.2 处理 heading- 开头的其他参数 + let heading-text-args-lists = args.named().pairs() + .filter((pair) => pair.at(0).starts-with("heading-")) + .map((pair) => (pair.at(0).slice("heading-".len()), pair.at(1))) + + // 2. 辅助函数 + let array-at(arr, pos) = { + arr.at(calc.min(pos, arr.len()) - 1) + } + + // 3. 设置基本样式 + // 3.1 文本和段落样式 + set text(..text-args) + set par( + leading: leading, + justify: justify, + first-line-indent: first-line-indent + ) + show par: set block(spacing: spacing) + // 3.2 脚注样式 + show footnote.entry: set text(font: fonts.宋体, size: 字号.五号) + // 3.3 设置 figure 的编号 + show heading: i-figured.reset-counters + show figure: show-figure + // 3.4 设置 equation 的编号和假段落首行缩进 + show math.equation.where(block: true): show-equation + // 3.5 表格表头置顶 + 不用冒号用空格分割 + 样式 + show figure.where( + kind: table + ): set figure.caption(position: top) + set figure.caption(separator: separator) + show figure.caption: caption-style + show figure.caption: set text(font: fonts.宋体, size: 字号.五号) + // 3.6 优化列表显示 + // 术语列表 terms 不应该缩进 + show terms: set par(first-line-indent: 0pt) + + // 4. 处理标题 + // 4.1 设置标题的 Numbering + set heading(numbering: numbering) + // 4.2 设置字体字号并加入假段落模拟首行缩进 + show heading: it => { + set text( + font: array-at(heading-font, it.level), + size: array-at(heading-size, it.level), + weight: array-at(heading-weight, it.level), + ..unpairs(heading-text-args-lists + .map((pair) => (pair.at(0), array-at(pair.at(1), it.level)))) + ) + set block( + above: array-at(heading-above, it.level), + below: array-at(heading-below, it.level), + ) + it + } + // 4.3 标题居中与自动换页 + show heading: it => { + if (array-at(heading-pagebreak, it.level)) { + // 如果打上了 no-auto-pagebreak 标签,则不自动换页 + if ("label" not in it.fields() or str(it.label) != "no-auto-pagebreak") { + pagebreak(weak: true) + } + } + if (array-at(heading-align, it.level) != auto) { + set align(array-at(heading-align, it.level)) + it + } else { + pad(left: 2em, it) + } + } + + // 5. 处理页眉 + set page(..(if display-header { + ( + header: { + // 重置 footnote 计数器 + if reset-footnote { + counter(footnote).update(0) + } + locate(loc => { + // 5.1 获取当前页面的一级标题 + let cur-heading = current-heading(level: 1, loc) + // 5.2 如果当前页面没有一级标题,则渲染页眉 + if not skip-on-first-level or cur-heading == none { + if header-render == auto { + // 一级标题和二级标题 + let first-level-heading = if not twoside or calc.rem(loc.page(), 2) == 0 { heading-display(active-heading(level: 1, loc)) } else { "" } + let second-level-heading = if not twoside or calc.rem(loc.page(), 2) == 2 { heading-display(active-heading(level: 2, prev: false, loc)) } else { "" } + set text(font: fonts.宋体, size: 字号.五号) + stack( + first-level-heading + h(1fr) + second-level-heading, + v(0.25em), + if first-level-heading != "" or second-level-heading != "" { line(length: 100%, stroke: stroke-width + black) }, + ) + } else { + header-render(loc) + } + v(header-vspace) + } + }) + } + ) + } else { + ( + header: { + // 重置 footnote 计数器 + if reset-footnote { + counter(footnote).update(0) + } + } + ) + })) + + it +} diff --git a/packages/preview/modern-sysu-thesis/0.4.1/layouts/preface.typ b/packages/preview/modern-sysu-thesis/0.4.1/layouts/preface.typ new file mode 100644 index 0000000000..974855e546 --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/layouts/preface.typ @@ -0,0 +1,18 @@ +#import "@preview/anti-matter:0.0.2": anti-matter + +// 前言,重置页面计数器 +#let preface( + // documentclass 传入的参数 + twoside: false, + // 其他参数 + spec: (front: "I", inner: "1", back: "I"), + ..args, + it, +) = { + // 分页 + if (twoside) { + pagebreak() + " " + } + counter(page).update(0) + anti-matter(spec: spec, ..args, it) +} \ No newline at end of file diff --git a/packages/preview/modern-sysu-thesis/0.4.1/lib.typ b/packages/preview/modern-sysu-thesis/0.4.1/lib.typ new file mode 100644 index 0000000000..10f593bc76 --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/lib.typ @@ -0,0 +1,7 @@ +// 中山大学学位论文 Typst 模板 modern-sysu-thesis +// 基于 [南京大学学位论文模板](https://github.com/nju-lug/modern-nju-thesis) 重构中 +// Repo: https://gitlab.com/sysu-gitlab/thesis-template/better-thesis +// https://typst.app/universe/package/modern-sysu-thesis + +#import "/specifications/bachelor/lib.typ" as bachelor +#import "/specifications/postgraduate/lib.typ" as postgraduate diff --git a/packages/preview/modern-sysu-thesis/0.4.1/pages/fonts-display-page.typ b/packages/preview/modern-sysu-thesis/0.4.1/pages/fonts-display-page.typ new file mode 100644 index 0000000000..5b53249f07 --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/pages/fonts-display-page.typ @@ -0,0 +1,54 @@ +#import "../utils/style.typ": 字号, 字体 +#import "../utils/hline.typ": hline + +// 字体显示测试页 +#let fonts-display-page( + twoside: false, + fonts: (:), + size: 字号.小四, + lang: "zh", +) = { + // 1. 默认参数 + fonts = 字体 + fonts + + // 2. 辅助函数 + let display-font(cjk-name, latin-name) = [ + #set text(font: fonts.at(cjk-name)) + + #cjk-name (#latin-name CJK Regular): 落霞与孤鹜齐飞,秋水共长天一色。 + + #cjk-name (#latin-name Latin Regular): The fanfare of birds announces the morning. + + *#cjk-name (#latin-name CJK Bold): 落霞与孤鹜齐飞,秋水共长天一色。* + + *#cjk-name (#latin-name Latin Bold): The fanfare of birds announces the morning.* + ] + + // 3. 正式渲染 + pagebreak(weak: true, to: if twoside { "odd" }) + set text(size: size, lang: lang) + + [ + *Fonts Display Page:* + + #hline() + + #display-font("宋体", "SongTi") + + #hline() + + #display-font("黑体", "HeiTi") + + #hline() + + #display-font("楷体", "KaiTi") + + #hline() + + #display-font("仿宋", "FangSong") + + #hline() + + #display-font("等宽", "Mono") + ] +} \ No newline at end of file diff --git a/packages/preview/modern-sysu-thesis/0.4.1/pages/list-of-figures.typ b/packages/preview/modern-sysu-thesis/0.4.1/pages/list-of-figures.typ new file mode 100644 index 0000000000..2eb17cc42b --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/pages/list-of-figures.typ @@ -0,0 +1,74 @@ +#import "@preview/i-figured:0.2.4" +#import "@preview/outrageous:0.1.0" +#import "../utils/invisible-heading.typ": invisible-heading +#import "../utils/style.typ": 字号, 字体 + +// 表格目录生成 +#let list-of-figures( + // documentclass 传入参数 + twoside: false, + fonts: (:), + // 其他参数 + title: "插图目录", + outlined: false, + title-vspace: 32pt, + title-text-args: auto, + // caption 的 separator + separator: " ", + // 字体与字号 + font: auto, + size: 字号.小四, + // 垂直间距 + vspace: 14pt, + // 是否显示点号 + fill: auto, + ..args, +) = { + // 1. 默认参数 + fonts = 字体 + fonts + if (title-text-args == auto) { + title-text-args = (font: fonts.黑体, size: 字号.三号, weight: "bold") + } + // 字体与字号 + if (font == auto) { + font = fonts.宋体 + } + + // 2. 正式渲染 + pagebreak(weak: true, to: if twoside { "odd" }) + + // 默认显示的字体 + set text(font: font, size: size) + + { + set align(center) + text(..title-text-args, title) + // 标记一个不可见的标题用于目录生成 + invisible-heading(level: 1, outlined: outlined, title) + } + + v(title-vspace) + + show outline.entry: outrageous.show-entry.with( + // 保留 Typst 基础样式 + ..outrageous.presets.typst, + body-transform: (level, it) => { + // 因为好像没找到 separator 的参数,所以这里就手动寻找替换了 + if (it.has("children") and it.children.at(3, default: none) == [#": "]) { + it.children.slice(0, 3).sum() + separator + it.children.slice(4).sum() + } else { + it + } + }, + vspace: (vspace,), + fill: (fill,), + ) + + // 显示目录 + i-figured.outline(target-kind: image, title: none) + + // 手动分页 + if (twoside) { + pagebreak() + " " + } +} diff --git a/packages/preview/modern-sysu-thesis/0.4.1/pages/list-of-tables.typ b/packages/preview/modern-sysu-thesis/0.4.1/pages/list-of-tables.typ new file mode 100644 index 0000000000..949e47f2e9 --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/pages/list-of-tables.typ @@ -0,0 +1,74 @@ +#import "@preview/i-figured:0.1.0" +#import "@preview/outrageous:0.1.0" +#import "../utils/invisible-heading.typ": invisible-heading +#import "../utils/style.typ": 字号, 字体 + +// 表格目录生成 +#let list-of-tables( + // documentclass 传入参数 + twoside: false, + fonts: (:), + // 其他参数 + title: "表格目录", + outlined: false, + title-vspace: 32pt, + title-text-args: auto, + // caption 的 separator + separator: " ", + // 字体与字号 + font: auto, + size: 字号.小四, + // 垂直间距 + vspace: 14pt, + // 是否显示点号 + fill: auto, + ..args, +) = { + // 1. 默认参数 + fonts = 字体 + fonts + if (title-text-args == auto) { + title-text-args = (font: fonts.黑体, size: 字号.三号, weight: "bold") + } + // 字体与字号 + if (font == auto) { + font = fonts.宋体 + } + + // 2. 正式渲染 + pagebreak(weak: true, to: if twoside { "odd" }) + + // 默认显示的字体 + set text(font: font, size: size) + + { + set align(center) + text(..title-text-args, title) + // 标记一个不可见的标题用于目录生成 + invisible-heading(level: 1, outlined: outlined, title) + } + + v(title-vspace) + + show outline.entry: outrageous.show-entry.with( + // 保留 Typst 基础样式 + ..outrageous.presets.typst, + body-transform: (level, it) => { + // 因为好像没找到 separator 的参数,所以这里就手动寻找替换了 + if (it.has("children") and it.children.at(3, default: none) == [#": "]) { + it.children.slice(0, 3).sum() + separator + it.children.slice(4).sum() + } else { + it + } + }, + vspace: (vspace,), + fill: (fill,), + ) + + // 显示目录 + i-figured.outline(target-kind: table, title: none) + + // 手动分页 + if (twoside) { + pagebreak() + " " + } +} diff --git a/packages/preview/modern-sysu-thesis/0.4.1/pages/notation.typ b/packages/preview/modern-sysu-thesis/0.4.1/pages/notation.typ new file mode 100644 index 0000000000..2b8ac40b28 --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/pages/notation.typ @@ -0,0 +1,35 @@ +#let notation( + twoside: false, + title: "符号表", + outlined: true, + width: 350pt, + columns: (60pt, 1fr), + row-gutter: 16pt, + ..args, + body, +) = { + heading( + level: 1, + numbering: none, + outlined: outlined, + title + ) + + align(center, block(width: width, + align(start, grid( + columns: columns, + row-gutter: row-gutter, + ..args, + // 解析 terms 内部结构以渲染到表格里 + ..body.children + .filter(it => it.func() == terms.item) + .map(it => (it.term, it.description)) + .flatten() + )) + )) + + // 手动分页 + if (twoside) { + pagebreak() + " " + } +} \ No newline at end of file diff --git a/packages/preview/modern-sysu-thesis/0.4.1/specifications/bachelor/abstract-en.typ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/bachelor/abstract-en.typ new file mode 100644 index 0000000000..93af98cf6c --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/bachelor/abstract-en.typ @@ -0,0 +1,44 @@ +// 利用 state 捕获摘要参数,并通过 context 传递给渲染函数 +#import "/utils/style.typ": 字号, 字体 + +#let abstract-en-keywords = state("keywords-en", ( + "Sun Yat-sen University", + "thesis", + "specification", +)) +#let abstract-en-content = state("abstract-en", [ +英文摘要及关键词内容应与中文摘要及关键词内容相同。中英文摘要及其关键词各置一页内。 +The English abstract and its keywords should be the same as the Chinese one. +Both Chinese and English should be in seperated pages. +]) +#let abstract-en( + keywords: (), + body, +) = { + context abstract-en-keywords.update(keywords) + context abstract-en-content.update(body) +} + +// 英文摘要页 +#let abstract-en-page() = { + // 英文摘要内容 Times New Roman小四号 + set text(font: 字体.宋体, size: 字号.小四) + + // 英文摘要标题 Times New Roman加粗三号全部大写 + show heading.where(level: 1): set text(font: 字体.宋体, size: 字号.三号, weight: "bold") + + // 摘要标题不编号 + show heading.where(level: 1): set heading(numbering: none) + + [ + = ABSTRACT + + #context abstract-en-content.final() + + #v(1em) + + // 摘要正文下方另起一行顶格打印“关键词”款项,后加冒号,多个关键词以逗号分隔。 + // (标题“Keywords”加粗) + *Keywords:* #context abstract-en-keywords.final().join(", ") + ] +} diff --git a/packages/preview/modern-sysu-thesis/0.4.1/specifications/bachelor/abstract.typ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/bachelor/abstract.typ new file mode 100644 index 0000000000..c2caaad3a7 --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/bachelor/abstract.typ @@ -0,0 +1,45 @@ +// 利用 state 捕获摘要参数,并通过 context 传递给渲染函数 +#import "/utils/style.typ": 字号, 字体 + +#let abstract-keywords = state("keywords", ("中山大学", "论文", "学位论文", "规范")) +#let abstract-content = state("abstract", [ +摘要应概括论文的主要信息,应具有独立性和自含性,即不阅读论文的全文,就能获得必要的信息。 +摘要内容一般应包括研究目的、内容、方法、成果和结论,要突出论文的创造性成果或新见解,不要 +与绪论相混淆。语言力求精练、准确,以300-500字为宜。关键词是供检索用的主题词条,应体现论 +文特色,具有语义性,在论文中有明确的出处,并应尽量采用《汉语主题词表》或各专业主题词表提 +供的规范词。关键词与摘要应在同一页,在摘要的下方另起一行注明,一般列3-5个,按词条的外延 +层次排列(外延大的排在前面)。 +]) +#let abstract( + keywords: (), + body, +) = { + context abstract-keywords.update(keywords) + context abstract-content.update(body) +} + +// 中文摘要页 +#let abstract-page() = { + // 中文摘要内容 宋体小四号 + set text(font: 字体.宋体, size: 字号.小四) + + // 中文摘要标题 黑体三号居中 + show heading.where(level: 1): set text(font: 字体.黑体, size: 字号.三号) + + // 摘要标题不编号 + show heading.where(level: 1): set heading(numbering: none) + + [ + = 摘要 + + #set par(first-line-indent: (amount: 2em, all: true)) + #context abstract-content.final() + + #v(1em) + + // 摘要正文下方另起一行顶格打印“关键词”款项,后加冒号,多个关键词以逗号分隔。 + // (标题“关键词”加粗) + #set par(first-line-indent: 0em) + *关键词:*#context abstract-keywords.final().join(",") + ] +} diff --git a/packages/preview/modern-sysu-thesis/0.4.1/specifications/bachelor/acknowledgement.typ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/bachelor/acknowledgement.typ new file mode 100644 index 0000000000..0c67716d22 --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/bachelor/acknowledgement.typ @@ -0,0 +1,36 @@ +// 利用 state 捕获摘要参数,并通过 context 传递给渲染函数 +#import "/utils/style.typ": 字号, 字体 + +// 致谢内容 +#let acknowledgement-content = state("acknowledgement", [ +致谢应以简短的文字对课题研究与论文撰写过程中曾直接给予帮助的人员(例如指导教师、答疑教师 +及其他人员)表达自己的谢意,这不仅是一种礼貌,也是对他人劳动的尊重,是治学者应当遵循的学 +术规范。内容限一页。 +]) + +#let acknowledgement( + body +) = { + context acknowledgement-content.update(body) +} + +#let acknowledgement-page() = { + // 致谢、附录内容 宋体小四号 + set text(font: 字体.宋体, size: 字号.小四) + + // 致谢、附录标题 黑体三号居中 + show heading.where(level: 1): set text(font: 字体.黑体, size: 字号.三号) + + // 致谢标题不编号 + show heading.where(level: 1): set heading(numbering: none) + + [ + = 致谢 + + #set par(first-line-indent: (amount: 2em, all: true)) + #context acknowledgement-content.final() + + #v(1em) + + ] +} diff --git a/packages/preview/modern-sysu-thesis/0.4.1/specifications/bachelor/appendix.typ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/bachelor/appendix.typ new file mode 100644 index 0000000000..9c0ec0786a --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/bachelor/appendix.typ @@ -0,0 +1,42 @@ +// 利用 state 捕获摘要参数,并通过 context 传递给渲染函数 +#import "/utils/style.typ": 字号, 字体 + +#import "@preview/i-figured:0.2.4" + +#let appendix-content = state("appendix", [ += 附录要求 +对于一些不宜放在正文中的重要支撑材料,可编入毕业论文的附录中,包括某些重要的原始数据、详细数学推导、程序全文及其说明、复杂的图表、设计图纸等一系列需要补充提供的说明材料。如果毕业论文中引用的实例、数据资料,实验结果等符号较多时,为了节约篇幅,便于读者查阅,可以编写一个符号说明,注明符号代表的意义。附录的篇幅不宜太多,一般不超过正文。此项不是必需项,空缺时可以省略。 +]) + +#let appendix( + body +) = { + context appendix-content.update(body) +} + +#let appendix-part() = { + // 致谢、附录内容 宋体小四号 + set text(font: 字体.宋体, size: 字号.小四) + + // 附录标题中不需要分隔中英文 + show heading: set text(cjk-latin-spacing: none) + + // 致谢、附录标题 黑体三号居中 + show heading.where(level: 1): set text(font: 字体.黑体, size: 字号.三号) + + // 目录仅展示附录章标题 + // 论文附录依次用大写字母“附录A、附录B、附录C……”表示,附录内的分级序号可采用“附A1、 + // 附A1.1、附A1.1.1”等表示,图、表、公式均依此类推为“图A1、表A1、式A1”等。 + show heading.where(level: 1): set heading(numbering: "附录A", outlined: true) + show heading.where(level: 2): set heading(numbering: "附A1", outlined: false) + show heading.where(level: 3): set heading(numbering: "附A1.1", outlined: false) + show heading.where(level: 4): set heading(numbering: "附A1.1.1", outlined: false) + + show figure: i-figured.show-figure.with(numbering: "A.1") + show math.equation: i-figured.show-equation.with(numbering: "(A.1)") + + // 重置 heading 计数 + counter(heading).update(0) + + context appendix-content.final() +} diff --git a/packages/preview/modern-sysu-thesis/0.4.1/specifications/bachelor/cover.typ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/bachelor/cover.typ new file mode 100644 index 0000000000..dea4c9cd5f --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/bachelor/cover.typ @@ -0,0 +1,146 @@ +#import "/utils/datetime-display.typ": datetime-display +#import "/utils/style.typ": 字号, 字体, sysucolor + +// 封面 +#let cover( + info: (:), + + // 其他参数 + stoke-width: 0.5pt, + min-title-lines: 2, + info-inset: (x: 0pt, bottom: 1pt), + info-key-width: 72pt, + info-key-font: "黑体", + info-value-font: "宋体", + column-gutter: -3pt, + row-gutter: 11.5pt, + bold-info-keys: ("title",), + bold-level: "bold", +) = { + + assert(type(info.title) == array) + assert(type(info.author) == dictionary) + + info.title = info.title + range(min-title-lines - info.title.len()).map((it) => " ") + if type(info.submit-date) == datetime { + info.submit-date = datetime-display(info.submit-date) + } + + // 内置辅助函数 + let info-key( + font: 字体.at(info-key-font, default: "黑体"), + size: 字号.小三, + body, + ) = { + rect( + width: 100%, + inset: info-inset, + stroke: none, + text( + font: font, + size: size, + body, + ), + ) + } + + let info-value( + font: 字体.at(info-value-font, default: "宋体"), + size: 字号.小三, + key, + body, + ) = { + set align(center) + rect( + width: 100%, + inset: info-inset, + stroke: (bottom: stoke-width + black), + text( + font: font, + size: size, + weight: if (key in bold-info-keys) { bold-level } else { "regular" }, + bottom-edge: "descender", + body, + ), + ) + } + + let info-long-value( + font: 字体.at(info-value-font, default: "宋体"), + size: 字号.小三, + key, + body, + ) = { + grid.cell(colspan: 3, + info-value( + font: font, + size: size, + key, + body, + ) + ) + } + + let info-short-value( + font: 字体.at(info-value-font, default: "宋体"), + size: 字号.小三, + key, + body + ) = { + info-value( + font: font, + size: size, + key, + body, + ) + } + + // 正式渲染 + // 居中对齐 + set align(center) + + // 封面校徽 + // 使用校方官方 VI 系统的 logo,来源:https://home3.sysu.edu.cn/sysuvi/index.html + image("/assets/vi/sysu_logo.svg", width: 3cm) + + text(size: 字号.小初, font: 字体.宋体, weight: "bold", fill: sysucolor.green)[本科生毕业论文(设计)] + v(-2em) + line(length: 200%, stroke: 0.12cm + sysucolor.green); + v(-0.8em) + line(length: 200%, stroke: 0.05cm + sysucolor.green); + v(1.5cm) + + // 论文题目 + h(0.7cm) + block(width: 100%, grid( + columns: (25%, 1fr, 75%, 1fr), + column-gutter: column-gutter, + row-gutter: row-gutter, + info-key(size: 字号.二号, "题目:"), + ..info.title.map((s) => + info-long-value(size: 字号.二号, font: 字体.黑体, "title", s) + ).intersperse(info-key(size: 字号.二号, " ")), + )) + v(2.7cm) + + // 学生与指导老师信息 + set align(center + bottom) + block(width: 75%, grid( + columns: (info-key-width, 1fr, info-key-width, 1fr), + column-gutter: column-gutter, + row-gutter: row-gutter, + info-key("姓  名"), + info-long-value("author", info.author.name), + info-key("学  号"), + info-long-value("student-id", info.author.sno), + info-key("院  系"), + info-long-value("department", info.author.department), + info-key("专  业"), + info-long-value("major", info.author.major), + info-key("指导教师"), + info-long-value("supervisor", info.supervisor.join(" ")), + )) + v(2em) + + text(font: 字体.黑体, size: 字号.小四)[#info.submit-date] +} diff --git a/packages/preview/modern-sysu-thesis/0.4.1/specifications/bachelor/declaration.typ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/bachelor/declaration.typ new file mode 100644 index 0000000000..50b33f5639 --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/bachelor/declaration.typ @@ -0,0 +1,25 @@ +#import "/utils/style.typ": 字号, 字体 + +// 学术声明页 +// 参照 [中山大学本科生毕业论文(设计)写作与印制规范 2020年发](https://spa.sysu.edu.cn/zh-hans/article/1744) 电子档的示例设置格式 +#let declaration() = { + align(center, text(font: 字体.黑体, size: 字号.三号)[学术诚信声明]) + + set text(font: 字体.宋体, size: 字号.小四) + + par(justify: true, first-line-indent: 2em)[ + 本人郑重声明:所呈交的毕业论文(设计),是本人在导师的指导下,独立进行研究工作所取得的成果。除文中已经注明引用的内容外,本论文(设计)不包含任何其他个人或集体已经发表或撰写过的作品成果。对本论文(设计)的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本论文(设计)的知识产权归属于培养单位。本人完全意识到本声明的法律结果由本人承担。 + ] + v(2em) + + align(right + top, + box( + grid( + columns: (auto, auto), + gutter: 2em, + "作者签名:", "", + "日" + h(2em) + "期:", h(2.5em) + text("年") + h(2em) + text("月") + h(2em) + text("日") + ) + ) + ) +} diff --git a/packages/preview/modern-sysu-thesis/0.4.1/specifications/bachelor/lib.typ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/bachelor/lib.typ new file mode 100644 index 0000000000..15aced60c9 --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/bachelor/lib.typ @@ -0,0 +1,282 @@ +#import "/specifications/bachelor/cover.typ": cover +#import "/specifications/bachelor/titlepage.typ": titlepage +#import "/specifications/bachelor/declaration.typ": declaration +#import "/specifications/bachelor/abstract.typ": abstract, abstract-page +#import "/specifications/bachelor/abstract-en.typ": abstract-en, abstract-en-page +#import "/specifications/bachelor/appendix.typ": appendix, appendix-part +#import "/specifications/bachelor/acknowledgement.typ": acknowledgement, acknowledgement-page + +#import "/utils/bilingual-bibliography.typ": bilingual-bibliography +#import "/utils/custom-heading.typ": active-heading, heading-display, current-heading +#import "/utils/style.typ": 字号, 字体, sysucolor + +#import "@preview/numbly:0.1.0": numbly +#import "@preview/numblex:0.1.1": circle_numbers +#import "@preview/i-figured:0.2.4" + +// 中山大学本科生毕业论文(设计)写作与印制规范 +// 参考规范: https://spa.sysu.edu.cn/zh-hans/article/1744 +#let doc( + // 毕业论文基本信息 + thesis-info: ( + // 论文标题,将展示在封面、扉页与页眉上 + // 多行标题请使用数组传入 `("thesis title", "with part next line")`,或使用换行符:`"thesis title\nwith part next line"` + title: ("中山大学本科生毕业论文(设计)", "写作与印制规范(2020-)"), + title-en: ("The Specification of Writting and Printing", "for SYSU thesis"), + + // 论文作者信息:学号、姓名、院系、专业、指导老师 + author: ( + sno: "1xxxxxxx", + name: "张三", + grade: "2024", + department: "某学院", + major: "某专业", + ), + + // 指导老师信息,以`("name", "title")` 数组方式传入 + supervisor: ("李四", "教授"), + + // 提交日期,默认为论文 PDF 生成日期 + submit-date: datetime.today(), + ), + + // 参考文献来源 + bibliography: none, + + // 控制页面是否渲染 + pages: ( + // 封面可能由学院统一打印提供,因此可以不渲染 + cover: true, + + // 附录部分为可选。设置为 true 后,会在参考文献部分与致谢部分之间插入附录部分。 + appendix: false, + ), + + // 论文内文各大部分的标题用“一、二…… (或1、2……)”, 次级标题为“(一)、(二)……(或 + // 1.1、2.1……)”,三级标题用“1、2……(或1.1.1、2.1.1……)”,四级标题用“(1)、(2)…… + //(或1.1.1.1、2.1.1.1……)”,不再使用五级以下标题。两类标题不要混编。 + numbering: none, + + // 双面模式,会加入空白页,便于打印 + twoside: false, + + // 论文正文信息,包括绪论、主体、结论 + content +) = { + // 论文信息参数处理。要求必须传递,且符合规格的参数 + assert(type(thesis-info) == dictionary) + assert(type(thesis-info.title) == array or type(thesis-info.title) == str) + assert(type(thesis-info.title-en) == array + or type(thesis-info.title-en) == str + ) + // 论文信息默认参数。函数传入参数会完全覆盖参数值,因此需要提供默认参数补充。 + // 彩蛋:如果论文参数不传递作者参数,那么论文就会被署名论文模板作者 + let default-author = ( + sno: "13xxxx87", + name: "Sunny Huang", + grade: "2013", + department: "数据科学与计算机学院", + major: "软件工程", + ) + thesis-info.author = thesis-info.at("author", default: default-author) + + let default-thesis-info = ( + title: ("中山大学本科生毕业论文(设计)", "写作与印制规范"), + title-en: ("The Specification of Writting and Printing", "for SYSU thesis"), + supervisor: ("李四", "教授"), + submit-date: datetime.today(), + ) + thesis-info = default-thesis-info + thesis-info + + // 论文渲染控制参数处理。设置可选页面的默认设置项 + let default-pages = ( + cover: true, + appendix: false, + ) + pages = default-pages + pages + + // 文档元数据处理 + if type(thesis-info.title) == str { + thesis-info.title = thesis-info.title.split("\n") + } + if type(thesis-info.title-en) == str { + thesis-info.title-en = thesis-info.title-en.split("\n") + } + + set document( + title: thesis-info.title.join(""), + author: thesis-info.author.name, + // keywords: thesis-info.abstract.keywords, + ) + + // 纸张大小:A4。页边距:上边距25 mm,下边距20 mm,左右边距均为30 mm。 + set page(paper: "a4", margin: (top: 25mm, bottom: 20mm, x: 30mm)) + + // 行距:1.5倍行距 + // 行距理解为 word 默认行距(1em * 120%)的1.5倍,由于目前尚未实现 [line-height 模 + // 型],故换算成行间距(leading) + // + // [line-height 模型]: https://github.com/typst/typst/issues/4224 + set par(leading: 1em * 120% * 1.5 - 1em) + + // 目录内容 宋体小四号 + // 正文内容 宋体小四号 + // 致谢、附录内容 宋体小四号 + set text(lang: "zh", font: 字体.宋体, size: 字号.小四) + + // 论文内文各大部分的标题用“一、二…… (或1、2……)”, 次级标题为“(一)、(二)……(或 + // 1.1、2.1……)”,三级标题用“1、2……(或1.1.1、2.1.1……)”,四级标题用“(1)、(2)…… + //(或1.1.1.1、2.1.1.1……)”,不再使用五级以下标题。两类标题不要混编。 + set heading(depth: 4, numbering: if numbering == "一" { + numbly("{1:一}", "({2:一})", "{3}", "({4})") + } else { "1.1.1.1 "}) + show heading: set text(weight: "regular") + + // 章和节标题段前段后各空0.5行 + // 行理解为当前行距,故在 "1.5倍行距" 的基准上再算一半,也即 "0.75倍行距" + show heading.where(level: 1): set block(above: 1em * 120% * 0.75, below: 1em * 120% * 0.75) + show heading.where(level: 2): set block(above: 1em * 120% * 0.75, below: 1em * 120% * 0.75) + + // 目录标题 黑体三号居中 + // 正文各章标题 黑体三号居中 + // 参考文献标题 黑体三号居中 + // 致谢、附录标题 黑体三号居中 + show heading.where(level: 1): set text(font: 字体.黑体, size: 字号.三号) + show heading.where(level: 1): set align(center) + + // 正文各节一级标题 黑体四号左对齐 + show heading.where(level: 2): set text(font: 字体.黑体, size: 字号.四号) + + // 正文各节二级及以下标题 宋体小四号加粗左对齐空两格 + show heading.where(level: 3): set text(font: 字体.宋体, size: 字号.小四, weight: "bold") + show heading.where(level: 4): set text(font: 字体.宋体, size: 字号.小四, weight: "bold") + show heading.where(level: 3): it => pad(left: 2em, it) + show heading.where(level: 4): it => pad(left: 2em, it) + + // 遇到一级标题重置图、表、公式编号计数 + show heading: i-figured.reset-counters + show figure: i-figured.show-figure + show math.equation: i-figured.show-equation + + // 图题、表题 宋体五号 + show figure.caption: set text(font: 字体.宋体, size: 字号.五号) + + // 标题放置在表格上方 + show figure.where(kind: table): set figure.caption(position: top) + + // 脚注、尾注 宋体小五号 + show footnote.entry: set text(font: 字体.宋体, size: 字号.小五) + + // 注释:毕业论文(设计)中有个别名词或情况需要解释时,可加注说明。注释采用脚注或尾注, + // 应根据注释的先后顺序编排序号。注释序号以“①、②”等数字形式标示在正文中被注释词条的 + // 右上角,脚注或尾注内容中的序号应与被注释词条序号保持一致。 + show footnote: set footnote(numbering: circle_numbers) + + // 毕业论文应按以下顺序装订和存档: + // 封面->扉页->学术诚信声明->摘要->目录->正文->参考文献(->附录)->致谢。 + if pages.cover { + cover(info: thesis-info) + pagebreak(weak: true, to: if twoside { "odd" }) + } + + titlepage(info: thesis-info) + pagebreak(weak: true, to: if twoside { "odd" }) + + declaration() + pagebreak(weak: true, to: if twoside { "odd" }) + + // 摘要开始至绪论之前以大写罗马数字(Ⅰ,Ⅱ,Ⅲ…)单独编连续码 + // 页眉与页脚 宋体五号居中 + set page(header: context { + set text(font: 字体.宋体, size: 字号.五号, stroke: sysucolor.green) + set align(center) + let loc = here() + let cur-heading = current-heading(level: 1, loc) + let first-level-heading = heading-display(active-heading(level: 1, loc)) + + if cur-heading != none { + thesis-info.title.join("") + } else if not twoside or calc.rem(loc.page(), 2) == 1 { + first-level-heading + } else { + thesis-info.title.join("") + } + line(length: 200%, stroke: 0.1em + sysucolor.green); + }) + set page(numbering: "I") + counter(page).update(1) + + abstract-page() + pagebreak(weak: true, to: if twoside { "odd" }) + abstract-en-page() + pagebreak(weak: true, to: if twoside { "odd" }) + + outline() + pagebreak(weak: true, to: if twoside { "odd" }) + + // 绪论开始至论文结尾,以阿拉伯数字(1,2,3…)编连续码 + set page(numbering: "1") + counter(page).update(1) + + // 正文段落按照中文惯例缩进两格 + set par(first-line-indent: (amount: 2em, all: true)) + + show heading.where(level: 1): it => { + pagebreak(weak: true) + it + } + + content + pagebreak(weak: true, to: if twoside { "odd" }) + + // 参考文献 + { + // 参考文献内容 宋体五号 + set text(font: 字体.宋体, size: 字号.五号) + bilingual-bibliography(bibliography: bibliography, full: true) + } + pagebreak(weak: true, to: if twoside { "odd" }) + + // 附录 + if pages.appendix { + appendix-part() + pagebreak(weak: true, to: if twoside { "odd" }) + } + + // 致谢 + acknowledgement-page() + pagebreak(weak: true, to: if twoside { "odd" }) +} + +// 以下为校对用测试 preview 页面 +#show: doc.with( + bibliography: bibliography.with("/template/ref.bib"), + pages: ( + appendix: true + ) +) + + +// 正文各部分的标题应简明扼要,不使用标点符号。 += 第某章 +== 节标题 +=== 小节标题 +==== 四级标题 +写一下测试的内容 @chapter1-img,章节标题 @chapter1[("第一章")] + +#figure( + image("/template/images/sysu_logo.svg", width: 20%), + caption: [图片测试], +) + +// #show: appendix += 第一章 +== 节标题 +=== 小节标题 +==== 四级标题 +在附录中引用图片 @appendix-img, 以及附录章节标题 @appendix[#numbering("附录A")] + +#figure( + image("/template/images/sysu_logo.svg", width: 20%), + caption: [图片测试], +) diff --git a/packages/preview/modern-sysu-thesis/0.4.1/specifications/bachelor/titlepage.typ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/bachelor/titlepage.typ new file mode 100644 index 0000000000..87cbf26978 --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/bachelor/titlepage.typ @@ -0,0 +1,128 @@ +#import "/utils/datetime-display.typ": datetime-display +#import "/utils/style.typ": 字号, 字体 + +// 扉页 +// 内容包括论文中英文题目、学生姓名、学号、院系、专业、指导教师(姓名及职称)等信息。 +#let titlepage( + info: (:), + // 其他参数 + stoke-width: 0.5pt, + min-title-lines: 2, + info-inset: (x: 0pt, bottom: 1pt), + info-key-width: 72pt, + info-key-font: "黑体", + info-value-font: "宋体", + column-gutter: -3pt, + row-gutter: 11.5pt, +) = { + assert(type(info.title) == array) + assert(type(info.author) == dictionary) + + info.title = info.title + range(min-title-lines - info.title.len()).map((it) => " ") + if type(info.submit-date) == datetime { + info.submit-date = datetime-display(info.submit-date) + } + + // 内置辅助函数 + let info-key( + font: 字体.at(info-key-font, default: "黑体"), + size: 字号.三号, + body, + ) = { + rect( + width: 100%, + inset: info-inset, + stroke: none, + text( + font: font, + size: size, + body, + ), + ) + } + + let info-value( + font: 字体.at(info-value-font, default: "宋体"), + size: 字号.三号, + key, + body, + ) = { + set align(center) + rect( + width: 100%, + inset: info-inset, + stroke: (bottom: stoke-width + black), + text( + font: font, + size: size, + bottom-edge: "descender", + body, + ), + ) + } + + let info-long-value( + font: 字体.at(info-value-font, default: "宋体"), + size: 字号.三号, + key, + body, + ) = { + grid.cell(colspan: 3, + info-value( + font: font, + size: size, + key, + body, + ) + ) + } + + let info-short-value( + font: 字体.at(info-value-font, default: "宋体"), + size: 字号.三号, + key, + body + ) = { + info-value( + font: font, + size: size, + key, + body, + ) + } + + // 正式渲染 + v(30pt) + + set align(center + horizon) + for part in info.title { + text(size: 字号.二号, font: 字体.黑体, weight: "bold")[ #part ] + linebreak() + } + v(2em) + for part-en in info.title-en { + text(size: 字号.二号, weight: "bold")[ #part-en ] + linebreak() + } + + // 学生与指导老师信息 + set align(center + bottom) + block(width: 75%, grid( + columns: (info-key-width, 1fr, info-key-width, 1fr), + column-gutter: column-gutter, + row-gutter: row-gutter, + info-key("姓  名"), + info-long-value("author", info.author.name), + info-key("学  号"), + info-long-value("student-id", info.author.sno), + info-key("院  系"), + info-long-value("department", info.author.department), + info-key("专  业"), + info-long-value("major", info.author.major), + info-key("指导教师"), + info-long-value("supervisor", info.supervisor.join(" ")), + )) + v(2em) + + text(font: 字体.黑体, size: 字号.四号)[#info.submit-date] +} diff --git a/packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/abstract-en.typ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/abstract-en.typ new file mode 100644 index 0000000000..9c537e6a65 --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/abstract-en.typ @@ -0,0 +1,49 @@ +// 利用 state 捕获摘要参数,并通过 context 传递给渲染函数 +#import "/utils/style.typ": 字体, 字号 +#let contents(..titles) = context titles.named().at(text.lang) + +#let abstract-en-keywords = state("keywords-en", ( + "Sun Yat-sen University", + "thesis", + "specification", +)) +#let abstract-en-content = state("abstract-en", [ + 英文摘要及关键词内容应与中文摘要及关键词内容相同。中英文摘要及其关键词各置一页内。 + The English abstract and its keywords should be the same as the Chinese one. + Both Chinese and English should be in seperated pages. +]) +#let abstract-en( + keywords: (), + body, +) = { + context abstract-en-keywords.update(keywords) + context abstract-en-content.update(body) +} + +// 英文摘要页 +#let abstract-en-page() = { + // 英文摘要内容 Times New Roman小四号 + set text(font: 字体.宋体, size: 字号.小四) + + // 英文摘要标题 Times New Roman加粗三号全部大写 + show heading.where(level: 1): set text( + font: 字体.宋体, + size: 字号.三号, + weight: "bold", + ) + + // 摘要标题不编号 + show heading.where(level: 1): set heading(numbering: none) + + [ + = #contents(zh: "ABSTRACT", en: "Abstract (In English)") + + #context abstract-en-content.final() + + #v(1em) + + // 摘要正文下方另起一行顶格打印“关键词”款项,后加冒号,多个关键词以逗号分隔。 + // (标题“Keywords”加粗) + *Keywords:* #context abstract-en-keywords.final().join(", ") + ] +} diff --git a/packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/abstract.typ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/abstract.typ new file mode 100644 index 0000000000..ff8427137d --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/abstract.typ @@ -0,0 +1,46 @@ +// 利用 state 捕获摘要参数,并通过 context 传递给渲染函数 +#import "/utils/style.typ": 字体, 字号 +#let contents(..titles) = context titles.named().at(text.lang) + +#let abstract-keywords = state("keywords", ( + "中山大学", + "论文", + "学位论文", + "规范", +)) +#let abstract-content = state("abstract", [ + 摘要应概括论文的主要信息,应具有独立性和自含性,即不阅读论文的全文,就能获得必要的信息。摘要内容一般应包括研究目的、内容、方法、成果和结论,要突出论文的创造性成果或新见解,不要与绪论相混淆。语言力求精练、准确,以300-500字为宜。关键词是供检索用的主题词条,应体现论文特色,具有语义性,在论文中有明确的出处,并应尽量采用《汉语主题词表》或各专业主题词表提供的规范词。关键词与摘要应在同一页,在摘要的下方另起一行注明,一般列3-5个,按词条的外延层次排列(外延大的排在前面)。 +]) +#let abstract( + keywords: (), + body, +) = { + context abstract-keywords.update(keywords) + context abstract-content.update(body) +} + +// 中文摘要页 +#let abstract-page() = { + // 中文摘要内容 宋体小四号 + set text(font: 字体.宋体, size: 字号.小四) + + // 中文摘要标题 黑体三号居中 + show heading.where(level: 1): set text(font: 字体.黑体, size: 字号.三号) + + // 摘要标题不编号 + show heading.where(level: 1): set heading(numbering: none) + + [ + = #contents(zh: "摘要", en: "Abstract (In Chinese)") + + #set par(first-line-indent: (amount: 2em, all: true)) + #context abstract-content.final() + + #v(1em) + + // 摘要正文下方另起一行顶格打印“关键词”款项,后加冒号,多个关键词以逗号分隔。 + // (标题“关键词”加粗) + #set par(first-line-indent: 0em) + *关键词:*#context abstract-keywords.final().join(",") + ] +} diff --git a/packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/acknowledgement.typ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/acknowledgement.typ new file mode 100644 index 0000000000..3712cb9cc7 --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/acknowledgement.typ @@ -0,0 +1,36 @@ +// 利用 state 捕获摘要参数,并通过 context 传递给渲染函数 +#import "/utils/style.typ": 字体, 字号 + +#let contents(..titles) = context titles.named().at(text.lang) + +// 致谢内容 +#let acknowledgement-content = state("acknowledgement", [ + 致谢应以简短的文字对课题研究与论文撰写过程中曾直接给予帮助的人员(例如指导教师、答疑教师及其他人员)表达自己的谢意,这不仅是一种礼貌,也是对他人劳动的尊重,是治学者应当遵循的学术规范。内容限一页。 +]) + +#let acknowledgement( + body, +) = { + context acknowledgement-content.update(body) +} + +#let acknowledgement-page() = { + // 致谢、附录内容 宋体小四号 + set text(font: 字体.宋体, size: 字号.小四) + + // 致谢、附录标题 黑体三号居中 + show heading.where(level: 1): set text(font: 字体.黑体, size: 字号.三号) + + // 致谢标题不编号 + show heading.where(level: 1): set heading(numbering: none) + + [ + = #contents(zh: "致谢", en: "Acknowledgements") + + #set par(first-line-indent: (amount: 2em, all: true)) + #context acknowledgement-content.final() + + #v(1em) + + ] +} diff --git a/packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/appendix.typ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/appendix.typ new file mode 100644 index 0000000000..4c616ce82a --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/appendix.typ @@ -0,0 +1,53 @@ +// 利用 state 捕获摘要参数,并通过 context 传递给渲染函数 +#import "/utils/style.typ": 字体, 字号 +#import "@preview/numbly:0.1.0": numbly + +#import "@preview/i-figured:0.2.4" + +#let appendix-content = state("appendix", [ + = 附录要求 + 对于一些不宜放在正文中的重要支撑材料,可编入毕业论文的附录中,包括某些重要的原始数据、详细数学推导、程序全文及其说明、复杂的图表、设计图纸等一系列需要补充提供的说明材料。如果毕业论文中引用的实例、数据资料,实验结果等符号较多时,为了节约篇幅,便于读者查阅,可以编写一个符号说明,注明符号代表的意义。附录的篇幅不宜太多,一般不超过正文。此项不是必需项,空缺时可以省略。 +]) + +#let appendix( + body, +) = { + context appendix-content.update(body) +} + +#let appendix-part() = { + // 致谢、附录内容 宋体小四号 + set text(font: 字体.宋体, size: 字号.小四) + + // 附录标题中不需要分隔中英文 + show heading: set text(cjk-latin-spacing: none) + set heading(outlined: false) + show heading.where(level: 1): set heading(outlined: true, numbering: none) + + // 致谢、附录标题 黑体三号居中 + show heading.where(level: 1): it => { + counter(heading).step() + set text(font: 字体.黑体, size: 字号.三号) + set align(center) + it.body + } + + // 目录仅展示附录章标题 + // 论文附录依次用大写字母“附录A、附录B、附录C……”表示,附录内的分级序号可采用“附A1、 + // 附A1.1、附A1.1.1”等表示,图、表、公式均依此类推为“图A1、表A1、式A1”等。 + set heading(numbering: numbly( + "附录{1:A}", // use {level:format} to specify the format + "附{1:A}{2}.", // if format is not specified, arabic numbers will be used + "附{1:A}{2}.{3}.", // here, we only want the 3rd level + "附{1:A}{2}.{3}.{4}", + )) + + + show figure: i-figured.show-figure.with(numbering: "A.1") + show math.equation: i-figured.show-equation.with(numbering: "(A.1)") + + // 重置 heading 计数 + counter(heading).update(0) + + context appendix-content.final() +} diff --git a/packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/contents.typ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/contents.typ new file mode 100644 index 0000000000..de4c43db29 --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/contents.typ @@ -0,0 +1,47 @@ +#import "/utils/style.typ": 字体, 字号 +// #import "@preview/cuti:0.3.0": show-cn-fakebold +// #show: show-cn-fakebold + +#let contents-page(twoside: false) = { + show outline.entry: it => { + if text.lang == "zh" { + if it.element.numbering != none and it.element.level == 1 { + strong(link( + it.element.location(), + it.indented("第" + it.prefix() + "章", it.inner()), + )) + } else if it.element.level == 1 { + strong(it) + } else { + it + } + } + + if text.lang == "en" { + if it.element.numbering != none and it.element.level == 1 { + strong(link( + it.element.location(), + it.indented("Chapter " + it.prefix(), it.inner()), + )) + } else if it.element.level == 1 { + strong(it) + } else { + it + } + } + } + + + outline() + pagebreak(weak: true, to: if twoside { "odd" }) + { + set text(lang: "en") + show heading.where(level: 1): it => { + show text: set text(font: "Times New Roman", weight: "bold") + it + } + outline() + } + pagebreak(weak: true, to: if twoside { "odd" }) +} + diff --git a/packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/cover.typ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/cover.typ new file mode 100644 index 0000000000..1c1075c6fe --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/cover.typ @@ -0,0 +1,155 @@ +#import "/utils/datetime-display.typ": datetime-display +#import "/utils/style.typ": sysucolor, 字体, 字号 + +// 封面 +#let cover( + info: (:), + // 其他参数 + stoke-width: 0.5pt, + min-title-lines: 2, + info-inset: (x: 0pt, bottom: 1pt), + info-key-width: 72pt, + info-key-font: "黑体", + info-value-font: "宋体", + column-gutter: -3pt, + row-gutter: 11.5pt, + bold-info-keys: ("title",), + bold-level: "bold", +) = { + assert(type(info.title) == array) + assert(type(info.author) == dictionary) + + info.title = ( + info.title + range(min-title-lines - info.title.len()).map(it => " ") + ) + if type(info.submit-date) == datetime { + info.submit-date = datetime-display(info.submit-date) + } + + // 内置辅助函数 + let info-key( + font: 字体.at(info-key-font, default: "黑体"), + size: 字号.小三, + body, + ) = { + rect( + width: 100%, + inset: info-inset, + stroke: none, + text( + font: font, + size: size, + body, + ), + ) + } + + let info-value( + font: 字体.at(info-value-font, default: "宋体"), + size: 字号.小三, + key, + body, + ) = { + set align(center) + rect( + width: 100%, + inset: info-inset, + stroke: (bottom: stoke-width + black), + text( + font: font, + size: size, + weight: if (key in bold-info-keys) { bold-level } else { "regular" }, + bottom-edge: "descender", + body, + ), + ) + } + + let info-long-value( + font: 字体.at(info-value-font, default: "宋体"), + size: 字号.小三, + key, + body, + ) = { + grid.cell( + colspan: 3, + info-value( + font: font, + size: size, + key, + body, + ), + ) + } + + let info-short-value( + font: 字体.at(info-value-font, default: "宋体"), + size: 字号.小三, + key, + body, + ) = { + info-value( + font: font, + size: size, + key, + body, + ) + } + + // 正式渲染 + // 居中对齐 + set align(center) + + // 封面校徽 + // 使用校方官方 VI 系统的 logo,来源:https://home3.sysu.edu.cn/sysuvi/index.html + image("/assets/vi/sysu_logo.svg", width: 3cm) + + text( + size: 字号.小初, + font: 字体.宋体, + weight: "bold", + fill: sysucolor.green, + )[博士学位论文] + v(-2em) + line(length: 200%, stroke: 0.12cm + sysucolor.green) + v(-0.8em) + line(length: 200%, stroke: 0.05cm + sysucolor.green) + v(1.5cm) + + // 论文题目 + h(0.7cm) + block(width: 100%, grid( + columns: (25%, 1fr, 75%, 1fr), + column-gutter: column-gutter, + row-gutter: row-gutter, + info-key(size: 字号.二号, "题目:"), + ..info + .title + .map(s => info-long-value(size: 字号.二号, font: 字体.黑体, "title", s)) + .intersperse(info-key(size: 字号.二号, " ")), + )) + v(2.7cm) + + // 学生与指导老师信息 + set align(center + bottom) + block(width: 75%, grid( + columns: (info-key-width, 1fr, info-key-width, 1fr), + column-gutter: column-gutter, + row-gutter: row-gutter, + info-key("姓  名"), + info-long-value("author", info.author.name), + info-key("学  号"), + info-long-value("student-id", info.author.sno), + + info-key("院  系"), + info-long-value("department", info.author.department), + info-key("专  业"), + info-long-value("major", info.author.major), + + info-key("指导教师"), + info-long-value("supervisor", info.supervisor.join(" ")), + )) + v(2em) + + text(font: 字体.黑体, size: 字号.小四)[#info.submit-date] +} diff --git a/packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/declaration.typ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/declaration.typ new file mode 100644 index 0000000000..50b33f5639 --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/declaration.typ @@ -0,0 +1,25 @@ +#import "/utils/style.typ": 字号, 字体 + +// 学术声明页 +// 参照 [中山大学本科生毕业论文(设计)写作与印制规范 2020年发](https://spa.sysu.edu.cn/zh-hans/article/1744) 电子档的示例设置格式 +#let declaration() = { + align(center, text(font: 字体.黑体, size: 字号.三号)[学术诚信声明]) + + set text(font: 字体.宋体, size: 字号.小四) + + par(justify: true, first-line-indent: 2em)[ + 本人郑重声明:所呈交的毕业论文(设计),是本人在导师的指导下,独立进行研究工作所取得的成果。除文中已经注明引用的内容外,本论文(设计)不包含任何其他个人或集体已经发表或撰写过的作品成果。对本论文(设计)的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本论文(设计)的知识产权归属于培养单位。本人完全意识到本声明的法律结果由本人承担。 + ] + v(2em) + + align(right + top, + box( + grid( + columns: (auto, auto), + gutter: 2em, + "作者签名:", "", + "日" + h(2em) + "期:", h(2.5em) + text("年") + h(2em) + text("月") + h(2em) + text("日") + ) + ) + ) +} diff --git a/packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/lib.typ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/lib.typ new file mode 100644 index 0000000000..0e1d688e07 --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/lib.typ @@ -0,0 +1,301 @@ +#import "/specifications/postgraduate/cover.typ": cover +#import "/specifications/postgraduate/titlepage.typ": titlepage +#import "/specifications/postgraduate/declaration.typ": declaration +#import "/specifications/postgraduate/abstract.typ": abstract, abstract-page +#import "/specifications/postgraduate/abstract-en.typ": abstract-en, abstract-en-page +#import "/specifications/postgraduate/appendix.typ": appendix, appendix-part +#import "/specifications/postgraduate/acknowledgement.typ": acknowledgement, acknowledgement-page +#import "/specifications/postgraduate/contents.typ": contents-page + +#import "/utils/bilingual-bibliography.typ": bilingual-bibliography +#import "/utils/custom-heading.typ": active-heading, current-heading, heading-display-postgraduate +#import "/utils/style.typ": 字体, 字号 + +#import "@preview/numbly:0.1.0": numbly +#import "@preview/numblex:0.1.1": circle_numbers +#import "@preview/i-figured:0.2.4" + +#let contents(..titles) = context titles.named().at(text.lang) + +// 中山大学本科生毕业论文(设计)写作与印制规范 +// 参考规范: https://spa.sysu.edu.cn/zh-hans/article/1744 +#let doc( + // 毕业论文基本信息 + thesis-info: ( + // 论文标题,将展示在封面、扉页与页眉上 + // 多行标题请使用数组传入 `("thesis title", "with part next line")`,或使用换行符:`"thesis title\nwith part next line"` + title: ("博士学位论文", "写作与印制规范(2020-)"), + title-en: ("The Specification of Writting and Printing", "for SYSU thesis"), + // 论文作者信息:学号、姓名、院系、专业、指导老师 + author: ( + sno: "1xxxxxxx", + name: "张三", + grade: "2024", + department: "某学院", + major: "某专业", + ), + // 指导老师信息,以`("name", "title")` 数组方式传入 + supervisor: ("李四", "教授"), + // 提交日期,默认为论文 PDF 生成日期 + submit-date: datetime.today(), + discipline: "工学", + degree: "博士", + ), + // 参考文献来源 + bibliography: none, + // 控制页面是否渲染 + pages: ( + // 封面可能由学院统一打印提供,因此可以不渲染 + cover: false, + // 附录部分为可选。设置为 true 后,会在参考文献部分与致谢部分之间插入附录部分。 + appendix: false, + ), + // 论文内文各大部分的标题用“一、二…… (或1、2……)”, 次级标题为“(一)、(二)……(或 + // 1.1、2.1……)”,三级标题用“1、2……(或1.1.1、2.1.1……)”,四级标题用“(1)、(2)…… + //(或1.1.1.1、2.1.1.1……)”,不再使用五级以下标题。两类标题不要混编。 + numbering: none, + // 双面模式,会加入空白页,便于打印 + twoside: false, + // 论文正文信息,包括绪论、主体、结论 + content, +) = { + // 论文信息参数处理。要求必须传递,且符合规格的参数 + assert(type(thesis-info) == dictionary) + assert(type(thesis-info.title) == array or type(thesis-info.title) == str) + assert( + type(thesis-info.title-en) == array or type(thesis-info.title-en) == str, + ) + // 论文信息默认参数。函数传入参数会完全覆盖参数值,因此需要提供默认参数补充。 + // 彩蛋:如果论文参数不传递作者参数,那么论文就会被署名论文模板作者 + let default-author = ( + sno: "13xxxx87", + name: "Sunny Huang", + grade: "2013", + department: "数据科学与计算机学院", + major: "软件工程", + ) + thesis-info.author = thesis-info.at("author", default: default-author) + + let default-thesis-info = ( + title: ("博士学位论文", "写作与印制规范"), + title-en: ("The Specification of Writting and Printing", "for SYSU thesis"), + supervisor: ("李四", "教授"), + submit-date: datetime.today(), + ) + thesis-info = default-thesis-info + thesis-info + + // 论文渲染控制参数处理。设置可选页面的默认设置项 + let default-pages = ( + cover: true, + appendix: false, + ) + pages = default-pages + pages + + // 文档元数据处理 + if type(thesis-info.title) == str { + thesis-info.title = thesis-info.title.split("\n") + } + if type(thesis-info.title-en) == str { + thesis-info.title-en = thesis-info.title-en.split("\n") + } + + set document( + title: thesis-info.title.join(""), + author: thesis-info.author.name, + // keywords: thesis-info.abstract.keywords, + ) + + // 纸张大小:A4。页边距:上边距25 mm,下边距20 mm,左右边距均为30 mm。 + set page(paper: "a4", margin: (top: 25mm, bottom: 20mm, x: 30mm)) + + // 行距:1.5倍行距 + // 行距理解为 word 默认行距(1em * 120%)的1.5倍,由于目前尚未实现 [line-height 模 + // 型],故换算成行间距(leading) + // + // [line-height 模型]: https://github.com/typst/typst/issues/4224 + set par(leading: 1em * 120% * 1.5 - 1em) + + // 目录内容 宋体小四号 + // 正文内容 宋体小四号 + // 致谢、附录内容 宋体小四号 + set text(lang: "zh", font: 字体.宋体, size: 字号.小四) + + // 论文内文各大部分的标题用“一、二…… (或1、2……)”, 次级标题为“(一)、(二)……(或 + // 1.1、2.1……)”,三级标题用“1、2……(或1.1.1、2.1.1……)”,四级标题用“(1)、(2)…… + //(或1.1.1.1、2.1.1.1……)”,不再使用五级以下标题。两类标题不要混编。 + set heading(depth: 4, numbering: if numbering == "一" { + numbly("{1:一}", "({2:一})", "{3}", "({4})") + } else { "1.1.1.1 " }) + show heading: set text(weight: "regular") + + // 章和节标题段前段后各空0.5行 + // 行理解为当前行距,故在 "1.5倍行距" 的基准上再算一半,也即 "0.75倍行距" + show heading.where(level: 1): set block( + above: 1em * 120% * 0.75, + below: 1em * 120% * 0.75, + ) + show heading.where(level: 2): set block( + above: 1em * 120% * 0.75, + below: 1em * 120% * 0.75, + ) + + // 目录标题 黑体三号居中 + // 正文各章标题 黑体三号居中 + // 参考文献标题 黑体三号居中 + // 致谢、附录标题 黑体三号居中 + show heading.where(level: 1): it => { + set text(font: 字体.黑体, size: 字号.三号) + set align(center) + heading-display-postgraduate(it) + } + + // 正文各节一级标题 黑体四号左对齐 + show heading.where(level: 2): set text(font: 字体.黑体, size: 字号.四号) + + // 正文各节二级及以下标题 宋体小四号加粗左对齐空两格 + show heading.where(level: 3): set text( + font: 字体.宋体, + size: 字号.小四, + weight: "bold", + ) + show heading.where(level: 4): set text( + font: 字体.宋体, + size: 字号.小四, + weight: "bold", + ) + show heading.where(level: 3): it => pad(left: 2em, it) + show heading.where(level: 4): it => pad(left: 2em, it) + + // 遇到一级标题重置图、表、公式编号计数 + show heading: i-figured.reset-counters + show figure: i-figured.show-figure + show math.equation: i-figured.show-equation + + // 图题、表题 宋体五号 + show figure.caption: set text(font: 字体.宋体, size: 字号.五号) + + // 标题放置在表格上方 + show figure.where(kind: table): set figure.caption(position: top) + + // 脚注、尾注 宋体小五号 + show footnote.entry: set text(font: 字体.宋体, size: 字号.小五) + + // 注释:毕业论文(设计)中有个别名词或情况需要解释时,可加注说明。注释采用脚注或尾注, + // 应根据注释的先后顺序编排序号。注释序号以“①、②”等数字形式标示在正文中被注释词条的 + // 右上角,脚注或尾注内容中的序号应与被注释词条序号保持一致。 + show footnote: set footnote(numbering: circle_numbers) + + // 毕业论文应按以下顺序装订和存档: + // 封面->扉页->学术诚信声明->摘要->目录->正文->参考文献(->附录)->致谢。 + if pages.cover { + cover(info: thesis-info) + pagebreak(weak: true, to: if twoside { "odd" }) + } + + titlepage(info: thesis-info) + pagebreak(weak: true, to: if twoside { "odd" }) + + declaration() + pagebreak(weak: true, to: if twoside { "odd" }) + + // 摘要开始至绪论之前以大写罗马数字(Ⅰ,Ⅱ,Ⅲ…)单独编连续码 + // 页眉与页脚 宋体五号居中 + set page(header: context { + set text(font: 字体.宋体, size: 字号.五号) + set align(center) + let loc = here() + let cur-heading = current-heading(level: 1, loc) + let first-level-heading = heading-display-postgraduate(active-heading( + level: 1, + loc, + )) + + if cur-heading != none { + heading-display-postgraduate(current-heading(level: 1, loc)) + } else if calc.rem(loc.page(), 2) == 0 { + [中山大学] + thesis-info.discipline + thesis-info.degree + [学位论文] + } else { + first-level-heading + } + stack( + line(length: 100%, stroke: 2pt), + v(2pt), + line(length: 100%, stroke: 1pt), + ) + }) + set page(numbering: "I") + counter(page).update(1) + + abstract-page() + pagebreak(weak: true, to: if twoside { "odd" }) + abstract-en-page() + pagebreak(weak: true, to: if twoside { "odd" }) + + contents-page() + + // 绪论开始至论文结尾,以阿拉伯数字(1,2,3…)编连续码 + set page(numbering: "1") + counter(page).update(1) + + // 正文段落按照中文惯例缩进两格 + set par(first-line-indent: (amount: 2em, all: true)) + + show heading.where(level: 1): it => { + pagebreak(weak: true) + it + } + + content + pagebreak(weak: true, to: if twoside { "odd" }) + + // 参考文献 + { + // 参考文献内容 宋体五号 + set text(font: 字体.宋体, size: 字号.五号) + bilingual-bibliography(bibliography: bibliography, full: true) + } + pagebreak(weak: true, to: if twoside { "odd" }) + + // 附录 + if pages.appendix { + appendix-part() + pagebreak(weak: true, to: if twoside { "odd" }) + } + + // 致谢 + acknowledgement-page() + pagebreak(weak: true, to: if twoside { "odd" }) +} + +// 以下为校对用测试 preview 页面 +#show: doc.with( + bibliography: bibliography.with("/template/ref.bib"), + pages: ( + appendix: true, + ), +) + + +// 正文各部分的标题应简明扼要,不使用标点符号。 += 第某章 +== 节标题 +=== 小节标题 +==== 四级标题 +写一下测试的内容 @chapter1-img,章节标题 @chapter1[("第一章")] + +#figure( + image("/template/images/sysu_logo.svg", width: 20%), + caption: [图片测试], +) + +// #show: appendix +// = 第一章 +// == 节标题 +// === 小节标题 +// ==== 四级标题 +// 在附录中引用图片 @appendix-img, 以及附录章节标题 @appendix[#numbering("附录A")] + +// #figure( +// image("/template/images/sysu_logo.svg", width: 20%), +// caption: [图片测试], +// ) diff --git a/packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/titlepage.typ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/titlepage.typ new file mode 100644 index 0000000000..87cbf26978 --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/specifications/postgraduate/titlepage.typ @@ -0,0 +1,128 @@ +#import "/utils/datetime-display.typ": datetime-display +#import "/utils/style.typ": 字号, 字体 + +// 扉页 +// 内容包括论文中英文题目、学生姓名、学号、院系、专业、指导教师(姓名及职称)等信息。 +#let titlepage( + info: (:), + // 其他参数 + stoke-width: 0.5pt, + min-title-lines: 2, + info-inset: (x: 0pt, bottom: 1pt), + info-key-width: 72pt, + info-key-font: "黑体", + info-value-font: "宋体", + column-gutter: -3pt, + row-gutter: 11.5pt, +) = { + assert(type(info.title) == array) + assert(type(info.author) == dictionary) + + info.title = info.title + range(min-title-lines - info.title.len()).map((it) => " ") + if type(info.submit-date) == datetime { + info.submit-date = datetime-display(info.submit-date) + } + + // 内置辅助函数 + let info-key( + font: 字体.at(info-key-font, default: "黑体"), + size: 字号.三号, + body, + ) = { + rect( + width: 100%, + inset: info-inset, + stroke: none, + text( + font: font, + size: size, + body, + ), + ) + } + + let info-value( + font: 字体.at(info-value-font, default: "宋体"), + size: 字号.三号, + key, + body, + ) = { + set align(center) + rect( + width: 100%, + inset: info-inset, + stroke: (bottom: stoke-width + black), + text( + font: font, + size: size, + bottom-edge: "descender", + body, + ), + ) + } + + let info-long-value( + font: 字体.at(info-value-font, default: "宋体"), + size: 字号.三号, + key, + body, + ) = { + grid.cell(colspan: 3, + info-value( + font: font, + size: size, + key, + body, + ) + ) + } + + let info-short-value( + font: 字体.at(info-value-font, default: "宋体"), + size: 字号.三号, + key, + body + ) = { + info-value( + font: font, + size: size, + key, + body, + ) + } + + // 正式渲染 + v(30pt) + + set align(center + horizon) + for part in info.title { + text(size: 字号.二号, font: 字体.黑体, weight: "bold")[ #part ] + linebreak() + } + v(2em) + for part-en in info.title-en { + text(size: 字号.二号, weight: "bold")[ #part-en ] + linebreak() + } + + // 学生与指导老师信息 + set align(center + bottom) + block(width: 75%, grid( + columns: (info-key-width, 1fr, info-key-width, 1fr), + column-gutter: column-gutter, + row-gutter: row-gutter, + info-key("姓  名"), + info-long-value("author", info.author.name), + info-key("学  号"), + info-long-value("student-id", info.author.sno), + info-key("院  系"), + info-long-value("department", info.author.department), + info-key("专  业"), + info-long-value("major", info.author.major), + info-key("指导教师"), + info-long-value("supervisor", info.supervisor.join(" ")), + )) + v(2em) + + text(font: 字体.黑体, size: 字号.四号)[#info.submit-date] +} diff --git a/packages/preview/modern-sysu-thesis/0.4.1/template/images/sysu_logo.svg b/packages/preview/modern-sysu-thesis/0.4.1/template/images/sysu_logo.svg new file mode 100644 index 0000000000..1c14f8ec98 --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/template/images/sysu_logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/preview/modern-sysu-thesis/0.4.1/template/ref.bib b/packages/preview/modern-sysu-thesis/0.4.1/template/ref.bib new file mode 100644 index 0000000000..ac49843ee2 --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/template/ref.bib @@ -0,0 +1,94 @@ +@book{蒋有绪1998, + title={中国森林群落分类及其群落学特征}, + author={蒋有绪 and 郭泉水 and 马娟 and others}, + year={1998}, + publisher={科学出版社}, + address={北京}, + pages={11-12}, +} + +@inproceedings{中国力学学会1990, + title={第3届全国实验流体力学学术会议论文集}, + author={中国力学学会}, + year={1990}, + address={天津}, + publisher={**出版社}, + pages={20-24} +} + +@techreport{WHO1970, + title={World Health Organization. Factors Regulating the Immune Response: Report of WHO Scientific Group}, + year={1970}, + institution={WHO}, + address={Geneva} +} + +@phdthesis{张志祥1998, + author = {张志祥}, + title = {间断动力系统的随机扰动及其在守恒律方程中的应用}, + school = {北京大学数学学院}, + address = {北京}, + year = {1998}, + pages = {50-55} +} + +@patent{河北绿洲2001, + title={一种荒漠化地区生态植被综合培育种植方法:中国,01129210.5}, + author={河北绿洲生态环境科技有限公司}, + year={2001}, + type={patent}, + number={01129210.5}, + note={2001-10-24[2002-05-28]}, + url={http://211.152.9.47/sipoasp/zlijs/hyjs-yxnew. asp?recid=01129210.5&leixin} +} + +@standard{GB/T2659-1986, + title = {世界各国和地区名称代码}, + author = {国家标准局信息分类编码研究所}, + year = {1986}, + howpublished = {全国文献工作标准化技术委员会. 文献工作国家标准汇编:3.北京:中国标准出版社,1988:59-92.}, + note = {GB/T 2659-1986} +} + + +@article{李炳穆2000, + title={理想的图书馆员和信息专家的素质与形象}, + author={李炳穆}, + journal={图书情报工作}, + year={2000}, + volume={2000}, + number={2}, + pages={5-8} +} + +@article{丁文祥2000, + title={数字革命与竞争国际化}, + author={丁文祥}, + journal={中国青年报}, + year={2000}, + month={11-20}, + number={15} +} + +@article{江向东1999, + title={互联网环境下的信息处理与图书管理系统解决方案}, + author={江向东}, + journal={情报学报}, + year={1999}, + volume={18}, + number={2}, + pages={4}, + note={2000-01-18}, + url={http://www.chinainfo.gov.cn/periodical/gbxb/gbxb99/gbxb990203} +} + +@article{CHRISTINE1998, + title={Plant physiology:plant biology in the Genome Era}, + author={M CHRISTINE}, + journal={Science}, + year={1998}, + volume={281}, + pages={331-332}, + note={1998-09-23}, + url={http://www.sciencemag.org/cgi/collection/anatmorp} +} \ No newline at end of file diff --git a/packages/preview/modern-sysu-thesis/0.4.1/template/thesis.typ b/packages/preview/modern-sysu-thesis/0.4.1/template/thesis.typ new file mode 100644 index 0000000000..55bf26883c --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/template/thesis.typ @@ -0,0 +1,182 @@ +// 建议在正式编辑论文时,采用 typst.app 中的已发布版本模板 +#import "@preview/modern-sysu-thesis:0.4.1": bachelor as thesis + +// 仅供开发调试使用 +// #import "lib.typ": postgraduate as thesis +#import thesis: abstract, acknowledgement, appendix, contents + +// 你首先应该安装 https://gitlab.com/sysu-gitlab/thesis-template/better-thesis/-/tree/main/fonts 里的所有字体, +// 如果是 Web App 上编辑,你应该手动上传这些字体文件,否则不能正常使用「楷体」和「仿宋」,导致显示错误。 + +#show: thesis.doc.with( + // 毕业论文基本信息 + thesis-info: ( + // 论文标题,将展示在封面、扉页与页眉上 + // 多行标题请使用数组传入 `("thesis title", "with part next line")`,或使用换行符:`"thesis title\nwith part next line"` + title: ("基于 Typst 的", "中山大学学位论文模板"), + title-en: "A Typst Template for SYSU thesis", + // 论文作者信息:学号、姓名、院系、专业、指导老师 + author: ( + sno: "1xxxxxxx", + name: "张三", + grade: "2024", + department: "某学院", + major: "某专业", + ), + // 指导老师信息,以`("name", "title")` 数组方式传入 + supervisor: ("李四", "教授"), + // 提交日期,默认为论文 PDF 生成日期 + submit-date: datetime.today(), + discipline: "工学", + degree: "博士", + ), + + // 参考文献来源 + bibliography: bibliography.with("ref.bib"), + + // 控制页面是否渲染 + pages: ( + // 封面可能由学院统一打印提供,因此可以不渲染 + cover: false, + // 附录部分为可选。设置为 true 后,会在参考文献部分与致谢部分之间插入附录部分。 + appendix: true, + ), + + // 论文内文各大部分的标题用“一、二…… (或1、2……)”, 次级标题为“(一)、(二)……(或 + // 1.1、2.1……)”,三级标题用“1、2……(或1.1.1、2.1.1……)”,四级标题用“(1)、(2)…… + //(或1.1.1.1、2.1.1.1……)”,不再使用五级以下标题。两类标题不要混编。 + // numbering: "一", + + // 双面模式,会加入空白页,便于打印 + twoside: false, +) + +// 本科模板无需双语目录,不需要使用#contents函数,请自行删除并直接输入标题 += #contents(zh: "导 论", en: "Introduction") + +== #contents(zh: "列表", en: "List") + +=== #contents(zh: "无序列表", en: "Unordered list") + +- 无序列表项一 +- 无序列表项二 + - 无序子列表项一 + - 无序子列表项二 + +=== #contents(zh: "有序列表", en: "Ordered list") + ++ 有序列表项一 ++ 有序列表项二 + + 有序子列表项一 + + 有序子列表项二 + +=== #contents(zh: "术语列表", en: "List of terms") + +/ 术语一: 术语解释 +/ 术语二: 术语解释 + +== #contents(zh: "图表", en: "Figures") + +引用@tbl:timing,引用@tbl:timing-tlt,以及@fig:sysu-logo。引用图表时,表格和图片分别需要加上 `tbl:`和`fig:` 前缀才能正常显示编号。 + +#align(center, ( + stack(dir: ltr)[ + #figure( + table( + align: center + horizon, + columns: 4, + [t], [1], [2], [3], + [y], [0.3s], [0.4s], [0.8s], + ), + caption: [常规表], + ) + ][ + #h(50pt) + ][ + #figure( + table( + columns: 4, + stroke: none, + table.hline(), + [t], [1], [2], [3], + table.hline(stroke: .5pt), + [y], [0.3s], [0.4s], [0.8s], + table.hline(), + ), + caption: [三线表], + ) + ] +)) + +#figure( + image("images/sysu_logo.svg", width: 20%), + caption: [图片测试], +) + + +== #contents(zh: "数学公式", en: "Mathematical formula") +可以像 Markdown 一样写行内公式 $x + y$,以及带编号的行间公式: + +$ phi.alt := (1 + sqrt(5)) / 2 $ + +引用数学公式需要加上 `eqt:` 前缀,则由@eqt:ratio,我们有: + +$ F_n = floor(1 / sqrt(5) phi.alt^n) $ + +我们也可以通过 `<->` 标签来标识该行间公式不需要编号 + +$ y = integral_1^2 x^2 dif x $ <-> + +而后续数学公式仍然能正常编号。 + +$ F_n = floor(1 / sqrt(5) phi.alt^n) $ + +== #contents(zh: "参考文献", en: "References") + +可以像这样引用参考文献:图书#[@蒋有绪1998]和会议#[@中国力学学会1990]。 + +== #contents(zh: "代码块", en: "Code block") + +代码块支持语法高亮。引用时需要加上 `lst:` @lst:code + +#figure( + ```py + def add(x, y): + return x + y + ```, + caption: [代码块], +) + + += #contents(zh: "正 文", en: "Main body") + +== #contents(zh: "正文子标题", en: "Subtitle of main body") + +=== #contents(zh: "正文子子标题", en: "Subsubtitle of main body") + +正文内容 + +// 附录 +#show: appendix + += #contents(zh: "附录", en: "Appendix") + +== 附录章节题 + +=== 附录子标题 +==== 附录子子标题 + +附录内容,这里也可以加入图片,例如@fig:appendix-img。 + +从正文内容里复制公式,以审查公式编号 +$ F_n = floor(1 / sqrt(5) phi.alt^n) $ + +#figure( + image("images/sysu_logo.svg", width: 20%), + caption: [图片测试], +) + +// 致谢 +#acknowledgement[ + 感谢 NJU-LUG,感谢 NJUThesis LaTeX 模板。 +] diff --git a/packages/preview/modern-sysu-thesis/0.4.1/thumbnail.png b/packages/preview/modern-sysu-thesis/0.4.1/thumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..aab41416dae7a814026128cc0f9279c3001e7030 GIT binary patch literal 212704 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

y7mn$LV~3CK81rVoi3`Jb1aSd;wydP)4z>lD5m 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 gdItI-lMLPs!Mkp1B?v+ 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 z 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 SICqs?+^J(q^65tmy#Eg<3lF;h literal 0 HcmV?d00001 diff --git a/packages/preview/modern-sysu-thesis/0.4.1/typst.toml b/packages/preview/modern-sysu-thesis/0.4.1/typst.toml new file mode 100644 index 0000000000..19edb77612 --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/typst.toml @@ -0,0 +1,19 @@ +[package] +name = "modern-sysu-thesis" +version = "0.4.1" +entrypoint = "lib.typ" +repository = "https://gitlab.com/sysu-gitlab/thesis-template/better-thesis" +authors = [ + "howardlau1999 <@howardlau1999>", + "Sunny Huang <@huangjj27>", + "chaos <@debeetle>", +] +license = "MIT" +description = "中山大学学位论文 Typst 模板,A Typst template for SYSU thesis" +keywords = ["SYSU", "thesis", "typst"] +categories = ["thesis"] + +[template] +path = "template" +entrypoint = "thesis.typ" +thumbnail = "thumbnail.png" diff --git a/packages/preview/modern-sysu-thesis/0.4.1/utils/bilingual-bibliography.typ b/packages/preview/modern-sysu-thesis/0.4.1/utils/bilingual-bibliography.typ new file mode 100644 index 0000000000..9765c82d9b --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/utils/bilingual-bibliography.typ @@ -0,0 +1,159 @@ +// Authors: csimide, OrangeX4 +// Tested only on GB-7714-2015-Numeric +#let contents(..titles) = context titles.named().at(text.lang) +#let bilingual-bibliography( + bibliography: none, + title: contents(zh: "参考文献", en: "References"), + full: false, + style: "gb-7714-2015-numeric", + mapping: (:), +) = { + assert( + bibliography != none, + message: "请传入带有 source 的 bibliography 函数。", + ) + + // Please fill in the remaining mapping table here + mapping = ( + //"等": "et al", + "卷": "Vol.", + "册": "Bk.", + // "译": "tran", + // "等译": "et al. tran", + // 注: 请见下方译者数量判断部分。 + ) + mapping + + + let to-string(content) = { + if content.has("text") { + content.text + } else if content.has("children") { + content.children.map(to-string).join("") + } else if content.has("child") { + to-string(content.child) + } else if content.has("body") { + to-string(content.body) + } else if content == [ ] { + " " + } + } + + show grid.cell.where(x: 1): it => { + // 后续的操作是对 string 进行的。 + let ittext = to-string(it) + // 判断是否为中文文献:去除特定词组后,仍有至少两个连续汉字。 + let pureittext = ittext.replace( + regex("[等卷册和版本章期页篇译间者(不详)]"), + "", + ) + if pureittext.find(regex("\p{sc=Hani}{2,}")) != none { + ittext + } else { + // 若不是中文文献,进行替换 + // 第xxx卷、第xxx册的情况:变为 Vol. XXX 或 Bk. XXX。 + let reptext = ittext + reptext = reptext.replace( + regex("(第\s?)?\d+\s?[卷册]"), + itt => { + if itt.text.contains("卷") { + "Vol. " + } else { + "Bk. " + } + itt.text.find(regex("\d+")) + }, + ) + + // 第xxx版/第xxx本的情况:变为 1st ed 格式。 + reptext = reptext.replace( + regex("(第\s?)?\d+\s?[版本]"), + itt => { + let num = itt.text.find(regex("\d+")) + num + if num.clusters().len() == 2 and num.clusters().first() == "1" { + "th" + } else { + ( + "1": "st", + "2": "nd", + "3": "rd", + ).at(num.clusters().last(), default: "th") + } + " ed" + }, + ) + + // 译者数量判断:单数时需要用 trans,复数时需要用 tran 。 + // 注: + // 1. 目前判断译者数量的方法非常草率,有逗号就是多个作者。但是在部分 GB/T 7714-2015 方言中,姓名中可以含有逗号。 + // 2. 在 GB/T 7714-2015 原文中有 `等译`(P15 10.1.3 小节 示例 1-[1]),但未给出相应的英文缩写翻译。 + // 3. CSL 社区库内的 GB/T 7714-2015 会使用 `等, 译` 和 `et al., tran` 的写法。为了保证统一性,这里会译作不带逗号的版本,即 `et al. tran` + // 如果工作不正常,可以考虑换为简单关键词替换,即注释这段情况,取消 13 行 mapping 内 `译` 条目的注释。 + reptext = reptext.replace( + regex("\].+?译"), + itt => { + // 我想让上面这一行匹配变成非贪婪的,但加问号后没啥效果? + if itt.text.replace(regex(",\s?译"), "").find(",") != none { + itt.text.replace(regex(",?\s?译"), " tran") + } else { + itt.text.replace(regex(",?\s?译"), " trans") + } + }, + ) + + // `等` 特殊处理:`等`后方接内容也需要译作 `et al.`,如 `等译` 需要翻译为 `et al. trans` + reptext = reptext.replace( + regex("等."), + itt => { + "et al." + // 如果原文就是 `等.`,则仅需简单替换,不需要额外处理 + // 如果原文 `等` 后没有跟随英文标点,则需要补充一个空格 + if not ( + itt.text.last() + in ( + ".", + ",", + ";", + ":", + "[", + "]", + "/", + "\\", + "<", + ">", + "?", + "(", + ")", + " ", + "\"", + "'", + ) + ) { + " " + } + // 原文有英文句号时不需要重复句号,否则需要将匹配到的最后一个字符吐回来 + if not itt.text.last() == "." { + itt.text.last() + } + }, + ) + + // 其他情况:直接替换 + reptext = reptext.replace( + regex("\p{sc=Hani}+"), + itt => { + mapping.at(itt.text, default: itt.text) + // 注意:若替换功能工作良好,应该不会出现 `default` 情形 + }, + ) + reptext + } + } + + set text(lang: "zh") + bibliography( + title: title, + full: full, + style: style, + ) +} diff --git a/packages/preview/modern-sysu-thesis/0.4.1/utils/custom-heading.typ b/packages/preview/modern-sysu-thesis/0.4.1/utils/custom-heading.typ new file mode 100644 index 0000000000..3aee64d4f7 --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/utils/custom-heading.typ @@ -0,0 +1,65 @@ +// 展示一个标题 +#let heading-display-postgraduate(it) = { + if it != none { + if it.has("numbering") and it.numbering != none { + [第] + numbering(it.numbering, ..counter(heading).at(it.location())) + [章 ] + } + it.body + } else { + "" + } +} + +#let heading-display(it) = { + if it != none { + if it.has("numbering") and it.numbering != none { + numbering(it.numbering, ..counter(heading).at(it.location())) + [ ] + } + it.body + } else { + "" + } +} + +// 获取当前激活的 heading,参数 prev 用于标志优先使用之前页面的 heading +#let active-heading(level: 1, prev: true, loc) = { + // 之前页面的标题 + let prev-headings = query(selector(heading.where(level: level)).before(loc)) + // 当前页面的标题 + let cur-headings = query( + selector(heading.where(level: level)).after(loc), + ).filter(it => it.location().page() == loc.page()) + if prev-headings.len() == 0 and cur-headings.len() == 0 { + return none + } else { + if prev { + if prev-headings.len() != 0 { + return prev-headings.last() + } else { + return cur-headings.first() + } + } else { + if cur-headings.len() != 0 { + return cur-headings.first() + } else { + return prev-headings.last() + } + } + } +} + +// 获取当前页面的标题 +#let current-heading(level: 1, loc) = { + // 当前页面的标题 + let cur-headings = query( + selector(heading.where(level: level)).after(loc), + ).filter(it => it.location().page() == loc.page()) + if cur-headings.len() != 0 { + return cur-headings.first() + } else { + return none + } +} diff --git a/packages/preview/modern-sysu-thesis/0.4.1/utils/custom-numbering.typ b/packages/preview/modern-sysu-thesis/0.4.1/utils/custom-numbering.typ new file mode 100644 index 0000000000..a5c88476a1 --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/utils/custom-numbering.typ @@ -0,0 +1,30 @@ +// 一个简单的自定义 Numbering +// 用法也简单,可以特殊设置一级等标题的样式,以及一个缺省值 +#let custom-numbering(base: 1, depth: 5, first-level: auto, second-level: auto, third-level: auto, format, ..args) = { + if (args.pos().len() > depth) { + return + } + if (first-level != auto and args.pos().len() == 1) { + if (first-level != "") { + numbering(first-level, ..args) + } + return + } + if (second-level != auto and args.pos().len() == 2) { + if (second-level != "") { + numbering(second-level, ..args) + } + return + } + if (third-level != auto and args.pos().len() == 3) { + if (third-level != "") { + numbering(third-level, ..args) + } + return + } + // default + if (args.pos().len() >= base) { + numbering(format, ..(args.pos().slice(base - 1))) + return + } +} \ No newline at end of file diff --git a/packages/preview/modern-sysu-thesis/0.4.1/utils/custom-tablex.typ b/packages/preview/modern-sysu-thesis/0.4.1/utils/custom-tablex.typ new file mode 100644 index 0000000000..29fe03bb0e --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/utils/custom-tablex.typ @@ -0,0 +1 @@ +#import "@preview/tablex:0.0.8": * \ No newline at end of file diff --git a/packages/preview/modern-sysu-thesis/0.4.1/utils/datetime-display.typ b/packages/preview/modern-sysu-thesis/0.4.1/utils/datetime-display.typ new file mode 100644 index 0000000000..2012033950 --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/utils/datetime-display.typ @@ -0,0 +1,9 @@ +// 显示中文日期 +#let datetime-display(date) = { + date.display("[year] 年 [month] 月 [day] 日") +} + +// 显示英文日期 +#let datetime-en-display(date) = { + date.display("[month repr:short] [day], [year]") +} \ No newline at end of file diff --git a/packages/preview/modern-sysu-thesis/0.4.1/utils/double-underline.typ b/packages/preview/modern-sysu-thesis/0.4.1/utils/double-underline.typ new file mode 100644 index 0000000000..74e1dd5995 --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/utils/double-underline.typ @@ -0,0 +1,11 @@ +// 双下划线 +#let double-underline(body) = style(styles => { + let size = measure(body, styles) + stack( + body, + v(3pt), + line(length: size.width), + v(2pt), + line(length: size.width), + ) +}) \ No newline at end of file diff --git a/packages/preview/modern-sysu-thesis/0.4.1/utils/hline.typ b/packages/preview/modern-sysu-thesis/0.4.1/utils/hline.typ new file mode 100644 index 0000000000..afd563c669 --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/utils/hline.typ @@ -0,0 +1,4 @@ +// 一条水平横线 +#let hline() = { + line(length: 100%) +} \ No newline at end of file diff --git a/packages/preview/modern-sysu-thesis/0.4.1/utils/invisible-heading.typ b/packages/preview/modern-sysu-thesis/0.4.1/utils/invisible-heading.typ new file mode 100644 index 0000000000..f16fa80818 --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/utils/invisible-heading.typ @@ -0,0 +1,5 @@ +// 用于创建一个不可见的标题,用于给 outline 加上短标题 +#let invisible-heading(..args) = { + set text(size: 0pt, fill: white) + heading(numbering: none, ..args) +} \ No newline at end of file diff --git a/packages/preview/modern-sysu-thesis/0.4.1/utils/justify-text.typ b/packages/preview/modern-sysu-thesis/0.4.1/utils/justify-text.typ new file mode 100644 index 0000000000..318027d131 --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/utils/justify-text.typ @@ -0,0 +1,9 @@ +// 双端对其一段小文本,常用于表格的中文 key +#let justify-text(with-tail: false, tail: ":", body) = { + if with-tail and tail != "" { + stack(dir: ltr, stack(dir: ltr, spacing: 1fr, ..body.split("").filter(it => it != "")), tail) + } else { + stack(dir: ltr, spacing: 1fr, ..body.split("").filter(it => it != "")) + } +} + diff --git a/packages/preview/modern-sysu-thesis/0.4.1/utils/style.typ b/packages/preview/modern-sysu-thesis/0.4.1/utils/style.typ new file mode 100644 index 0000000000..a2bdb44eb9 --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/utils/style.typ @@ -0,0 +1,87 @@ +#let 字号 = ( + 初号: 42pt, + 小初: 36pt, + 一号: 26pt, + 小一: 24pt, + 二号: 22pt, + 小二: 18pt, + 三号: 16pt, + 小三: 15pt, + 四号: 14pt, + 中四: 13pt, + 小四: 12pt, + 五号: 10.5pt, + 小五: 9pt, + 六号: 7.5pt, + 小六: 6.5pt, + 七号: 5.5pt, + 小七: 5pt, +) + +#let 字体 = ( + // 宋体,属于「有衬线字体」,一般可以等同于英文中的 Serif Font + // 这一行分别是「新罗马体(有衬线英文字体)」、「思源宋体(简体)」、「思源宋体」、「宋体(Windows)」、「宋体(MacOS)」 + 宋体: ( + (name: "Times New Roman", covers: "latin-in-cjk"), + "Source Han Serif SC", + "Source Han Serif", + "Noto Serif CJK SC", + "SimSun", + "Songti SC", + "STSongti", + ), + + // 黑体,属于「无衬线字体」,一般可以等同于英文中的 Sans Serif Font + // 这一行分别是「Arial(无衬线英文字体)」、「思源黑体(简体)」、「思源黑体」、「黑体(Windows)」、「黑体(MacOS)」 + 黑体: ( + (name: "Arial", covers: "latin-in-cjk"), + "Source Han Sans HW SC", + "Source Han Sans", + "Noto Sans CJK SC", + "SimHei", + "Heiti SC", + "STHeiti", + ), + + // 楷体 + 楷体: ( + (name: "Times New Roman", covers: "latin-in-cjk"), + "KaiTi", + "Kaiti SC", + "STKaiti", + "FZKai-Z03S", + "Noto Serif CJK SC", + ), + + // 仿宋 + 仿宋: ( + (name: "Times New Roman", covers: "latin-in-cjk"), + "FangSong", + "FangSong SC", + "STFangSong", + "FZFangSong-Z02S", + "Noto Serif CJK SC", + ), + + // 等宽字体,用于代码块环境,一般可以等同于英文中的 Monospaced Font + // 这一行分别是「Courier New(Windows 等宽英文字体)」、「思源等宽黑体(简体)」、「思源等宽黑体」、「黑体(Windows)」、「黑体(MacOS)」 + 等宽: ( + (name: "Courier New", covers: "latin-in-cjk"), + "Menlo", + "IBM Plex Mono", + "Source Han Sans HW SC", + "Source Han Sans HW", + "Noto Sans Mono CJK SC", + "SimHei", + "Heiti SC", + "STHeiti", + ), +) + +// 定义中山大学规范颜色 +// 参考 http://home3.sysu.edu.cn/sysuvi/content/zaisheng/b/C-1-5.jpg +#let sysucolor = ( + green: cmyk(100%, 0%, 100%, 60%), + red: cmyk(30%, 100%, 100%, 50%), + black: cmyk(0%, 0%, 0%, 100%), +) diff --git a/packages/preview/modern-sysu-thesis/0.4.1/utils/unpairs.typ b/packages/preview/modern-sysu-thesis/0.4.1/utils/unpairs.typ new file mode 100644 index 0000000000..6931e95bdb --- /dev/null +++ b/packages/preview/modern-sysu-thesis/0.4.1/utils/unpairs.typ @@ -0,0 +1,8 @@ +// 将 pairs 数组转成 dict 字典 +#let unpairs(pairs) = { + let dict = (:) + for pair in pairs { + dict.insert(..pair) + } + dict +} \ No newline at end of file