|
来历:知乎
前言
明天学了一天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预览插件便可以实现立即预览。结果以下图所示:
利用
简单的示例
以下为官方给出的例子,具体结果见上图。
#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对照
Typst | LaTeX | Markdown | 题目 | =,==,=== | \section,\subsection,\subsubsection | #,##,### | 有序列表 | + | \begin{enumerate\} \item[ ] \end{enumerate} | 1. 2. | 无序列表 | - | \begin{itemize} \item[+] \end{itemize} | -,+ | 图片援用 | #image(&#34;file&#34;) | \includegraphics{file} | ![filename](&#34;file&#34;) | 斜体 | _ _ | \textit | _ _ | 加粗 | * * | \textbf | ** ** | 代码块 | ``` | \begin{verbatim} \end{verbatim} | ``` | 公式 | $ $ | \begin{equation} \end{equation} | 行内$ $,行间$$ $$ | 链接 | #link(&#34;http://x.com&#34;)[des] | \href{http://x.com}{des} | [des](http://x.com) | 表格 | #table() | \begin{tabular} \end{tabular} | | | | | 从上表可得,相对来说Typst的利用号令还是比力简洁的。
语法
图片
间接援用图片
#image(&#34;1.png&#34;,width:70%)
利用#figure设备图片格式,在figure前面可以增加<>label并在文中利用@援用。
#figure(
image(&#34;glacier.jpg&#34;, width: 70%),
caption: [
_Glaciers_ form an important part
of the earth&#39;s climate system.
],
)
Glaciers as the one shown in
@glaciers will cease to exist if
we don&#39;t take action soon!
#figure(
image(&#34;glacier.jpg&#34;, width: 70%),
caption: [
_Glaciers_ form an important part
of the earth&#39;s climate system.
],
) <glaciers>
公式
Typst与markdown分歧,有自己的公式语法,一个是非论是行间还是行内公式,都是用 ,另一个是不需要在特别变量名前加斜杠\。假如想不改变字体,可以利用&#34;&#34;援用
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 + &#34;time offset&#34; $
Total displaced soil by glacial flow:
$ 7.32 beta +
sum_(i=0)^nabla
(Q_i (a_i - epsilon)) / 2 $
笔墨
利用text自界说文本款式,有两种界说方式:(1) #set text(font:&#34;18pt&#34;) 以后的笔墨都按此格式;(2)#text(font:18pt)[text ],只点窜此处的笔墨。
text具有以下的参数,需要留意的是,假如利用键值对需要加引号&#34;!
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: &#34;New Computer Modern&#34;,
size: 10pt,
style:&#34;italic&#34;,
)
With a set rule.
#emph(text(blue)[
With a function call.
])
#text(28pt)[With a set rule.]
With a set rule.
页面
经过#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: &#34;a6&#34;,
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 ...
题目
经过#set heading()设备题目格式
heading(
set level: integer, # 题目深度
set numbering: nonestringfunction, # 题目序号
set outlined: boolean, # 下划线
content,
) -> content
#set heading(numbering: &#34;1.a)&#34;)
= Introduction
In recent years, ...
== Preliminaries
To start, ...
#set heading(numbering: &#34;1.&#34;)
= Introduction
#lorem(10)
== Background
#lorem(12)
== Methods
#lorem(15)
// 高度自界说题目格式
#show heading.where(
level: 1
): it => block(width: 100%)[
#set align(center)
#set text(12pt, weight: &#34;regular&#34;)
#smallcaps(it.body)
]
#show heading.where(
level: 2
): it => text(
size: 11pt,
weight: &#34;regular&#34;,
style: &#34;italic&#34;,
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 &#34;once?&#34;: it => [#it #it]
once?
#let amazed(term) = box[✨ #term ✨]
You are #amazed[beautiful]!
#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!
进一步地,可以连系let、set和show界说排版法则
#let template(doc) = [
#set text(font: &#34;Inria Serif&#34;)
#show &#34;something cool&#34;: [Typst]
#doc
]
#show: template
I am learning something cool today.
It&#39;s going great so far!
用户可以将自界说的一些法则贮存在typ文件中,然后利用import号令导入该文件,从而使主文件连结整洁
试手
写了一个粗陋的天大结业论文模板(只实现了题目和段落格式,图表等内容待定)。
// 设备页面
#set page(
paper:&#34;a4&#34;,
margin: (
top:27.5mm,
bottom:25.4mm,
left:35.7mm,
right:27.7mm
),
numbering:&#34;1&#34;,
number-align:center,
)
// 设备正文笔墨格式
#set text(
font:(&#34;Times New Roman&#34;,&#34;SimSun&#34;),
style:&#34;normal&#34;,
weight:&#34;regular&#34;,
size: 12pt,
)
// 设备段落
#set par(
leading:20pt,
justify: true,
first-line-indent: 2em,
)
// 设备题目格式
#set heading(numbering: &#34;1.1.1.1&#34;)
#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:&#34;SimHei&#34;)
#v(36pt, weak: true)
#if it.numbering != none and not is-ack {
numbering(&#34;第1章.&#34;, 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:&#34;SimHei&#34;)
#v(24pt, weak: true)
#if it.numbering != none {
numbering(&#34;1.1.&#34;,..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:&#34;SimHei&#34;)
#v(15pt, weak: true)
#if it.numbering != none {
numbering(&#34;1.1.1.&#34;,..levels)
h(7pt, weak: true)
}
#it.body
#v(15pt, weak: true)
] else [
#set par(first-line-indent: 0pt)
#set text(size:12pt,font:&#34;SimHei&#34;)
#v(12pt, weak: true)
#if it.numbering != none {
numbering(&#34;1.1.1.1.&#34;,..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大概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小时内删除。 |
|