Skip to content

Commit 970183f

Browse files
feat: 校对脚本章节
1 parent 81165f1 commit 970183f

3 files changed

Lines changed: 63 additions & 66 deletions

File tree

src/tutorial/scripting-composite.typ

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -8,53 +8,53 @@
88

99
脚本模式中有两类核心复合字面量。一曰「数组」,一曰「字典」。
1010

11-
「数组」是按照顺序存储的一些「值」,你可以在「数组」中存放*任意内容*而不拘泥于类型。你可以使用圆括号与一个逗号分隔的列表创建一个*数组字面量*
11+
「数组」是按照顺序存储的一些「值」,你可以在「数组」中存放*任意内容*而不受类型限制。你可以使用圆括号与一个逗号分隔的列表创建一个*数组字面量*
1212

1313
#code(```typ
1414
#(1, "OvO", [一段内容])
1515
```)
1616

1717
== 字典字面量 <grammar-dict-literal>
1818

19-
所谓「字典」即是「键值对」的集合,其每一项是由冒号分隔的「键值对」。如下例所示,冒号左侧,“neco-mimi”等「标识符」或「字符串」是字典的「键」,而冒号右侧分别是对应的「值」。
19+
所谓「字典」即是「键值对」的集合,其每一项是由冒号分隔的「键值对」。如下例所示,冒号左侧,“neko-mimi”等「标识符」或「字符串」是字典的「键」,而冒号右侧分别是对应的「值」。
2020

2121
#code(```typ
2222
#(neko-mimi: 2, "utterance": "喵喵喵")
2323
```)
2424

2525
== 数组和字典的典型构造
2626

27-
特别讲解一些关于数组与字典相关的典型构造
27+
下面特别讲解一些与数组和字典相关的典型构造
2828

2929
#code(```typ
3030
#() \ // 是空的数组
3131
#(:) \ // 是空的字典
3232
#(1) \ // 被括号包裹的整数1
3333
#(()) \ // 被括号包裹的空数组
34-
#((())) \ // 被括号包裹的被括号包裹的空数组
34+
#((())) \ // 被两层括号包裹的空数组
3535
#(1,) \ // 是含有一个元素的数组
3636
```)
3737

3838
`()`是空的数组<grammar-empty-array>,不含任何值。`(:)`是空的字典<grammar-empty-dict>,不含任何键值对。
3939

4040
如果括号内含了一个值,例如`(1)`,那么它仅仅是被括号包裹的整数1,仍然是整数1本身。
4141

42-
类似的`(())`是被括号包裹的空数组<grammar-paren-empty-array>`((()))`是被括号包裹的被括号包裹的空数组
42+
类似地`(())`是被括号包裹的空数组<grammar-paren-empty-array>`((()))`是被两层括号包裹的空数组
4343

4444
为了构建含有一个元素的数组,需要在列表末尾额外放置一个逗号以示区分,例如`(1,)`<grammar-single-member-array>
4545

4646
// https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Trailing_commas
47-
这种逗号被称为尾后逗号
47+
这种逗号被称为尾随逗号
4848

4949
// todo: 改进
50-
构造数组字面量时,允许尾随一个多余的逗号而不造成影响
50+
构造数组字面量时,允许在末尾保留一个多余的逗号而不造成影响
5151

5252
#code(```typ
5353
#let x = (1, "OvO", [一段内容] , ); #x
5454
// 这里有一个多余的逗号^^^
5555
```)
5656

57-
构造字典字面量时,允许尾随一个多余的逗号
57+
构造字典字面量时,也允许在末尾保留一个多余的逗号
5858

5959
#code(```typ
6060
#let cat = (attribute: [kawaii\~], ); #cat
@@ -65,22 +65,22 @@
6565

6666
这是本节最难的内容,非程序员朋友想要灵活运用可能有点困难。
6767

68-
除了使用字面量「构造」元素,Typst还支持「构造」的反向操作:「解构赋值」。顾名思义,你可以在左侧用相似的语法从数组<grammar-destruct-array>或字典中获取值并赋值到*对应*的变量上。<grammar-destruct-dict>
68+
除了使用字面量「构造」元素,Typst还支持「构造」的反向操作:「解构赋值」。顾名思义,你可以在左侧使用相似的语法从数组<grammar-destruct-array>或字典中获取值,并赋值到*对应*的变量上。<grammar-destruct-dict>
6969

