找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 334|回复: 17

Typst-"超越"LaTeX的文档排版工具

[复制链接]

5

主题

0

回帖

25

积分

新手上路

积分
25
发表于 2023-4-4 05:36:06 | 显示全部楼层 |阅读模式
来历:知乎



前言

明天学了一天Typst,给我的感受就是相较于LaTeX ,Typst就是神!
我平常做笔记利用的软件是typora,typora的益处是所见即所得,立即衬着你所写的markdown语法。在平常利用中是非常便利的。可是停止论文撰写的时辰,笔墨排版显得分外重要,最常用的就是word。Word软件排版虽然很强大,可是需要下功夫去操纵,与\LaTeX相比就稍微减色一点。
\LaTeX 具有专业的排版输出才能,发生的文档看上去就像“印刷品”一样,具有方便而强大的数学公式排版才能,很轻易天生复杂的专业排版元素,如脚注、穿插援用、参考文献、目录等,强大的可扩大性。天下各地的人开辟了数以千计的\LaTeX宏包用于补充和扩大 \LaTeX的功 能,可以促利用户写出结构杰出的文档——而这也是\LaTeX 存在的初衷[1]。同时,也存在着一些题目,(1) 安装包过大,安装相对较难;(2)相比“所见即所得”的形式有一些未便,为了检察天生文档的结果,用户总要不停地编译,这是最大的鸡肋(虽然也有插件可以立即检察,可是编译的速度过慢)。我之前也参照他人的模板写过一个天津大学的\LaTeX模板[2]。
比来,有团队开辟了typst[3],宣称“Typst 是一种新的基于标志的文档排版系统,其设想与 \LaTeX一样强大,同时更易于进修和利用”,可以建立和利用加倍强大的模板。Typst 是编写任何长篇文本(如论文、文章、科学论文、书籍、报告和家庭作业)的不错挑选。此外,Typst 很是合适任何包括数学标记的文档,例如数学、物理和工程范畴的论文。最初,由于其强大的款式和自动化功用,它是任何具有配合款式的文档集(例如丛书)的绝佳挑选。
作为喜好吃螃蟹的人,第一时候就尝试了一下,感受还行,就在此做一下先容。
安装

Typst供给预编译版和源码供开辟者利用,
对于Linux大概macos可以利用以下号令安装:
# macOS or Linux using Homebrew
brew install typst

# Arch Linux
pacman -S typst
对于windows用户间接去他们的仓库[4]下载编译好的文件放到自己的目录,并增加情况变量即可利用。
Typst官方也供给了网页版(https://typst.app/)供利用
当安装了Typst以后,可以利用以下号令将撰写的代码转换为pdf:
typst file.typ
# 指定天生目录
typst path/to/source.typ path/to/output.pdf
也可以一边点窜源文件一边编译:
typst --watch file.typ
由于我利用的是vscode,比来有开辟者开辟了Typst LSP vscode插件(vscode扩大仓库下载),连系pdf预览插件便可以实现立即预览。结果以下图所示:

Typst-"超越"LaTeX的文档排版工具-1.jpg
利用

简单的示例

以下为官方给出的例子,具体结果见上图。
#set page(width: 10cm, height: auto)
#set heading(numbering: "1.")

= Fibonacci sequence
The Fibonacci sequence is defined through the
recurrence relation $F_n = F_(n-1) + F_(n-2)$.
It can also be expressed in _closed form:_

$ F_n = round(1 / sqrt(5) phi.alt^n), quad
phi.alt = (1 + sqrt(5)) / 2 $

#let count =
#let nums = range(1, count + 1)
#let fib(n) = (
if n <= 2 { 1 }
else { fib(n - 1) + fib(n - 2) }
)

The first #count numbers of the sequence are:

#align(center, table(
columns: count,
..nums.map(n => $F_#n$),
..nums.map(n => str(fib(n))),
))Markdown|LaTeX|Typst对照

