Skip to content

Commit 916362e

Browse files
committed
initial typst test
1 parent 5ba24db commit 916362e

17 files changed

+329
-0
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
build/

CMakeLists.txt

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
cmake_minimum_required(VERSION 3.12)
2+
3+
set(CMAKE_CXX_STANDARD 23)
4+
5+
project(main)
6+
7+
if (MSVC)
8+
add_compile_options(/Zc:preprocessor /utf-8 /DNOMINMAX)
9+
else()
10+
add_compile_options(-Wall -Wextra -Werror=return-type)
11+
endif()
12+
13+
file(GLOB sources CONFIGURE_DEPENDS "*.cpp")
14+
foreach(source IN LISTS sources)
15+
get_filename_component(name ${source} NAME_WE)
16+
add_executable(${name} ${source})
17+
endforeach()

book.typ

+238
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,238 @@
1+
// https://www.fonts.net.cn/fonts-zh/tag-kaiti-1.html
2+
3+
#set text(
4+
font: "Noto Serif CJK SC",
5+
size: 7pt,
6+
)
7+
#set page(
8+
paper: "a6",
9+
margin: (x: 1.8cm, y: 1.5cm),
10+
header: align(right, text(5pt)[
11+
小彭大典
12+
]),
13+
numbering: "1",
14+
)
15+
#set par(justify: true)
16+
#set heading(numbering: "1.")
17+
#show "小彭大典": name => box[
18+
#text(font: "Arial")[✝️]小彭大典#text(font: "Arial")[✝️]
19+
]
20+
#let fun = body => box[
21+
#box(image(
22+
"pic/awesomeface.png",
23+
height: 1em,
24+
))
25+
#text(font: "Aa扁雅楷", size: 0.9em, fill: rgb("#cd9f0f"))[#body]
26+
]
27+
#let tip = body => box[
28+
#box(image(
29+
"pic/bulb.png",
30+
height: 1em,
31+
))
32+
#text(font: "Aa扁雅楷", size: 1em, fill: rgb("#4f8b4f"))[#body]
33+
]
34+
#let warn = body => box[
35+
#box(image(
36+
"pic/warning.png",
37+
height: 1em,
38+
))
39+
#text(font: "Aa扁雅楷", size: 1em, fill: rgb("#ed6c6c"))[#body]
40+
]
41+
#let space = block[]
42+
43+
#align(center, text(14pt)[
44+
*小彭老师的现代 C++ 大典*
45+
])
46+
47+
小彭大典是一本关于现代 C++ 编程的权威指南,它涵盖了从基础知识到高级技巧的内容,适合初学者和有经验的程序员阅读。本书由小彭老师亲自编写,通过简单易懂的语言和丰富的示例,帮助读者快速掌握 C++ 的核心概念,并学会如何运用它们来解决实际问题。
48+
49+
#fun[敢承诺:土木老哥也能看懂!]
50+
51+
= 指南
52+
53+
== 格式约定
54+
55+
这是一段示例文字
56+
57+
#tip[用这种颜色字体书写的内容是提示]
58+
59+
#warn[用这种颜色字体书写的内容是警告]
60+
61+
#fun[用这种颜色字体书写的内容是笑话或趣味寓言故事]
62+
63+
/ 术语: 这是术语的定义
64+
65+
- 首先
66+
- 其次
67+
- 然后
68+
- 最后
69+
70+
```cpp
71+
// 这是一段示例代码
72+
73+
template <class T>
74+
decltype(T().foo(), std::true_type{}) has_foo(int);
75+
76+
template <class T>
77+
std::false_type has_foo(...);
78+
79+
if constexpr (decltype(has_foo<T>(0))::value) {
80+
T().foo();
81+
} else {
82+
otherwise();
83+
}
84+
```
85+
86+
= 开始
87+
88+
== 什么是函数
89+
90+
/ 函数: 一段用 `{}` 包裹的代码块,有一个独一无二的名字做标识。函数可以被其他函数调用。函数可以有返回值和参数。函数的 `{}` 代码块内的程序代码,每次该函数被调用时都会执行。
91+
92+
```cpp
93+
int compute()
94+
{
95+
return 42;
96+
}
97+
```
98+
99+
上面的代码中,`compute` 就是函数的名字,`int` 表示函数的返回类型——整数。
100+
101+
#tip[乃取整数之英文#quote[integer]的#quote[int]而得名]
102+
103+
`{}` 包裹的是函数体,是函数被调用时会执行的代码。
104+
105+
此处 `return 42` 就是函数体内的唯一一条语句,表示函数立即执行完毕,返回 42。
106+
107+
/ 返回值: 当一个函数执行完毕时,会向调用该函数的调用者返回一个值,这个值就是 `return` 后面的表达式的值。返回值可以有不同的类型,此处 `compute` 的返回类型是 `int`,也就是说 `compute` 需要返回一个整数。
108+
109+
#tip[关于函数的参数我们稍后再做说明。]
110+
111+
== 从 main 函数说起
112+
113+
C++ 程序通常由一系列函数组成,其中必须有一个名为 `main` 的函数作为程序的入口点。
114+
115+
main 函数的定义如下:
116+
117+
```cpp
118+
int main()
119+
{
120+
}
121+
```
122+
123+
程序启动时,操作系统会调用 `main` 函数。
124+
125+
#tip[严格来说,是 C++ 运行时调用了 `main` 函数,但目前先理解为#quote[操作系统调用了 `main` 函数]也无妨。]
126+
127+
要把程序发展壮大,我们可以让 `main` 函数调用其他函数,也可以直接在 `main` 函数中编写整个程序的逻辑(不推荐)。
128+
129+
#fun[因此,`main` 可以被看作是#quote[宇宙大爆炸]。]
130+
131+
== main 函数返回值
132+
133+
```cpp
134+
int main()
135+
{
136+
return 0;
137+
}
138+
```
139+
140+
`return` 表示函数的返回,main 函数返回,即意味着程序的结束。
141+
142+
main 函数总是返回一个整数 (`int` 类型),用这个整数向操作系统表示程序退出的原因。
143+
144+
如果程序正常执行完毕,正常结束退出,那就请返回 0。
145+
146+
返回一个不为 0 的整数可以表示程序出现了异常,是因为出错了才退出的,值的多少可以用于表明错误的具体原因。
147+
148+
#fun[
149+
操作系统:我调用了你这个程序的 main 函数,我好奇程序是否正确执行了?让我们约定好:如果你运转正常的话,就返回0表示成功哦!如果有错误的话,就返回一个错误代码,比如返回1表示无权限,2表示找不到文件……之类的。当然,错误代码都是不为0的。
150+
]
151+
152+
== 黑色的窗口?
153+
154+
== 打印一些信息
155+
156+
```cpp
157+
int main()
158+
{
159+
std::println("Hello, World!");
160+
}
161+
```
162+
163+
以上代码会在控制台输出 `Hello, World!`
164+
165+
== 注释
166+
167+
```cpp
168+
int main()
169+
{
170+
// 小彭老师,请你在这里插入程序的逻辑哦!
171+
}
172+
```
173+
174+
这里的 `//` 是注释,注释会被编译器忽略,通常用于在程序源码中植入描述性的文本。有时也会用于多人协作项目中程序员之间互相沟通。
175+
176+
例如下面这段代码:
177+
178+
```cpp
179+
int main()
180+
{
181+
std::println("编译器伟大,无需多言");
182+
// 编译器是煞笔
183+
// 编译器是煞笔
184+
// 编译器是煞笔
185+
// 诶嘿你看不见我
186+
}
187+
```
188+
189+
在编译器看来就只是:
190+
191+
```cpp
192+
int main()
193+
{
194+
std::println("编译器伟大,无需多言");
195+
}
196+
```
197+
198+
#fun[
199+
(\*编译器脸红中\*)
200+
]
201+
202+
#space
203+
204+
C++ 支持行注释 `// xx` 和块注释 `/* xx */` 两种语法。
205+
206+
```cpp
207+
int main()
208+
{
209+
// 我是行注释
210+
/* 我是块注释 */
211+
/* 块注释
212+
可以
213+
214+
很多行 */
215+
std::println(/* 块注释也可以夹在代码中间 */"你好");
216+
std::println("世界"); // 行注释只能追加在一行的末尾
217+
std::println("早安");
218+
}
219+
```
220+
221+
#tip[
222+
在我们以后的案例代码中,都会像这样注释说明,充当*就地讲解员*的效果。去除这些注释并不影响程序的正常运行,添加文字注释只是小彭老师为了提醒你每一行的代码作用。
223+
]
224+
225+
= 函数
226+
227+
函数可以没有返回值,只需要返回类型写 `void` 即可,这样的函数调用的目的只是为了他的副作用(如修改全局变量,输出文本到控制台,修改引用参数等)。
228+
229+
```cpp
230+
void compute()
231+
{
232+
return;
233+
}
234+
```
235+
236+
#tip[对于没有返回值(返回类型为 `void`)的函数,可以省略 `return`。]
237+
238+
#warn[对于有返回值的函数,必须写 return 语句,否则程序出错。]

