Skip to content

Commit 6f83198

Browse files
committed
feat: add heading
1 parent 7f3a99a commit 6f83198

File tree

3 files changed

+76
-10
lines changed

3 files changed

+76
-10
lines changed

README.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
😅 因为 Typst 实在太新了,以至于不支持某些功能,导致我并不能把论文模板具有的要素全部复刻出来。等某些功能支持了,再陆陆续续完善吧。
1212

13-
欢迎任何 PR 帮助完善这个模板。
13+
欢迎提出任何 Issue 和 PR 帮助完善这个模板。
1414

1515

1616

@@ -31,15 +31,17 @@
3131

3232
## 尚未实现
3333

34-
- [ ] 目录结构
34+
- [ ] 目录
35+
- [x] 一级序号和标题居中;二级序号和标题顶格;三级及以下标题“首行缩进” 2 字符
3536
- [ ] 图片
3637
- [ ] 表格
37-
- [ ] 页面脚注(由于 Typst 还不支持 footnote ,但开发人员说后续会加上的)
38+
- [ ] 页面脚注(开发人员说后续会加上的 [#222](https://github.com/typst/typst/discussions/222)
39+
- [ ] 页码字体改为楷体
3840

3941
...
4042

4143

4244

4345
## 已知问题
4446

45-
- [ ] 默认第一段的段首无法自动空两格,必须要自己额外给第一段添加
47+
- [x] 默认第一段的段首无法自动空两格,必须要自己额外给第一段添加

main.typ

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
title-zh: "这是一个毕业设计的中文标题",
55
abstract-zh: [
66
中文摘要。
7-
7+
88
长中文摘要长中文摘要长中文摘要长中文摘要长中文摘要长中文摘要长中文摘要长中文摘要长中文摘要。
99

1010
中 English 混杂测试。
@@ -30,4 +30,26 @@
3030
#lorem(20)
3131

3232
==== 四级标题
33+
#lorem(10)
34+
35+
== 二级标题2
36+
#lorem(20)
37+
38+
=== 三级标题2
39+
#lorem(20)
40+
41+
42+
= 一级标题2
43+
#lorem(20)
44+
45+
== 二级标题
46+
#lorem(20)
47+
48+
=== 三级标题
49+
#lorem(20)
50+
51+
== 二级标题2
52+
#lorem(20)
53+
54+
=== 三级标题2
3355
#lorem(20)

template.typ

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#let HeiTi = "Noto Sans CJK SC"
44
#let SongTi = "Noto Serif CJK SC"
5+
#let KaiTi = "FZKai-Z03"
56

67
#let BUPTBachelorThesis(
78
title-zh: "",
@@ -18,7 +19,7 @@
1819
) = {
1920
set page(paper: "a4", margin: 2.5cm)
2021

21-
// Display Chinese abstract
22+
// =========== Chinese abstract ===========
2223
set text(font: HeiTi, weight: "bold")
2324
align(center)[
2425
#text(size: 16pt, title-zh) \ \
@@ -34,12 +35,12 @@
3435
text(font: HeiTi, weight: "bold", size: 12pt, "关键词")
3536
text(size: 12pt,
3637
for value in keywords-zh {
37-
box(width: 1em) + value
38+
h(1em) + value
3839
}
3940
)
4041
pagebreak()
4142

42-
// Display English abstract
43+
// =========== English abstract ===========
4344
set text(font: "Times New Roman", weight: "bold")
4445
align(center)[
4546
#text(size: 16pt, title-en) \ \
@@ -52,12 +53,53 @@
5253
text(font: "Times New Roman", weight: "bold", size: 12pt, "KEY WORDS")
5354
text(size: 12pt,
5455
for value in keywords-en {
55-
box(width: 1em) + value
56+
h(1em) + value
5657
}
5758
)
5859
pagebreak()
5960

60-
// Display contents
61+
// =========== Table of content ===========
62+
set page(numbering: "I")
63+
counter(page).update(1)
64+
align(center)[
65+
#outline(
66+
title: text(font: HeiTi, weight: "bold", tracking: 2em, size: 16pt, [目录\ \ ]),
67+
depth: 3,
68+
)
69+
]
70+
pagebreak()
71+
72+
// =========== Configure headings ===========
73+
let chineseNumMap(num) = {
74+
let chineseNum = (
75+
"", "", "", "", "", "", "", "", "", "",
76+
"十一", "十二", "十三", "十四", "十五", "十六", "十七", "十八", "十九", "二十")
77+
chineseNum.at(num - 1)
78+
}
79+
80+
set heading(numbering: "1.1")
81+
show heading: it => locate(loc => {
82+
let levels = counter(heading).at(loc)
83+
84+
// reset par first
85+
set par(first-line-indent: 0em)
86+
set text(font: HeiTi, weight: "bold")
87+
88+
if it.level == 1 {
89+
align(center)[
90+
#text(size: 16pt, [第#chineseNumMap(levels.at(0))章#h(1em)#it.body])
91+
]
92+
} else if it.level == 2 {
93+
numbering("1.1", ..levels)
94+
text(size: 14pt, h(1em) + it.body)
95+
} else {
96+
set par(first-line-indent: 2em)
97+
numbering("1.1", ..levels)
98+
text(size: 12pt, h(1em) + it.body)
99+
}
100+
})
101+
102+
// =========== Contents ===========
61103
set page(numbering: "1")
62104
counter(page).update(1)
63105
body

0 commit comments

Comments
 (0)