7070
#code(```typ
7171
#let (attr: a) = (attr: [kawaii\~])
7272
#a
7373
```)
7474

75-
「解构赋值」必须一一对应,但你也可以使用「占位符」(`_`)或「延展符」(`..`以作*部分*解构:<grammar-destruct-array-eliminate>
75+
「解构赋值」必须一一对应,但你也可以使用「占位符」(`_`)或「延展符」(`..`*部分*解构:<grammar-destruct-array-eliminate>
7676

7777
#code(```typ
7878
#let (first, ..) = (1, 2, 3)
7979
#let (.., second-last, _) = (7, 8, 9, 10)
8080
#first, #second-last
8181
```)
8282

83-
数组的「解构赋值」有一个妙用,那就是重映射内容<grammar-array-remapping>
83+
数组的「解构赋值」有一个妙用,那就是重映射变量<grammar-array-remapping>
8484

8585
#code(```typ
8686
#let (a, b, c) = (1, 2, 3)
@@ -96,7 +96,7 @@
9696

9797
== 数组和字典的成员访问
9898

99-
为了访问数组,你可以使用`at`方法。“at”在中文里是“在”的意思,它表示对「数组」使用「索引」操作。`at(0)`索引到第1个值,`at(n)`索引到第 $n + 1$ 个值,以此类推。如下所示:
99+
要访问数组元素,你可以使用`at`方法。“at”在中文里是“在”的意思,它表示对「数组」使用「索引」操作。`at(0)`索引到第1个值,`at(n)`索引到第 $n + 1$ 个值,以此类推。如下所示:
100100

101101
#code(```typ
102102
#let x = (1, "OvO", [一段内容])
@@ -105,14 +105,14 @@
105105

106106
至于「索引」从零开始的原因,这只是约定俗成。等你习惯了,你也会变成计数从零开始的好程序员。
107107

108-
为了访问字典,你可以使用`at`方法。但由于「键」都是字符串,你需要使用字符串作为字典的「索引」。
108+
要访问字典中的值,你可以使用`at`方法。但由于「键」都是字符串,你需要使用字符串作为字典的「索引」。
109109

110110
#code(```typ
111111
#let cat = (attribute: [kawaii\~])
112112
#cat.at("attribute")
113113
```)
114114

115-
为了方便,Typst允许你直接通过成员方法访问字典对应「键」的值: <grammar-dict-member-exp>
115+
为了方便,Typst允许你直接通过成员语法访问字典对应「键」的值: <grammar-dict-member-exp>
116116

117117
#code(```typ
118118
#let cat = ("attribute": [kawaii\~])
@@ -121,28 +121,28 @@
121121

122122
== 数组和字典的「存在谓词」
123123

124-
为了访问数组,你可以使用`contains`方法。“contain”在中文里是“包含”的意思,如下所示:
124+
要判断数组中是否包含某个值,你可以使用`contains`方法。“contain”在中文里是“包含”的意思,如下所示:
125125

126126
#code(```typ
127127
#let x = (1, "OvO", [一段内容])
128128
#x.contains[一段内容]
129129
```)
130130

131-
因为这太常用了,typst专门提供了`in`语法,表示判断`x`是否*存在于*某个数组中:<grammar-array-in>
131+
因为这太常用了,Typst专门提供了`in`语法,表示判断`x`是否*存在于*某个数组中:<grammar-array-in>
132132

133133
#code(```typ
134134
#([一段内容] in (1, "OvO", [一段内容])) \
135135
#([另一段内容] in (1, "OvO", [一段内容]))
136136
```)
137137

138-
字典也可以使用此语法,表示判断`x`是否是字典的一个「键」。特别地,你还可以前置一个`not`判断`x`是否*不在*某个数组或字典中:<grammar-dict-in>
138+
字典也可以使用此语法,表示判断`x`是否是字典的一个「键」。特别地,你还可以在前面加一个`not`判断`x`是否*不在*某个数组或字典中:<grammar-dict-in>
139139

140140
#code(```typ
141141
#let cat = (neko-mimi: 2)
142142
#("neko-kiki" not in cat)
143143
```)
144144

145-
注意:`x in (...)``"x" in (...)`是不同的。例如`neko-mimi in cat`将检查`neko-mimi`变量的内容是否是字典变量`cat`的一个「键」,而`"neko-mimi"`检查对应字符串是否在其中
145+
注意:`x in (...)``"x" in (...)`是不同的。例如`neko-mimi in cat`将检查`neko-mimi`变量的内容是否是字典变量`cat`的一个「键」,而`"neko-mimi" in cat`则检查对应字符串是否在其中
146146

147147
// field access
148148
// - dictionary
@@ -152,7 +152,7 @@
152152

153153
== 位置参数声明 <grammar-positional-param>
154154

155-
typst通过数组和字典在执行时向函数传递参数。上一节我们学会了基本的函数声明,若进一步理解了数组和字典,可以定义更复杂的函数。接下来我们讲透Typst中如何声明复杂函数,以及如何调用函数。
155+
Typst通过数组和字典的形式在执行时向函数传递参数。上一章我们学会了基本的函数声明,若进一步理解了数组和字典,就可以定义更复杂的函数。接下来我们讲讲Typst中如何声明复杂函数,以及如何调用函数。
156156

157157
其中最简单的是位置参数声明,我们在上节已经学过。
158158

@@ -161,11 +161,11 @@ typst通过数组和字典在执行时向函数传递参数。上一节我们学
161161
#f(1, 2)
162162
```)
163163

