diff --git a/packages/preview/modern-hfut-report/0.1.0/LICENSE b/packages/preview/modern-hfut-report/0.1.0/LICENSE new file mode 100644 index 0000000000..dcececbf5f --- /dev/null +++ b/packages/preview/modern-hfut-report/0.1.0/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 HPCesia + +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/modern-hfut-report/0.1.0/README.md b/packages/preview/modern-hfut-report/0.1.0/README.md new file mode 100644 index 0000000000..ae82754f52 --- /dev/null +++ b/packages/preview/modern-hfut-report/0.1.0/README.md @@ -0,0 +1,50 @@ +# 合肥工业大学课程现代设计报告模板 + +A modern report template for HFUT (unofficial) + +这是合肥工业大学的现代课程设计报告模板(非官方) + +## 使用方法 + +开始使用模板时,请先完整阅读 `template/guide.typ`及其预览,了解如何从模板开始编写自己的报告 + +### 在线编辑 + +[Typst Web App](https://typst.app/) 提供在线编辑和编译功能,适合不想在本地安装软件的用户 + +只需在 Web App 的 [Templates](https://typst.app/universe/search/?kind=templates) 中搜索「modern-hfut-report」,点击「Create project in app」即可在线创建模板 + +### 本地编辑 + +推荐使用 [VSCode](https://code.visualstudio.com/download) + [Tinymist](https://marketplace.visualstudio.com/items?itemName=myriad-dreamin.tinymist) 插件进行本地编辑 + +#### 方法一:使用 typst init(推荐) + +```bash +typst init @preview/modern-hfut-report:0.1.0 +cd modern-hfut-report +``` + +#### 方法二:在 VSCode 中创建 + +按下「Ctrl + Shift + P」打开命令面板,输入「Typst: Show Available Typst Templates」,从列表中选择 modern-hfut-report,点击「+」号创建项目 + +最后用 VSCode 打开生成的目录,打开 `template/report.typ` 文件,等待插件激活后点击顶部预览按钮进行预览 + +### 本地开发 + +如果你想要开发本模板,请从 [GitHub 仓库](https://github.com/KercyDing/modern-hfut-report) 克隆代码到本地,将 `template/report.typ` 首行的导入路径更换为 `"../lib.typ"` + +## 致谢 +- [modern-xmu-thesis](https://typst.app/universe/package/modern-xmu-thesis) by HPCesia,本模板借鉴了该模板的部分思路 +- [i-figured](https://typst.app/universe/package/i-figured) by RubixDev,使用起来确实很方便,功能也很强大 +- [zh-format](https://typst.app/universe/package/zh-format) by me,自己为了这碗醋才包的这顿饺子(bushi + +## 环境要求 + +- Typst 版本:0.13.1+ +- 首次使用需联网下载依赖库 + +## 许可证 + +[MIT License](LICENSE) diff --git a/packages/preview/modern-hfut-report/0.1.0/lib.typ b/packages/preview/modern-hfut-report/0.1.0/lib.typ new file mode 100644 index 0000000000..adf5972b1e --- /dev/null +++ b/packages/preview/modern-hfut-report/0.1.0/lib.typ @@ -0,0 +1,273 @@ +// =========================== +// HFUT 课程设计报告模板库 +// =========================== + +// =========================== +// 第三方库导入 +// =========================== +// 导入i-figured库用于公式和图表编号管理 +#import "@preview/i-figured:0.2.4" +// 导入格式化工具库(包含中文加粗、斜体、下划线等功能) +#import "@preview/zh-format:0.1.0": * + +// =========================== +// 主函数:报告模板配置 +// =========================== +#let hfut-report( + // 基本信息(默认为空) + title: "", + department: "", + major: "", + class: "", + author: "", + student-id: "", + supervisor: "", + date: "", + // 摘要和关键词 + abstract: [摘要内容...], + keywords: ("关键词1", "关键词2"), + // 摘要页开关(true:显示摘要页,false:不显示摘要页) + show-abstract: true, + // 目录页开关(true:显示目录页,false:不显示目录页) + show-contents: true, + // 页眉配置参数 + header-logo-height: 0.8cm, + header-title-size: 9pt, + header-line-stroke: 0.4pt, + // 段落首行缩进配置 + first-line-indent: 0em, + // equation 计数 + show-equation: i-figured.show-equation, + body, +) = { + // =========================== + // 全局样式配置 + // =========================== + + // 应用中文格式化(粗体、下划线、斜体) + show: zh-format + + // 文档元数据 + set document(author: author, title: title) + + // 页面设置 + set page( + paper: "a4", + margin: (top: 2.5cm, bottom: 2.5cm, left: 2.2cm, right: 2.2cm), + ) + + // 正文字体设置:Times New Roman + 宋体 + set text( + font: ("Times New Roman", "SimSun"), + lang: "zh", + size: 12pt, + ) + + // 段落格式设置:两端对齐 + set par( + justify: true, + leading: 0.65em, + first-line-indent: 0em, // 默认不缩进 + ) + + // 标题间距设置 + show heading: set block(above: 1.4em, below: 1em) + + // 代码块样式设置 + show raw.where(block: true): block.with( + fill: luma(240), + inset: 10pt, + radius: 4pt, + width: 100%, + stroke: 0.5pt + luma(200), + ) + + // 行内代码样式 + show raw.where(block: false): box.with( + fill: luma(240), + inset: (x: 3pt, y: 0pt), + outset: (y: 3pt), + radius: 2pt, + ) + + // 脚注格式设置:[1] [2] 格式的蓝色上标 + show footnote: set text(blue) + set footnote(numbering: "[1]") + + // 每个标题时重置计数器 + show heading: i-figured.reset-counters + + // 设置 equation 的编号(只对块级公式编号,<-> 标签取消编号) + show math.equation.where(block: true): show-equation.with( + only-labeled: false, + unnumbered-label: "-", + ) + + // 图表标题样式 + show figure.caption: set text(font: ("Times New Roman", "SimHei"), size: 10pt) + + // 表格样式 + show table: set text(size: 10pt) + + // =========================== + // 封面页 + // =========================== + { + set align(center) + set page(header: none, footer: none, numbering: none) + + v(0.5cm) + image("template/assets/HFUT_badge_zh&en_Vertical.svg", width: 7cm) + v(1cm) + + text(22pt, font: ("Times New Roman", "SimSun"))[ + *#underline[#title] 课程设计报告* + ] + + v(3cm) + + grid( + columns: (auto, 14em), + rows: auto, + gutter: 1em, + row-gutter: 1.2em, + align: (right, center), + + text(18pt, font: ("Times New Roman", "SimSun"))[*学  院:*], + u(width: 15em, offset: 0.35em)[#text(16pt)[#department]], + + text(18pt, font: ("Times New Roman", "SimSun"))[*专  业:*], + u(width: 15em, offset: 0.35em)[#text(16pt)[#major]], + + text(18pt, font: ("Times New Roman", "SimSun"))[*班  级:*], + u(width: 15em, offset: 0.35em)[#text(16pt)[#class]], + + text(18pt, font: ("Times New Roman", "SimSun"))[*姓  名:*], + u(width: 15em, offset: 0.35em)[#text(16pt)[#author]], + + text(18pt, font: ("Times New Roman", "SimSun"))[*学  号:*], + u(width: 15em, offset: 0.35em)[#text(16pt)[#student-id]], + + text(18pt, font: ("Times New Roman", "SimSun"))[*指导教师:*], + u(width: 15em, offset: 0.35em)[#text(16pt)[#supervisor]], + ) + + v(2cm) + text(16pt)[#if date == "today" { datetime.today().display("[year]年[month]月[day]日") } else { date }] + + pagebreak() + } + + // =========================== + // 摘要页 + // =========================== + if show-abstract { + set page(header: none, footer: none, numbering: none) + set align(center) + + text(18pt, font: ("Times New Roman", "SimSun"))[*摘 要*] + v(1.5em) + + set align(left) + set par(first-line-indent: 0em) + + abstract + v(2em) + + set par(first-line-indent: 0em) + text(font: ("Times New Roman", "SimSun"))[*关键词:*] + keywords.join(";") + + pagebreak() + } + + // =========================== + // 正文页眉页脚设置 + // =========================== + set page( + header: [ + #grid( + columns: (auto, 1fr), + align: (left + top, right + top), + gutter: 0.5em, + image("template/assets/HFUT_badge_zh_Horizontal.svg", height: header-logo-height), + [ + #v(0.8em) + #text(15pt, font: ("Times New Roman", "SimSun"))[*#title*] + ], + ) + #v(-1.0em) + #line(length: 100%, stroke: header-line-stroke) + ], + footer: context align(center)[ + #text(10pt)[合肥工业大学 - 第 #counter(page).display("1") 页] + ], + numbering: "1", + ) + + counter(page).update(1) + + // =========================== + // 目录页 + // =========================== + if show-contents { + // 居中显示目录标题 + align(center)[ + #text(18pt, font: ("Times New Roman", "SimSun"))[*目 录*] + ] + + v(1.5em) + + outline( + title: none, + depth: 3, + indent: auto, + ) + + pagebreak() + } + + // =========================== + // 标题样式配置 + // =========================== + // 设置标题自动编号 + set heading(numbering: "1.1.1") + + show heading.where(level: 1): it => { + // 一级标题:黑体加粗,视觉突出 + set text(font: ("Times New Roman", "SimHei"), weight: "bold", size: 18pt) + set align(center) + + v(0.5em) + if it.numbering != none { + block[#counter(heading).display() #it.body] + } else { + block[#it.body] + } + v(0.5em) + } + + show heading.where(level: 2): it => { + // 二级标题:宋体加粗,避免与一级标题冲突 + set text(font: ("Times New Roman", "SimSun"), weight: "bold", size: 15pt) + if it.numbering != none { + block[#counter(heading).display() #it.body] + } else { + block[#it.body] + } + } + + show heading.where(level: 3): it => { + // 三级标题:宋体加粗,保持层次一致性 + set text(font: ("Times New Roman", "SimSun"), weight: "bold", size: 13pt) + if it.numbering != none { + block[#counter(heading).display() #it.body] + } else { + block[#it.body] + } + } + + // =========================== + // 正文内容 + // =========================== + body +} diff --git a/packages/preview/modern-hfut-report/0.1.0/template/assets/HFUT_badge.svg b/packages/preview/modern-hfut-report/0.1.0/template/assets/HFUT_badge.svg new file mode 100644 index 0000000000..5cbce4e2c6 --- /dev/null +++ b/packages/preview/modern-hfut-report/0.1.0/template/assets/HFUT_badge.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/preview/modern-hfut-report/0.1.0/template/assets/HFUT_badge_zh&en_Horizontal.svg b/packages/preview/modern-hfut-report/0.1.0/template/assets/HFUT_badge_zh&en_Horizontal.svg new file mode 100644 index 0000000000..f214f2d83e --- /dev/null +++ b/packages/preview/modern-hfut-report/0.1.0/template/assets/HFUT_badge_zh&en_Horizontal.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/preview/modern-hfut-report/0.1.0/template/assets/HFUT_badge_zh&en_Vertical.svg b/packages/preview/modern-hfut-report/0.1.0/template/assets/HFUT_badge_zh&en_Vertical.svg new file mode 100644 index 0000000000..915ab31b9b --- /dev/null +++ b/packages/preview/modern-hfut-report/0.1.0/template/assets/HFUT_badge_zh&en_Vertical.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/preview/modern-hfut-report/0.1.0/template/assets/HFUT_badge_zh_Horizontal.svg b/packages/preview/modern-hfut-report/0.1.0/template/assets/HFUT_badge_zh_Horizontal.svg new file mode 100644 index 0000000000..e7ac59e2cf --- /dev/null +++ b/packages/preview/modern-hfut-report/0.1.0/template/assets/HFUT_badge_zh_Horizontal.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/preview/modern-hfut-report/0.1.0/template/assets/HFUT_badge_zh_Vertical.svg b/packages/preview/modern-hfut-report/0.1.0/template/assets/HFUT_badge_zh_Vertical.svg new file mode 100644 index 0000000000..100d602603 --- /dev/null +++ b/packages/preview/modern-hfut-report/0.1.0/template/assets/HFUT_badge_zh_Vertical.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/packages/preview/modern-hfut-report/0.1.0/template/assets/HFUT_zh&en.svg b/packages/preview/modern-hfut-report/0.1.0/template/assets/HFUT_zh&en.svg new file mode 100644 index 0000000000..add4186b19 --- /dev/null +++ b/packages/preview/modern-hfut-report/0.1.0/template/assets/HFUT_zh&en.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/preview/modern-hfut-report/0.1.0/template/assets/HFUT_zh.svg b/packages/preview/modern-hfut-report/0.1.0/template/assets/HFUT_zh.svg new file mode 100644 index 0000000000..90e6c505aa --- /dev/null +++ b/packages/preview/modern-hfut-report/0.1.0/template/assets/HFUT_zh.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/preview/modern-hfut-report/0.1.0/template/guide.typ b/packages/preview/modern-hfut-report/0.1.0/template/guide.typ new file mode 100644 index 0000000000..cec7d5b526 --- /dev/null +++ b/packages/preview/modern-hfut-report/0.1.0/template/guide.typ @@ -0,0 +1,585 @@ +#import "@preview/modern-hfut-report:0.1.0": * + +#show: doc => hfut-report( + title: "模板使用指南", + department: "填写你的学院", + major: "填写你的专业", + class: "填写你的班级", + author: "填写你的名字", + student-id: "填写你的学号", + supervisor: "填写你的导师", + date: "today", + show-abstract: true, + show-contents: true, + abstract: [ + 本文档是合肥工业大学课程设计报告模板的使用指南。本模板基于 Typst 构建,提供了完整的课程设计报告格式,包括封面、摘要、目录、正文、参考文献和附录等部分。 + + 模板采用分层的标题样式设计,一级标题使用黑体加粗,二级和三级标题使用宋体加粗,确保视觉层次清晰。同时提供了自动编号、灵活的日期设置、代码块美化等实用功能。 + + 建议用户在使用前完整阅读本指南,以充分了解模板的功能和使用方法。 + ], + keywords: ("Typst", "课程设计", "报告模板", "合肥工业大学"), + doc +) + += 使用说明 + +== 环境配置 + +首先,需要配置好 Typst 环境。推荐以下两种方式: + +=== 在线编辑 + +Typst Web App#footnote[https://typst.app,Typst App官网] 提供在线编辑和编译功能,适合不想在本地安装软件的用户。 + +只需在Web App Templates#footnote[https://typst.app/universe/search/?kind=templates,Typst模板市场]中搜索「modern-hfut-report」即可进入详情页,点击「Create project in app」即可在线编辑。 + +=== 本地编辑 + +这一部分可具体参考小蓝书#footnote[https://typst-doc-cn.github.io/tutorial,Typst中文教程]。 + ++ 首先安装Typst环境: + + *Windows用户*:推荐使用Winget安装(终端) + ```powershell + winget install --id Typst.Typst + ``` + + + *macOS用户*:推荐使用Homebrew安装(终端) + ```bash + brew install typst + ``` + + + *Linux用户*:大多数发行版的包管理器都已收录Typst + ```bash + # Ubuntu/Debian + sudo apt install typst + + # Arch Linux + sudo pacman -S typst + + # Fedora + sudo dnf install typst + ``` + ++ 推荐使用 VSCode + Tinymist 插件进行本地编辑: + + 在官网#footnote[https://code.visualstudio.com/download,VSCode下载链接] 下载安装 VSCode + + 在扩展市场中搜索并安装 Tinymist 插件 + + 用VSCode打开项目即可本地编辑 + +== 快速开始 + +=== 创建新项目 + +```bash +typst init @preview/modern-hfut-report:0.1.0 +cd modern-hfut-report +``` + +=== 编辑配置 + +编辑 `main.typ` 文件,修改个人信息: + +```typst +#show: doc => hfut-report( + title: "数据结构与算法", // 课程名称 + department: "计算机与信息学院", // 学院 + major: "计算机科学与技术", // 专业 + class: "计算机2023-1班", // 班级 + author: "张三", // 姓名 + student-id: "2023114514", // 学号 + supervisor: "李四", // 指导教师 + date: "today", // 日期 + // ... 其他配置 + doc +) +``` + +=== 编译输出 + +- *在线编辑*:点击「Share」按钮右侧的下载图标导出PDF +- *本地编辑*:在 VSCode 文件顶部选择「预览」和「导出PDF」可以实现对应功能(需要Tinymist插件) + += 模板功能 + +== 参数配置 + +模板提供了丰富的配置参数: + +=== 必填参数 +- `title`: 课程名称 +- `department`: 学院名称 +- `major`: 专业名称 +- `class`: 班级 +- `author`: 学生姓名 +- `student-id`: 学号 +- `supervisor`: 指导教师 + +=== 可选参数 +- `date`: 日期设置 + - `"today"`: 自动使用今天日期(推荐) + - `"2025年6月25日"`: 手动指定具体日期 +- `abstract`: 摘要内容 +- `keywords`: 关键词数组 + +== 字体系统 + +模板采用分层的字体设计,符合学术规范: + +=== 一级标题 +- *字体*: 黑体加粗 + 18pt +- *用途*: 主要章节标题(如"引言"、"结论") +- *特点*: 视觉突出,居中显示 + +=== 二级/三级标题 +- *字体*: 宋体加粗 + 15pt/13pt +- *用途*: 章节子标题 +- *特点*: 通过 zh-format 库实现加粗效果 + +=== 正文与标签 +- *正文*: 宋体 12pt +- *重要标签*: 宋体加粗(如"关键词:") + +== 自动功能 + +=== 自动编号 +标题支持多级自动编号: +- 一级标题: 1, 2, 3... +- 二级标题: 1.1, 1.2, 2.1... +- 三级标题: 1.1.1, 1.1.2... + +=== 自动生成 +- 目录自动生成,支持3级标题 +- 页眉页脚自动添加 +- 页码自动编号 + += 使用示例 + +== 标题层次 + +```typst += 一级标题 +== 二级标题 +=== 三级标题 +``` + +效果演示: + += 一级标题示例 + +== 二级标题示例 + +=== 三级标题示例 + +这里是正文内容,使用宋体 12pt 字号。 + +== 段落缩进 + +模板默认*不启用全局段落首行缩进*,需要缩进时手动添加 `#h(2em)` 即可。 + +=== 不缩进的段落(默认) + +```typst +这是一段普通文本,段首不会自动缩进。 +``` + +效果: + +这是一段普通文本,段首不会自动缩进。 + +=== 缩进的段落(手动添加) + +```typst +#h(2em)这是一段需要缩进的文本,使用 #h(2em) 手动添加两个字符的缩进。 +``` + +效果: + +#h(2em)这是一段需要缩进的文本,使用 #h(2em) 手动添加两个字符的缩进。 + +=== 混合使用 + +```typst +第一段不缩进,直接书写即可。 + +#h(2em)第二段需要缩进,在段首添加这个。 + +第三段又不缩进了。 +``` + +效果: + +第一段不缩进,直接书写即可。 + +#h(2em)第二段需要缩进,在段首添加这个。 + +第三段又不缩进了。 + +== 列表 + +=== 有序列表 + ++ 第一项 ++ 第二项 + + 子项目一 + + 子项目二 + +=== 无序列表 + +- 无序项目一 +- 无序项目二 + - 无序子项目 + +=== 术语列表 + +/ Typst: 现代化的排版系统 +/ 模板: 预定义的文档格式 + +== 图表 + +引用图表时需要添加相应前缀:图片用 `@fig:`,表格用 `@tbl:`。 + +#figure( + table( + columns: 3, + stroke: 0.5pt, + [项目], [描述], [状态], + [封面], [自动生成], [✓], + [目录], [自动生成], [✓], + [编号], [自动编号], [✓], + ), + caption: "模板功能列表" +) + +如@tbl:功能列表 所示,模板提供了完整的自动化功能。 + +=== 插入图片 + +使用 `image()` 函数插入图片,支持设置宽度、高度等参数: + +```typst +#figure( + image("assets/HFUT_badge_zh&en_Vertical.svg", width: 60%), + caption: "合肥工业大学校徽" +) +``` +// 使用pagebreak强制换页 +#pagebreak() + +效果: + +#figure( + image("assets/HFUT_badge_zh&en_Vertical.svg", width: 60%), + caption: "合肥工业大学校徽" +) + +引用图片:如@fig:校徽 所示,这是合肥工业大学的校徽标识。 + +=== 数学绘图 + +一般建议将绘图部分放在 Python 或 MATLAB 等软件中完成,然后导入生成的图像。不过 Typst 也提供了一些绘图包,如 lilaq#footnote[https://typst.app/universe/package/lilaq] 包,可以直接在文档中绘制函数图像。 + +以下是 $sin x$ 的函数图像示例: + +#figure( + { + import "@preview/lilaq:0.3.0" as lq + let x = lq.linspace(0, 10) + lq.diagram( + title: [$sin x$ 的函数图像], + xlabel: $x$, + ylabel: $y$, + + lq.plot(x, x.map(x => calc.sin(x))), + ) + }, + caption: "数学绘图示例" +) + +=== 流程图绘制 + +对于复杂的图形,建议使用「所见即所得」式的绘图工具绘制。Typst 也有专门的绘图包: +- *cetz*#footnote[https://typst.app/universe/package/cetz]:基础绘图包,类似 LaTeX 的 tikz +- *fletcher*#footnote[https://typst.app/universe/package/fletcher]:专注于流程图和图表绘制 + +以下使用 fletcher 包绘制数学图表: + +#figure( + { + import "@preview/fletcher:0.5.8": diagram, node, edge + diagram( + cell-size: 15mm, + $ + G edge(f, ->) edge("d", pi, ->>) & im(f) \ + G slash ker(f) edge("ur", tilde(f), "hook-->") + $, + ) + }, + caption: "数学图表示例" +) + +更实用的流程图示例(横向): + +#figure( + { + import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge + diagram( + node-stroke: 1pt, + edge-stroke: 1pt, + node((0,0), [开始], corner-radius: 5pt, extrude: (0, 3)), + edge("-|>"), + node((1,0), [输入数据], corner-radius: 2pt), + edge("-|>"), + node((2,0), [处理], corner-radius: 2pt), + edge("-|>"), + node((3,0), [输出结果], corner-radius: 2pt), + edge("-|>"), + node((4,0), [结束], corner-radius: 5pt, extrude: (0, 3)), + ) + }, + caption: "横向流程图示例" +) + +纵向流程图示例(带分支判断): + +#figure( + { + import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge + diagram( + node-stroke: 1pt, + edge-stroke: 1pt, + spacing: (15mm, 10mm), + + // 开始 + node((1, 0), [开始], corner-radius: 5pt, extrude: (0, 3)), + edge("-|>"), + + // 输入 + node((1, 1), [输入数据], corner-radius: 2pt), + edge("-|>"), + + // 第一个判断条件 + node((1, 2), [数据有效?], shape: fletcher.shapes.diamond), + + // 左分支:无效 + edge((1, 2), (0, 3), "-|>", [否], label-side: left), + node((0, 3), [错误处理], corner-radius: 2pt), + edge((0, 3), (1, 6), "-|>"), + + // 右分支:有效 + edge((1, 2), (2, 3), "-|>", [是], label-side: right), + node((2, 3), [数据处理], corner-radius: 2pt), + edge((2, 3), (2, 4), "-|>"), + + // 第二个判断 + node((2, 4), [需要保存?], shape: fletcher.shapes.diamond), + + // 保存分支:是 + edge((2, 4), (3, 5), "-|>", [是], label-side: right), + node((3, 5), [保存结果], corner-radius: 2pt), + edge((3, 5), (1, 6), "-|>"), + + // 不保存分支:否 + edge((2, 4), (1, 6), "-|>", [否], label-side: left), + + // 所有分支汇合到输出结果 + node((1, 6), [输出结果], corner-radius: 2pt), + edge("-|>"), + + // 结束 + node((1, 7), [结束], corner-radius: 5pt, extrude: (0, 3)), + ) + }, + caption: "纵向流程图示例" +) + + +== 数学公式 + +=== 行内公式 +可以在文中插入行内公式,如 $E = m c^2$。 + +=== 行间公式 +带编号的行间公式: +// <>中无需写eqt: +$ sum_(i=1)^n i = (n(n+1))/2 $ <求和公式> + +引用公式 @eqt:求和公式,我们可以得到... + +不带编号的公式: +// 后面加上 <-> +$ integral_0^1 x^2 dif x = 1/3 $ <-> + +== 文本格式 + +=== 加粗 + +对于中文,模板通过 zh-format 库实现加粗效果。 + +使用 `*文本*` 创建加粗效果: + +```typst +这是*加粗文本*的示例。 +``` + +效果: + +这是*加粗文本*的示例。 + +=== 斜体与倾斜 + +对于中文,模板通过 zh-format 库实现倾斜效果。 + +使用 `_文本_` 创建倾斜效果: + +```typst +英文斜体:_italic text_ +中文倾斜:_这是倾斜的中文_ +混合文本:_中英混合 mixed text_ +``` + +效果: + +英文斜体:_italic text_ + +中文倾斜:_这是倾斜的中文_ + +混合文本:_中英混合 mixed text_ + +=== 组合使用 + +可以组合使用加粗和斜体: + +```typst +英文:*加粗* 和 _italic_ 以及 *_加粗斜体_* + +中文:*加粗* 和 _倾斜_ 以及 *_加粗倾斜_* + +混合:*Bold* 和 _斜体_ 以及 *_Bold斜体_* +``` + +效果: + +英文:*加粗* 和 _italic_ 以及 *_加粗斜体_* + +中文:*加粗* 和 _倾斜_ 以及 *_加粗倾斜_* + +混合:*Bold* 和 _斜体_ 以及 *_Bold斜体_* + +=== 其他文本样式 + +```typst +- 删除线:#strike[删除的文本] +- 下划线:#underline[重要内容] +- 下标:H#sub[2]O +- 上标:x#super[2] +``` + +效果: + +- 删除线:#strike[删除的文本] +- 下划线:#underline[重要内容] +- 下标:H#sub[2]O +- 上标:x#super[2] + +*下划线说明*: + +本模板自动修正了中文字体下划线显示为虚线的问题。 + +1. *自动宽度下划线*:使用 `#underline[文本]`,下划线长度自动匹配文本宽度 + +```typst +#underline[中文下划线] 和 #underline[English underline] +``` + +效果:#underline[中文下划线] 和 #underline[English underline] + +2. *自定义下划线*:使用 `#u(width: 长度, offset: 偏移量)[文本]` 自定义下划线宽度和位置 + +参数说明: +- `width`: 下划线的宽度(如 `10em`、`15em`) +- `offset`: 下划线向下的偏移量(如 `0.35em`、`0.4em`),数值越大,下划线越靠下 + +```typst +#u(width: 10em)[姓名] +#u(width: 15em, offset: 0.4em)[学号:2023114514] +``` + +效果: + +#u(width: 10em)[姓名] + +#u(width: 15em, offset: 0.4em)[学号:2023114514] + +== 代码 + +=== 行内代码 +使用 `python main.py` 命令执行代码。 + +=== 代码块 + +```python +def fibonacci(n): + """计算斐波那契数列""" + if n <= 1: + return n + return fibonacci(n-1) + fibonacci(n-2) + +# 使用示例 +for i in range(10): + print(f"F({i}) = {fibonacci(i)}") +``` + +代码块支持语法高亮,并有美化的边框和背景。 + +```typst +// Typst 代码示例 +#let greet(name) = [Hello, #name!] +#greet("World") +``` + += 高级功能 + +== 自定义样式 + +如果需要自定义样式,可以: + ++ *修改参数*: 通过模板参数调整基本设置 ++ *扩展样式*: 在文档中添加自定义 `show` 规则 ++ *Fork 模板*: 对于深度定制,建议 fork 模板仓库 + +== 常见问题 + +=== 字体问题 +- 确保系统中安装了宋体和黑体 +- zh-format 库会自动处理中文字体加粗、斜体和下划线 + +=== 编译问题 +- 检查 Typst 版本(推荐 0.11.0+) +- 确保网络连接正常(首次需要下载依赖) + +=== 图片问题 +- 图片文件需要放在正确的相对路径 +- 支持 PNG、JPG、SVG 格式 + +== 依赖管理 + +模板使用的外部依赖: +- `zh-format`: 中文格式化支持 +- `i-figured`: 公式和图表编号管理 + +所有依赖会在初始化时自动安装,无需手动配置。 + += 贡献与反馈 + +欢迎贡献代码改进模板: ++ Fork 项目仓库 ++ 创建功能分支 ++ 提交 Pull Request + += 致谢 + +感谢 Typst 社区的支持,以及参考的各种优秀模板项目。 + +特别感谢: +- Typst 开发团队 +- 所有第三方依赖库作者 \ No newline at end of file diff --git a/packages/preview/modern-hfut-report/0.1.0/template/report.typ b/packages/preview/modern-hfut-report/0.1.0/template/report.typ new file mode 100644 index 0000000000..d46361e129 --- /dev/null +++ b/packages/preview/modern-hfut-report/0.1.0/template/report.typ @@ -0,0 +1,182 @@ +#import "@preview/modern-hfut-report:0.1.0": * + +#show: doc => hfut-report( + title: "数据结构与算法", + department: "计算机与信息学院", + major: "计算机科学与技术", + class: "计算机2023-1班", + author: "张三", + student-id: "2023114514", + supervisor: "李四", + // 日期设置方式(二选一): + // 方式1:自动使用今天日期 + date: "today", + // 方式2:手动设置具体日期(取消注释并替换) + // date: "2025年12月25日", + show-abstract: true, // 或者 false 来关闭摘要页 + show-contents: true, // 或者 false 来关闭目录 + abstract: [ + 本课程设计主要研究... + + 通过本次课程设计,深入理解了... + + 实验结果表明... + ], + keywords: ("关键词1", "关键词 2", "关键词 3"), + doc +) + += 引言 + +本课程设计的目的是...... + +== 研究背景 + +随着......的发展,...... + +== 研究目标 + +本课程设计的主要目标包括: +1. ...... +2. ...... +3. ...... + += 相关技术介绍 + +== 基本概念 + +...... + +== 技术原理 + +=== 算法复杂度分析 + +对于*排序算法*,我们通常用大O记号来表示其时间复杂度。例如,快速排序的平均时间复杂度为: + +$ T(n) = O(n log n) $ + +其中,$n$ 表示待排序元素的个数。 + += 算法设计 + +== 总体设计 + +算法的基本执行流程如下图所示: + +#figure( + { + import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge + diagram( + node-stroke: 1pt, + edge-stroke: 1pt, + node((0,0), [输入数据], corner-radius: 2pt), + edge("-|>"), + node((1,0), [数据处理], corner-radius: 2pt), + edge("-|>"), + node((2,0), [核心算法], corner-radius: 2pt), + edge("-|>"), + node((3,0), [输出结果], corner-radius: 2pt), + ) + }, + caption: "算法执行流程图" +) + +== 详细设计 + +=== 模块一 + +...... + +=== 模块二 + +...... + += 算法实现 + +== 开发环境 + +本系统的开发环境如下: +- 操作系统:...... +- 开发工具:...... +- 编程语言:...... + +== 核心代码 + +```python +# Sample Code +def example_function(): + print("Hello, HFUT!") + return True +``` + +== 关键技术 + +...... + += 测试与分析 + +== 测试方案 + +...... + +== 测试结果 + +测试结果如表所示: + +#figure( + table( + columns: 4, + stroke: 0.5pt, + [测试项目], [期望结果], [实际结果], [是否通过], + [功能测试1], [...], [...], [...], + [功能测试2], [...], [...], [...], + [性能测试], [...], [...], [...], + ), + caption: "测试结果表" +) + +== 结果分析 + +...... + += 总结与展望 + +== 工作总结 + +通过本次课程设计,我...... + +== 存在问题 + +在实现过程中,发现以下问题: +1. ...... +2. ...... + +== 改进方向 + +未来可以从以下方面进行改进: +1. ...... +2. ...... + +#pagebreak() + += 参考文献 + +1. 作者1, 作者2. 文献标题[J]. 期刊名称, 年份, 卷(期): 页码. + +2. 作者. 书籍标题[M]. 出版地: 出版社, 年份. + +3. 作者. 网页标题[EB/OL]. 网址, 访问日期. + +#pagebreak() + += 附录 + +== 附录A:完整代码 + +```python +# Complete Code +``` + +== 附录B:测试数据 + +...... \ No newline at end of file diff --git a/packages/preview/modern-hfut-report/0.1.0/thumbnail.png b/packages/preview/modern-hfut-report/0.1.0/thumbnail.png new file mode 100644 index 0000000000..ee7f56a2b4 Binary files /dev/null and b/packages/preview/modern-hfut-report/0.1.0/thumbnail.png differ diff --git a/packages/preview/modern-hfut-report/0.1.0/typst.toml b/packages/preview/modern-hfut-report/0.1.0/typst.toml new file mode 100644 index 0000000000..6b11812b4a --- /dev/null +++ b/packages/preview/modern-hfut-report/0.1.0/typst.toml @@ -0,0 +1,17 @@ +[package] +name = "modern-hfut-report" +version = "0.1.0" +compiler = "0.13.1" +entrypoint = "lib.typ" +repository = "https://github.com/KercyDing/modern-hfut-report" +authors = ["KercyDing "] +license = "MIT" +description = "合肥工业大学课程现代设计报告模板。Modern report template for HFUT." +keywords = ["hfut", "HFUT", "report", "合肥工业大学", "报告"] +exclude = ["*.pdf"] +categories = ["report"] + +[template] +path = "template" +entrypoint = "report.typ" +thumbnail = "thumbnail.png"