TypstLaTeXMarkdown
题目=,==,===\section,\subsection,\subsubsection#,##,###
有序列表+\begin{enumerate\} \item[ ] \end{enumerate}1.  2.
无序列表-\begin{itemize} \item[+] \end{itemize}-,+
图片援用#image("file")\includegraphics{file}![filename]("file")
斜体_ _\textit_ _
加粗* *\textbf**  **
代码块```\begin{verbatim}   \end{verbatim}```
公式$ $\begin{equation}   \end{equation}行内$ $,行间$$   $$
链接#link("http://x.com")[des]\href{http://x.com}{des}[des](http://x.com)
表格#table()\begin{tabular}   \end{tabular}|  |  |
从上表可得,相对来说Typst的利用号令还是比力简洁的。
语法

图片

间接援用图片
#image("1.png",width:70%)
利用#figure设备图片格式,在figure前面可以增加<>label并在文中利用@援用。
#figure(
  image("glacier.jpg", width: 70%),
  caption: [
    _Glaciers_ form an important part
    of the earth's climate system.
  ],
)
Glaciers as the one shown in
@glaciers will cease to exist if
we don't take action soon!

#figure(
  image("glacier.jpg", width: 70%),
  caption: [
    _Glaciers_ form an important part
    of the earth's climate system.
  ],
) <glaciers>
Typst-"超越"LaTeX的文档排版工具-2.jpg
公式

Typst与markdown分歧,有自己的公式语法,一个是非论是行间还是行内公式,都是用 ,另一个是不需要在特别变量名前加斜杠\。假如想不改变字体,可以利用""援用
The equation $Q = rho gamma A v + C$
defines the glacial flow rate.

The flow rate of a glacier is given
by the following equation:

$ Q = rho A v + "time offset" $

Total displaced soil by glacial flow:

$ 7.32 beta +
  sum_(i=0)^nabla
    (Q_i (a_i - epsilon)) / 2 $

Typst-"超越"LaTeX的文档排版工具-3.jpg
笔墨

利用text自界说文本款式,有两种界说方式:(1) #set text(font:"18pt") 以后的笔墨都按此格式;(2)#text(font:18pt)[text ],只点窜此处的笔墨。
text具有以下的参数,需要留意的是,假如利用键值对需要加引号"!
text(
set font: stringarray,   
set fallback: boolean,   
set style: string,
set weight: integerstring,
set stretch: ratio,
set size: length,
set fill: color,
set tracking: length,
set spacing: relative length,
set baseline: length,
set overhang: boolean,
set top-edge: lengthstring,
set bottom-edge: lengthstring,
set lang: string,
set region: nonestring,
set dir: autodirection,
set hyphenate: autoboolean,
set kerning: boolean,
set alternates: boolean,
set stylistic-set: noneinteger,
set ligatures: boolean,
set discretionary-ligatures: boolean,
set historical-ligatures: boolean,
set number-type: autostring,
set number-width: autostring,
set slashed-zero: boolean,
set fractions: boolean,
set features: arraydictionary,
content,
) -> content

#set text(
  font: "New Computer Modern",
  size: 10pt,
  style:"italic",
)

With a set rule.

#emph(text(blue)[
  With a function call.
])

#text(28pt)[With a set rule.]

With a set rule.
Typst-"超越"LaTeX的文档排版工具-4.jpg
页面

经过#set page()设备页面格式
page(
        set paper: string,
        set width: autolength,
        set height: autolength,
        set flipped: boolean,
        set margin: autorelative lengthdictionary,
        set columns: integer,
        set fill: nonecolor,
        set numbering: nonestringfunction,
        set number-align: alignment2d alignment,
        set header: nonecontent,
        set header-ascent: relative length,
        set footer: nonecontent,
        set footer-descent: relative length,
        set background: nonecontent,
        set foreground: nonecontent,
        content,
) -> content
#set page(
  paper: "a6",
  margin: (x: 1.8cm, y: 1.5cm),
)段落

