## 文档结构
```tex
\documentclass{article} % 文档类型声明
% --------- 导言区 --------- %
\usepackage[UTF8]{ctex}
\usepackage{graphicx}
\title{xxx}
\author{xxx}
\date{xxx}
\begin{document} % 正文开始
% --------- 正文区 --------- %
\maketitle
\section{Introduction}
\end{document} % 文档结束,后续内容不会被编译
```
## 导言区
- 基础文档类:article、report、book、beamer 等
- 中文变体:ctexart、ctexrep、ctexbook、ctexbeamer 等
- 可以通过可选参数指定字号、纸张大小、双面打印等选项
```tex
\documentclass[12pt,a4paper,twoside]{article}
```
- 宏包加载(功能扩展) `\usepackage`
- 页面布局调整
```tex
\usepackage[top=2cm,bottom=3cm,left=2.5cm,right=2.5cm]{geometry}
\linespread{1.25} % 1.25 倍行距
\setlength{\parindent}{2pt} % 首行缩进 2 磅
```
- 标题格式、页眉页脚等等
## 标题
- 标题会自动编号
- 默认编号深度为 3
- 带星号的代码不会自动编号,也不会出现在目录中
- 目录 `\tableofcontents`
- `\appendix` 起为附录,后续章节编号为大写字母
- 在中间加入[]可以定义目录中的标题
```tex
\section{一级标题}
\subsection{二级标题}
\subsubsection{三级标题}
\section*{一级标题}
\section[目录中标题]{文章中标题}
\paragraph{段落标题}
\subparagraph{子段落标题}
% book / report 额外含有
\part{部级标题}
\chapter{章级标题}
```
## 段落
- LaTeX 的段落开头会有缩进,使用 `\noindent` 让这个段落不缩进
- 或者直接在导言区将首行缩进改为 0 长度
- 换行:
- 分段换行使用 空行 或 `\par`
- 段内强制换行使用 `\\` 或 `\newline`
## 环境
- \begin{env}, \end{env} 像一对大括号,包裹一段环境
- env 字段控制这个环境的格式
- 常见的 environment
- itemize 无序列表
- enumerate 有序列表
- table 表格浮动体
- figure 浮动体
- tabular 表格
- [表格生成器](https://www.tablesgenerator.com/)
```tex
\begin{itemize}
\item macOS
\item Windows
\item Linux
\end{itemize}
```
```
• macOS
• Windows
• Linux
```
## 浮动体
- 用于处理需要灵活定位的图形内容
- [htbp] 代表浮动体的位置优先级
- here 此处 top 顶部 bottom 底部 page 单页
- 插入图片配合 figure 使用
- 直接粘贴进去即可
```tex
\begin{figure}[htbp]
\centering
\includegraphics[width=1\linewidth]{image.png}
\caption{Enter Caption} % 图片名称
\label{fig:placeholder} % 引用名称
\end{figure}
```
## 关于图片补充
- 需要 graphicx 宏包(新建时自带)
- \includegraphics[options]{filename}
- 常用选项:width、height、scale 宽高缩放
- filename 可以是相对路径或绝对路径
## 数学公式

## 数学公式
- 行内公式使用 `$`...`$` 或 `\(`...`\)`
- 行间公式
- 单行公式用 `\[`...`\]`
- 多行公式用 equation / align / gather 等环境
- 不要用双`$`:TEX 原始语法,会产生很多问题
## Typst 介绍
Typst 是一个现代化的专业排版系统,它结合了:
- LaTeX 的排版能力(复杂数学公式、精细排版)
- Markdown 的简洁语法(易学易写,减少样板代码)
- 现代编程语言特性
Typst 的优点:
- 语法简洁易学,通过简单标记就可实现复杂排版
- 编译速度极快,可以实时预览
- 轻量化且可扩展
## 开始之前
- vscode 安装插件
- Tinymist Typst
- 在线编辑工具
- [官方的 webapp](https://typst.app/)
## 换行
- 分段换行使用 空行
- 段内换行使用转义空格或者转义换行
- 转义字符 '\\'
## 标题
- '=' 开头,后接内容
- '=' 与标题间至少一个空格
- '=' 字符的数量决定了标题的嵌套级别
```typ
= 一级标题
== 二级标题
```
## 无序列表
- `-` 后接一个空格然后接内容
- 如果一个项中要包含内容,先换行 '\\' 再缩进书写
- 嵌套列表直接缩进一次即可
```typ
- node 1
- node 2\
content in node 2
- node 3
- 第一层
- 第二层
- 第三层
- 第二层
- 第一层
```
## 有序列表
- `+` 后接一个空格然后接内容
- 如果一个项中要包含内容,先换行 '\\' 再缩进书写
- 嵌套列表直接缩进一次即可
- 有序列表可以和无序列表互相嵌套
```typ
+ node 1
+ node 2
+ node 3
+ node 4
+ 有序
- 嵌套无序
- 嵌套无序
+ 有序
```
## 代码块
- 使用三个或以上 ` 围起来构成代码块
- 前后的 ` 数量要求一致
- ` 后面可以加语言名
- 带有高亮支持的软件会对其进行高亮显示
~~~markdown
```c
#include
int main() {
printf("hello world\n");
return 0;
}
```
~~~
## 行内标记
- 两个 * 中间部分为粗体
- 两个 _ 中间部分为斜体
- 行内标记都可以互相嵌套
- 也可以嵌套在其它块中
- 行内代码中不行
- 目前仅支持英文
```txt
_斜体_
*粗体*
*_粗斜体_* _*粗斜体*_
`行内代码`
```
## 速记符号
- 一些符号需要用特殊的符号组合打出
- 空格:~
- 连接号:--
- 省略号:...
- [完整列表](https://typst.app/docs/reference/symbols/)
## 注释
- // 注释本行往后所有内容
- /* */ 注释中间内容
```c
// 这是注释
/* 这也是注释 */
```
## 数学公式
- 行内数学公式:两个 \$ 两内侧不加空格
- 行间数学公式:两个 \$ 两内侧各加一个空格
```typ
行内数学公式:$sum_x$
行间数学公式:$ sum_x $
```
## 脚本模式
- \# 使解释器进入 脚本模式
- 可以想象成写代码,它可以返回代码的值
- Typst 是一个动态解释器,其按顺序查看并解释你的文档源码。
- 而 # 号就是告诉这个当前处于标记模式的解释器,接下来转为脚本模式
- 当处于脚本模式时,解释器在适当的时候从脚本模式退回为标记模式
- Typst 总是倾向于更快地退出脚本模式
- 一对 方括号 [] 可以暂时回到标记模式
## 函数 (text 为例)
- 直接写的所有文本都是 text
```typ
#text[Typst is interesting !]
#text(fill: blue, size: 20pt, font: "Consolas")[Typst is interesting !]
```
```typ
#set text(fill: blue, size: 20pt, font: "Consolas")
Typst is interesting !
```
## 变量与函数
- let 可以定义变量
- 变量也可以再次赋值
- 也可以定义函数
```typ
#let x = "哈基米";
#x
#let y = "南北绿豆";
#y
#let f(x,y) = [#(x)哦#(y)];
#f(x,y);
```
```txt
哈基米
南北绿豆
哈基米哦南北绿豆
```
## 变量与函数
- 稍微复杂一点
- 可以封装常用的样式
```typ
#let exercise(question, answer) = {
text(
font: "KaiTi",
size: 14pt,
weight: "bold",
)[Q: #question]
[\ ]
text(
font: "FangSong",
size: 12pt,
{"A: " + answer}
)
}
#exercise(
[请问Typst中有几个字母],
[五个]
)
```
## 图片
- image 函数,常用参数:
- height / width
- fit 图片比例
- 使用时直接粘贴图片即可
```typ
#image("assets/image-1.png",
height: 12cm,
width: 6cm,
fit: cover
)
```
## 表格
- table 函数,常用参数:
- columns 列宽
- stroke 边框
- align 文字位置
```typ
#table(
columns: (5cm,3cm,2cm),
stroke: 2pt + yellow,
align: center,
fill: (red, blue),
[学习], [线代], [数分],
[时间], [100h], [200h],
[地点], [?], [?],
)
columns: (5cm,1fr,2fr),
```

## 位置函数
- align 函数,常用参数:
- left, center, right, top, horizon, bottom
```typ
#align((left, top))[
内容
]
```
## 二维布局函数
- grid 可以将元素进行二维布局
- 如何将右边的半圆和上张ppt中的表格并排放置
```typ
#align(center)[
#curve(
fill: blue.lighten(80%),
stroke: blue,
curve.move((0pt, 50pt)),
curve.line((100pt, 50pt)),
curve.cubic(none, (90pt, 0pt), (50pt, 0pt)),
curve.close(),
),
]
```

```typ
#grid(
columns: (1fr, 1fr),
align(center)[
#curve(
fill: blue.lighten(80%),
stroke: blue,
curve.move((0pt, 50pt)),
curve.line((100pt, 50pt)),
curve.cubic(none, (90pt, 0pt), (50pt, 0pt)),
curve.close(),
),
],
table(
columns: (5cm,3cm,2cm),
stroke: 2pt + yellow,
align: center,
fill: (red, blue),
[学习], [线代], [数分],
[时间], [100h], [200h],
[地点], [?], [?]
)
)
```
## 链接
- link(url, content)
```typ
#link("https://typst.app", [Typst.app])
```