164-
在函数调用的时候,位置参数必须按照声明的顺序传递。例子中,向`f`函数传递了两个位置参数`1``2`,于是`a``b`作为变量被赋值为了`1``2`,接着这个函数返回一个「内容块」,其中用到了`a``b`变量。
164+
在函数调用的时候,位置参数必须按照声明的顺序传递。例子中,向`f`函数传递了两个位置参数`1``2`,于是`a``b`作为变量被赋值为`1``2`,接着这个函数返回一个「内容块」,其中用到了`a``b`变量。
165165

166166
== 具名参数声明 <grammar-named-param>
167167

168-
函数可以包含「具名参数」,其看起来就像字典的一项,冒号右侧则是参数的*默认值*
168+
函数可以包含「具名参数」,看起来就像字典的一项,冒号右侧则是参数的*默认值*
169169

170170
#code(```typ
171171
#let g(name: "?") = [你是#name]
@@ -187,7 +187,7 @@ typst通过数组和字典在执行时向函数传递参数。上一节我们学
187187

188188
== 参数类型 <grammar-param-literal>
189189

190-
什么是「参数类型」(argument type)?在typst中,你完全可以先把函数参数准备好,然后直接调用函数:
190+
什么是「参数类型」(argument type)?在Typst中,你完全可以先把函数参数准备好,然后直接调用函数:
191191

192192
#code(```typ
193193
#let sum(..args, init: 0) = init + args.pos().sum()
@@ -197,7 +197,7 @@ typst通过数组和字典在执行时向函数传递参数。上一节我们学
197197

198198
`arguments`是一个类型,`arguments(1, 2)`是一个表达式,它返回一个`arguments`类型的值。
199199

200-
也可以预先传递参数,然后直接调用函数:
200+
也可以预先准备参数,然后直接调用函数:
201201

202202
#code(```typ
203203
#let sum(..args, init: 0) = init + args.pos().sum()
@@ -241,7 +241,7 @@ typst通过数组和字典在执行时向函数传递参数。上一节我们学
241241
#first-and-last(("开头", "中间", "结尾"))
242242
```)
243243

244-
如果你希望保留字典中剩下的项目,也可以把`..`后接一个变量名:
244+
如果你希望保留字典中剩下的项目,也可以在`..`后接一个变量名:
245245

246246
#code(```typ
247247
#let describe((name, ..other)) = [#name:#repr(other)]

src/tutorial/scripting-literal.typ

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
Typst很快,并非因为它的#term("parser")和#term("interpreter")具有惊世的执行性能,而是语言特性本身适合缓存优化。
66

7-
自本节起,本教程将进入第二阶段,希望不仅让你了解如何使用脚本,还一并讲解Typst的执行原理。当然,我们不会陷入Typst的细节。所有在教程中出现的原理都是为了更好地了解语言本身
7+
自本节起,本教程将进入第二阶段,希望不仅让你了解如何使用脚本,还一并讲解Typst的执行原理。当然,我们不会陷入Typst的细节。教程中出现的原理都是为了帮助你更好地理解语言本身
88

99
// 什么是自省
1010
// 程序不会自己自省,这是给你看的
@@ -22,7 +22,7 @@ Typst很快,并非因为它的#term("parser")和#term("interpreter")具有惊
2222
```)
2323

2424
#pro-tip[
25-
#term("introspection function")是指那些为你获取解释器内部状态的函数。它们往往接受一些语言对象,而返回存储在解释器内部的相关信息。在这里,#typst-func("repr")接受任意值,而返回对应的代码表示
25+
#term("introspection function")是指那些用于获取解释器内部状态的函数。它们往往接受一些语言对象,并返回存储在解释器内部的相关信息。在这里,#typst-func("repr")接受任意值,并返回对应的代码表示
2626
]
2727

2828
== `type`函数 <grammar-type>
@@ -84,9 +84,9 @@ Typst很快,并非因为它的#term("parser")和#term("interpreter")具有惊
8484

8585
== 基本字面量
8686

87-
我们将介绍所有基本字面量,这是脚本的“一加一”。其实在上一节,我们已经见过了一部分字面量,但皆凭直觉使用:```typc 1```不就是数字吗,那么在Typst中,它就是数字。与之相对,TeX底层没有数字和字符串的概念。
87+
我们将介绍所有基本字面量,这是脚本的“一加一”。其实在上一节,我们已经见过一部分字面量,但皆凭直觉使用:```typc 1```不就是数字吗,那么在Typst中,它就是数字。与之相对,TeX底层没有数字和字符串的概念。
8888

89-
如果你学过Python等语言,那么这将对你来说不是问题。在Typst中,常用的字面量并不多,它们是:
89+
如果你学过Python等语言,那么这对你来说不是问题。在Typst中,常用的字面量并不多,它们是:
9090
+ #term("none literal")。
9191
+ #term("boolean literal")。
9292
+ #term("integer literal")。
@@ -136,7 +136,7 @@ Typst很快,并非因为它的#term("parser")和#term("interpreter")具有惊
136136

137137
=== 布尔字面量
138138

139-
一个布尔字面量表示逻辑的确否。它要么为```typc false```<grammar-true-literal>要么为```typc true```<grammar-false-literal>
139+
一个布尔字面量表示逻辑的确否。它要么为```typc false```<grammar-false-literal>要么为```typc true```<grammar-true-literal>
140140

141141
#code(```typ
142142
假设 #false 那么一切为 #true。
@@ -174,7 +174,7 @@ $1 < 2$的结果为:#(1 < 2)
174174