经过#set par()设备段落格式
par(
        set leading: length,   # 行间距
        set justify: boolean,  # 能否行中对齐文本
        set linebreaks: autostring,  # 若何肯定换行符
        set first-line-indent: length, # 首行缩进
        set hanging-indent: length,   # 除首行外其他行的缩进
        set body: content,
) -> content
#set par(first-line-indent: 2em, justify: true)

We proceed by contradiction.
Suppose that there exists a set
of positive integers $a$, $b$, and
$c$ that satisfies the equation
$a^n + b^n = c^n$ for some
integer value of $n > 2$.

Without loss of generality,
let $a$ be the smallest of the
three integers. Then, we ...
Typst-"超越"LaTeX的文档排版工具-5.jpg
题目

经过#set heading()设备题目格式
heading(
        set level: integer,   # 题目深度
        set numbering: nonestringfunction,  # 题目序号
        set outlined: boolean,    # 下划线
        content,
) -> content
#set heading(numbering: "1.a)")

= Introduction
In recent years, ...

== Preliminaries
To start, ...

#set heading(numbering: "1.")

= Introduction
#lorem(10)

== Background
#lorem(12)

== Methods
#lorem(15)

Typst-"超越"LaTeX的文档排版工具-6.jpg
// 高度自界说题目格式
#show heading.where(
  level: 1
): it => block(width: 100%)[
  #set align(center)
  #set text(12pt, weight: "regular")
  #smallcaps(it.body)
]

#show heading.where(
  level: 2
): it => text(
  size: 11pt,
  weight: "regular",
  style: "italic",
  it.body + [.],
)函数

函数挪用是typst的特点,用户可以界说并挪用函数来自界说输出格式。
可以经过指定参数列表后跟 => 和函数体来建立匿名函数。假如您的函数只要一个参数,则参数列表四周的括号是可选的。匿名函数首要用于显现法则。
利用#let设备变量,经过#挪用
// 挪用函数
#list([A], [B])

#enum(start: 2)[A][B]

#list[A][B]

#let alert(body, fill: red) = {
  set text(white)
  set align(center)
  rect(
    fill: fill,
    inset: 8pt,
    radius: 4pt,
    [*Warning:\ #body*],
  )
}

#alert[
  Danger is imminent!
]

#alert(fill: blue)[
  KEEP OFF TRACKS
]

# 匿名函数
#show "once?": it => [#it #it]
once?

#let amazed(term) = box[✨ #term ✨]

You are #amazed[beautiful]!
Typst-"超越"LaTeX的文档排版工具-7.jpg
#let amazed(term, color: blue) = {
  text(color, box[✨ #term ✨])
}

You are #amazed[beautiful]!
I am #amazed(color: purple)[amazed]!

#show: amazed
I choose to focus on the good
in my life and let go of any
negative thoughts or beliefs.
In fact, I am amazing!
Typst-"超越"LaTeX的文档排版工具-8.jpg
进一步地,可以连系let、set和show界说排版法则
#let template(doc) = [
  #set text(font: "Inria Serif")
  #show "something cool": [Typst]
  #doc
]

#show: template
I am learning something cool today.
It's going great so far!
用户可以将自界说的一些法则贮存在typ文件中,然后利用import号令导入该文件,从而使主文件连结整洁
试手

写了一个粗陋的天大结业论文模板(只实现了题目和段落格式,图表等内容待定)。
// 设备页面
#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-"超越"LaTeX的文档排版工具-9.jpg
小结

Typst的文档做得很好,对于列表,可以利用+停止建立,也可以利用函数#enum停止自界说,整体而言,Typst的可玩性很强。本文只是对某些方面停止了简单的先容,假如感爱好的话,可以查阅其官方文档[5]。
对于像word大概LaTeX那样分隔设备中英笔墨体以及页眉页脚按照页码设备,可以利用Typst内的函数停止控制,但这有些高阶玩法了,需要自行摸索。
本文所述内容对于平常做做笔记啥的来说绰绰不足,相信随着Typst的不竭更新,势必有取代LaTeX的一天。
链接