cover.png

1.2 MB
Loading

e1.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#include <print>
2+
3+
int main() {
4+
std::println("Hello, World!");
5+
}

pic/CPP.png

43.4 KB
Loading

pic/atom.png

14.5 KB
Loading

pic/awesomeface.png

57.9 KB
Loading

pic/bulb.png

24.2 KB
Loading

pic/gcc.png

72.4 KB
Loading

pic/json.png

38.6 KB
Loading

pic/lock.jpg

42.3 KB
Loading

pic/qt.png

127 KB
Loading

pic/queue.png

27.9 KB
Loading

pic/sunglass.png

4.84 KB
Loading

pic/warning.png

111 KB
Loading

test.typ

+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
#set text(
2+
font: "Noto Serif CJK SC",
3+
size: 7pt,
4+
)
5+
#set page(
6+
paper: "a6",
7+
margin: (x: 1.8cm, y: 1.5cm),
8+
header: align(right)[
9+
小女孩贴贴教学篇
10+
],
11+
numbering: "1",
12+
)
13+
#set par(justify: true)
14+
#set heading(numbering: "1.")
15+
#show "小女孩贴贴": name => box[
16+
$phi$#{name}$phi$
17+
]
18+
19+
#align(center, text(17pt)[
20+
*基于春卷饭世界观的一个小女孩贴贴实现*
21+
])
22+
23+
#grid(
24+
columns: (1fr, 1fr),
25+
align(center)[
26+
Baby Peng Sir \
27+
Genshin Institute \
28+
#link("mailto:[email protected]")
29+
],
30+
align(center)[
31+
Dr. Archibate \
32+
Genshin Institute \
33+
#link("mailto:[email protected]")
34+
]
35+
)
36+
37+
Keywords: 小女孩贴贴, 春卷饭, 实现, 性能测试, 可爱, 艺术表现, 想象力, 创造力, 冬天, 香香的, 吻, 百合, 好看
38+
39+
= 小女孩贴贴性能测试
40+
41+
#let count = 2
42+
43+
@cover 所示,小女孩贴贴是一种可爱的艺术表现形式。
44+
他可以体现出女孩的想象力和创造力,特别是在冬天。
45+
46+
#figure(
47+
image("cover.png", width: 70%),
48+
caption: [
49+
#count 个可爱的小女孩正在贴贴
50+
],
51+
) <cover>
52+
53+
== 背景
54+
55+
图中,一个小女孩正在贴贴,她的手指上沾满了春卷饭,她的嘴角还留着香香的味道。
56+
她的脸上有吻的痕迹,这是她和她的伴侣之间的百合。
57+
58+
== 实现
59+
60+
小女孩贴贴是基于春卷饭世界观的一个实现。
61+
为了测试其性能,我们进行了一系列的测试,结果表明,小女孩贴贴具有出色的性能。
62+
它能够在短时间内完成大量的贴贴工作,而且每个贴贴都非常好看。
63+
64+
== 结论
65+
66+
小女孩贴贴是一个非常可爱的艺术表现形式,它能够体现出女孩的想象力和创造力。
67+
它的性能也非常出色,能够在短时间内完成大量的贴贴工作。
68+
因此,我们建议大家多多尝试小女孩贴贴,感受它带来的乐趣和美妙的艺术表现。

0 commit comments

Comments
 (0)