175175
=== 浮点数字面量 <grammar-float-literal>
176176

177-
浮点数与整数非常类似。最常见的浮点数由至少一个整数部分或小数部分组成
177+
浮点数与整数非常类似。最常见的浮点数由整数部分或小数部分组成
178178

179179
#code(```typ
180180
浮点数#(1.001)、小数部分#(.1) 和整数部分#(2.)。
@@ -236,13 +236,13 @@ Typst中所有字符串都是`utf-8`编码的,因此使用时不存在编码
236236

237237
== 类型转换
238238

239-
类型本身也是函数,例如`int`类型可以接受字符串,转换成整数。
239+
类型本身也可以当作函数使用,例如`int`类型可以接受字符串,转换成整数。
240240

241241
#code(```typ
242242
#int("11"), #int("-23")
243243
```)
244244

245-
从转换的角度,`eval`可以将代码字符串转换成值。例如,你可以转换16进制数字
245+
从转换的角度,`eval`可以将代码字符串转换成值。例如,你可以转换十六进制数字
246246

247247
#code(```typ
248248
#eval("0x3f")
@@ -261,7 +261,7 @@ Typst中所有字符串都是`utf-8`编码的,因此使用时不存在编码
261261
// 基于以上两个特性,Typst为什么快?
262262

263263
// + Typst支持增量解析文件。
264-
// + Typst所有由*用户声明*的函数都是纯的,在其上的调用都是纯的。例如Typst天生支持快速计算递归实现的fibnacci函数
264+
// + Typst所有由*用户声明*的函数都是纯的,在其上的调用都是纯的。例如Typst天生支持快速计算递归实现的fibonacci函数
265265

266266
// #code(```typ
267267
// #let fib(n) = if n <= 1 { n } else { fib(n - 1) + fib(n - 2) }
@@ -273,14 +273,14 @@ Typst中所有字符串都是`utf-8`编码的,因此使用时不存在编码
273273

274274
#todo-box[重写总结]
275275

276-
基于《字面量、变量和函数》掌握的知识你应该可以
276+
基于本章掌握的知识,你应该可以
277277
+ 查看#(refs.ref-type-builtin)[《参考:内置类型》],以掌握内置类型的使用方法。
278278
+ 查看#(refs.ref-visualization)[《参考:图形与几何元素》],以掌握图形和几何元素的使用方法。
279-
+ 查看#(refs.ref-wasm-plugin)[《参考:WASM插件》],以掌握在Typst中使用Rust、JavaScript、Python等语言编写插件库
279+
+ 查看#(refs.ref-wasm-plugin)[《参考:WASM插件》],以掌握在Typst中使用Rust、JavaScript、Python等语言编写插件库的方法
280280
+ 阅读#(refs.ref-grammar)[《参考:语法示例检索表》],以检查自己的语法掌握程度。
281281
+ 查看#(refs.ref-typebase)[《参考:基本类型》],以掌握基本类型的使用方法。
282282
+ 查看#(refs.ref-color)[《参考:颜色、色彩渐变与模式》],以掌握色彩的高级管理方法。
283-
+ 查看#(refs.ref-data-process)[《参考:数据读写与数据处理》],以助你从外部读取数据或将文档数据输出到文件。
283+
+ 查看#(refs.ref-data-process)[《参考:数据读写与数据处理》],以助你从外部读取数据或将文档数据输出到文件。
284284
+ 查看#(refs.ref-bibliography)[《参考:导入和使用参考文献》],以助你导入和使用参考文献。
285285
+ 阅读基本参考部分中的所有内容。
286286

@@ -366,4 +366,3 @@ Typst中所有字符串都是`utf-8`编码的,因此使用时不存在编码
366366
][
367367
#q1
368368
]
369-

0 commit comments

Comments
 (0)