前言
今天学了一天Typst,给我的感觉就是相较于 ,Typst就是神!
我日常做笔记使用的软件是typora,typora的好处是所见即所得,即时渲染你所写的markdown语法。在日常使用中是十分便捷的。但是进行论文撰写的时候,文字排版显得格外重要,最常用的就是word。Word软件排版虽然很强大,但是需要下功夫去操作,与相比就稍微逊色一点。
具有专业的排版输出能力,产生的文档看上去就像“印刷品”一样,具有方便而强大的数学公式排版能力,很容易生成复杂的专业排版元素,如脚注、交叉引用、参考文献、目录等,强大的可扩展性。世界各地的人开发了数以千计的宏包用于补充和扩展 的功 能,能够促使用户写出结构良好的文档——而这也是 存在的初衷[1]。同时,也存在着一些问题,(1) 安装包过大,安装相对较难;(2)相比“所见即所得”的模式有一些不便,为了查看生成文档的效果,用户总要不停地编译,这是最大的鸡肋(虽然也有插件可以即时查看,但是编译的速度过慢)。我之前也参照别人的模板写过一个天津大学的模板[2]。
最近,有团队开发了typst[3],宣称“Typst 是一种新的基于标记的文档排版系统,其设计与 一样强大,同时更易于学习和使用”,可以创建和使用更加强大的模板。Typst 是编写任何长篇文本(如论文、文章、科学论文、书籍、报告和家庭作业)的不错选择。此外,Typst 非常适合任何包含数学符号的文档,例如数学、物理和工程领域的论文。最后,由于其强大的样式和自动化功能,它是任何具有共同样式的文档集(例如丛书)的绝佳选择。
作为喜欢吃螃蟹的人,第一时间就尝试了一下,感觉还行,就在此做一下介绍。
安装
Typst提供预编译版和源码供开发者使用,
对于Linux或者macos可以使用如下命令安装:
// 设置页面
#set page(
    paper:"a4",
    margin: (
        top:27.5mm,
        bottom:25.4mm,
        left:35.7mm,
        right:27.7mm
    ),
    numbering:"1",
    number-align:center,
)
// 设置正文文字格式
#set text(
    font:("Times New Roman","SimSun"),
    style:"normal",
    weight:"regular",
    size: 12pt,
)
// 设置段落
#set par(
    leading:20pt,
    justify: true,
    first-line-indent: 2em,
)
// 设置标题格式
#set heading(numbering: "1.1.1.1")
#show heading: it => locate(loc => {
    let levels = counter(heading).at(loc)
    let deepest = if levels != () {
        levels.last()
    } else {
        1
    }
    set text(12pt)
    if it.level == 1 [
        #if deepest !=1 {
            pagebreak()
        }
        #set par(first-line-indent: 0pt)
        #let is-ack = it.body in ([Acknowledgment], [Acknowledgement])
        #set align(center)
        #set text(if is-ack { 15pt } else { 15pt },font:"SimHei")
        #v(36pt, weak: true)
        #if it.numbering != none and not is-ack {
        numbering("第1章.", deepest)
        h(7pt, weak: true)
        }
        #it.body
        #v(36pt, weak: true)
    ] else if it.level == 2 [
        #set par(first-line-indent: 0pt)
        #set text(size:14pt,font:"SimHei")
        #v(24pt, weak: true)
        #if it.numbering != none {
        numbering("1.1.",..levels)
        h(7pt, weak: true)
        }
        #it.body
        #v(24pt, weak: true)
    ] else if it.level == 3 [
        #set par(first-line-indent: 0pt)
        #set text(size:14pt,font:"SimHei")
        #v(15pt, weak: true)
        #if it.numbering != none {
        numbering("1.1.1.",..levels)
        h(7pt, weak: true)
        }
        #it.body
        #v(15pt, weak: true)
    ] else [
        #set par(first-line-indent: 0pt)
        #set text(size:12pt,font:"SimHei")
        #v(12pt, weak: true)
        #if it.numbering != none {
        numbering("1.1.1.1.",..levels)
        h(7pt, weak: true)
        }
        #it.body
        #v(12pt, weak: true) 
    ]
})
= 一级标题
//每页第一行的段落不会被缩进,需要额外设置
// #h(2em)两个字符的空格
#h(2em)#lorem(30) 
== 二级标题
chatgpt:阳光明媚的早晨,一只小鸟在树枝上欢快地唱着歌,远处传来了儿童的欢笑声,空气中弥漫着花香和新鲜的草味,这是一个充满生机和活力的日子。突然间,一阵微风吹来,树叶沙沙作响,让人感到一阵舒爽。这个美好的早晨让人心情愉悦,让人感受到大自然的魅力和美妙。
=== 三级标题
== 二级标题
=== 三级标题
#lorem(30) 
==== 四级标题
==== 四级标题
#lorem(30) 
= 一级标题
== 二级标题
=== 三级标题
==== 四级标题
小结
Typst的文档做得很好,对于列表,可以使用+进行创建,也可以使用函数#enum进行自定义,总体而言,Typst的可玩性很强。本文只是对某些方面进行了简单的介绍,如果感兴趣的话,可以查阅其官方文档[5]。
对于像word或者那样分开设置中英文字体以及页眉页脚根据页码设置,可以使用Typst内的函数进行控制,但这有些高阶玩法了,需要自行探索。
本文所述内容对于日常做做笔记啥的来说绰绰有余,相信随着Typst的不断更新,必将有代替的一天。
参考链接
[1] https://zhuanlan.zhihu.com/p/369311806
[2] https://github.com/Zuttergutao/Latex
[3] https://github.com/typst/typst
[4] https://github.com/typst/typst/releases/tag/v23-03-28
[5] https://typst.app/docs/
– END –
 论文排版软件
论文排版软件