[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/




原文地址:https://zhuanlan.zhihu.com/p/618910802
免责声明:
1、文章部分图片源于收集,均为表示图;
2、一切文章、图片、音频视频文件等材料版权归版权一切人一切;
3、因非原创文章及图片等内容没法和版权者联系,如原作者或编辑以为作品不宜上网供阅读,或不应无偿利用,请实时告诉我们,以敏捷采纳适当办法,避免给双方形成不需要的经济损失;
4、本页面内容由爬虫法式自动收集于互联网,如无意中加害了媒体或小我的常识产权,请电邮【E-Mail:cb@yoyodoc.com】告之,我们将于24小时内删除。

4

主题

21

回帖

42

积分

新手上路

积分
42
发表于 2023-4-4 05:36:12 | 显示全部楼层
很遗憾今朝还没法导出为tex文件,而很多期刊只收tex

5

主题

18

回帖

42

积分

新手上路

积分
42
发表于 2023-4-4 05:37:00 | 显示全部楼层
让子弹飞一会儿

4

主题

19

回帖

38

积分

新手上路

积分
38
发表于 2023-4-4 05:37:07 | 显示全部楼层
上风在那里呢?语法更简单吗[思考]

1

主题

24

回帖

33

积分

新手上路

积分
33
发表于 2023-4-4 05:38:01 | 显示全部楼层
我忽然发现一个题目,就是很多题目并不是尬吹 typst 带来的,而是吹 typst 的人对 latex 的领会能够并不够深入 [吃瓜][思考],由于总会碰到奇希奇怪的排版需求[捂脸] (实在我却是不担忧谁替换谁的题目,而是担忧屠龙勇士终成龙)  此外,我感觉对于大部分人来说,他们能够只是缺一个 latex 的实时衬着引擎,就像阅读器衬着网页那样,[吃瓜]

4

主题

18

回帖

39

积分

新手上路

积分
39
发表于 2023-4-4 05:38:11 | 显示全部楼层
LaTeX究竟成长了那末多年了,在排版上必定能甩他人一大截。实时衬着引擎有网页版的overleaf,vscode也有相关的插件。对我小我而言,latex安装就十几个G,而Typst甚至不需要安装,间接利用,出格方便。
每个软件都有其存在的必定性,每小我都有自己挑选的权利。
我保举Typst是由于Typst用着很舒服,你也可以感觉LaTeX用着很舒服,就看小我的挑选了。
就像有博主说的,Typst还有很大一部路要走。对于中文排版还有很多需要优化的地方。

4

主题

14

回帖

35

积分

新手上路

积分
35
发表于 2023-4-4 05:39:03 | 显示全部楼层
上风在于,免安装,语法相对简单,可以利用函数等等。
可是弱点也很明显,就是还在不竭的开辟更新中,对于复杂的排版以及中文来说有很多题目。

6

主题

14

回帖

39

积分

新手上路

积分
39
发表于 2023-4-4 05:39:59 | 显示全部楼层
感受颜值跟latex比还是差点, 那我就不用了[思考]

4

主题

17

回帖

40

积分

新手上路

积分
40
发表于 2023-4-4 05:40:11 | 显示全部楼层
感谢。那感受今朝没有需要学,导出tex也是个麻烦。对我来说,轻度记数学笔记mardown所见即所得也够了[附和]

6

主题

8

回帖

36

积分

新手上路

积分
36
发表于 2023-4-4 05:40:52 | 显示全部楼层
后代皆称能超越盛唐
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|小悠文档创作分享社区 ( 粤ICP备11072215号 )|网站地图

GMT+8, 2024-10-22 15:35 , Processed in 0.368769 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表