文本编辑: Markdown, 和 Typst
本文信息
作者:TheOnlyEthene, Tianqi Zhang
状态:尚未审阅
引言
文本编辑工具是我们表达思想、传递知识的重要手段。无论是在科研、写作还是展示中,排版都是重要且必要的内容;我们需要选择合适的排版工具,以大大提高作品质量。
有一部分同学可能会认为,我们已经有微软提供的排版利器 Microsoft Word 了,为什么还需要这些看起来非常复杂的内容呢?这是因为,Word 虽然操作简单而舒适了,但是它既不能够像
让我们先从最简单的 Markdown 开始吧:
Markdown
什么是 Markdown?
Markdown 是一种轻量级的标记语言,可用于在纯文本文档中添加格式化元素。和其他排版工具相比,它仅仅使用十几个记号进行排版。这使得它易于学习,使得使用者能够更专注于内容的同时,快速地进行美观大方的排版。如你所见,我们所有 Getting Started 文章都是由 Markdown 书写的。
怎样使用 Markdown?
Markdown 甚至没有自己的专用编辑器,由此可见其轻量级,令人感叹。一般的,VS Code 已经集成了 MD 的编译,因此你完全可以于 VS Code 中创建一个名为 *.md
的文件,然后进行相关的操作。如果需要预览,则可以使用 VS Code 自带的侧边预览功能!
Markdown 的内容输入和纯文本文件几乎一模一样, 接下来我们将逐个介绍 Markdown 排版所用到的控制符号。值得注意的是,常用的标点符号(逗号、句号、问号等)均不是控制符号。
不过,在此之前,请把你的输入法标点符号切换为半角,防止出现类似于臭名昭著的¥¥错误;而我在接下来的内容中也会切换为半角!
分段, 换行, 分割线
在 Markdown 中, 必须通过空行来进行分段. 也就是说, 如果你想要对文件进行分段, 需要在两段之间加入一个空行. 特别注意, Markdown 不接受缩进或者首行缩进, 所以不要使用 Tab
键或者空格进行缩进! (否则会编译为代码块)
而如果希望仅仅换行而不分段, 则仅仅在行尾加入两个空格, 然后另起一行, 在新的行中书写; 或者使用兼容性更加好的 HTML 标记, 也就是 <br>
符号, 该符号无需另起一行也可以进行换行操作.
同时, 你可能会在某些网站看到行尾 \ 或者直接换行来进行换行操作, 这是因为 Markdown 语法具有明显的方言性特征, 不同的 Md 编译器对不同符号的处理不尽相同. 为了兼容性起见, 不建议使用这些符号.
对于分割线 (你经常会在知乎看见这种分割线), 请在单独一行上使用三个或多个星号 (***
)、破折号 (---
) 或下划线 (___
) ,并且不能包含其他内容。为了兼容性考虑, 请在该分割线前后加上空行.
转义符号 \
符号 \
是转义符. 该符号接下来的下一个符号不会被编译为 Markdown 的控制符号(代码块外, 代码块内的转义参见代码符号). 这使得你能够在不影响排版的前提下, 随意打出几乎所有的符号!
标题符号 #
符号 #
是标题符号. 在一行的开头打 #
号, 再接一个空格, 后面的内容就会被编译成标题. 这个空格不是必须的, 但是为了兼容性考虑, 建议加上.
打几个 #
号, 最终编译出来的就是几级标题.
强调符号 *
和删除线
这两个符号用于特别强调的词句, 可以实现粗体, 斜体, 粗斜体 和 删除线.
上述四个格式分别可以使用下列方法表示: **粗体**
,*斜体*
, ***粗斜体***
, ~~删除线~~
.
你可能会在有些地方见到使用下划线 _
来进行类似操作的, 但是同样为了兼容性考虑我不建议这样做.
值得注意的是, Markdown 不原生支持 下划线 ; 但因其支持 HTML 嵌入,可以通过 <u>下划线</u>
标签实现类似效果。不过需注意,在 HTML5 中该标签具有特定语义,建议装饰性下划线应通过 CSS 实现。
代码符号
这个符号用于进行代码高亮与代码块高亮.
小块代码高亮使用方法非常简单: 使用 `
把你需要的代码内容包装起来即可, 例如 `Hello, world!`
代码块则稍稍复杂一些, 你可以使用 把你需要的代码块内容包装起来. 在第一个
之后, 你可以手动指定代码使用的语言. 直接进行缩进也可以定义代码块.
代码块不属于 Markdown 正文, 因此内部的内容不会被编译. 你可以用完全相同的方式输入任何代码, 而不必增加多余的空行. 下面就是一个实例:
#include <iostream>
#include <cstdio>
int main()
{
std::cout << "Hello, world!" << std::endl;
return 0;
}
如果需要在代码块中打出 `
且防止此反引号被编译, 你可以这样编译: `
. 只要保证用于包装的反引号数量比防止编译的反引号数量多就可以了. 注意, 一定要使用空格分开反引号以避免歧义!
列表符号 1.
和 -
要创建有序列表和无序列表, 可以分别使用上述的两个符号. 上述几个符号和标题符号的使用方法类似, 这两格符号位于行首, 前面不能有内容, 后面应该有空格.
有序列表无序列表之间是可以嵌套的; 如果要制作多级列表, 请使用 Tab
缩进多级列表的内容即可.
值得注意的是, 有序列表中的 1.
也可以替换为其他数字, 反正满足数字加个点就行, Markdown 会自动帮你排序.
例如:
1. 甲乙丙丁
1. 戊己庚辛
1. 子丑寅卯
1. 辰巳午未
- 申酉
- 戌亥
1. 壬癸
会编译为:
- 甲乙丙丁
- 戊己庚辛
- 子丑寅卯
- 辰巳午未
- 申酉
- 戌亥
- 壬癸
引用符号 >
这个符号用于插入引用块, 处于引用块内部的文字与普通文字一样. 和标题符号一样, >
后面最好是有一个空格, 且前面什么都不要有.
引用块也是可以堆叠的, 只需要多增加几个引用符号即可:
偏差认知了
偏差认知
偏差认
偏差
偏
故障机器人是杀戮尖塔最强角色!
如果需要在不切断引用块的情况下分段, 请在预定的空行开头也加上上述引用符号.
表格
你可以使用下列手段创建一个原生表格: 使用三个或多个连字符(---
)创建每列的标题,并使用管道(|
)分隔每列。您可以选择在表的任一端添加管道。
你不必过度在意排版问题, 编译器会自动给你编译出优美的格式.
如果要使用左对齐/居中/右对齐, 请在连字符那里添加冒号: 左对齐使用 :---
, 居中使用 :---:
, 右对齐使用 ---:
.
下面是一个实例:
| Syntax | Description |
| --- | ----------- |
| Header | Title |
| Paragraph | Text |
得到的表格是这样的:
Syntax | Description |
---|---|
Header | Title |
Paragraph | Text |
表格中可以添加链接, 代码(仅反引号(`)中的单词或短语, 而不是代码块)和强调; 但是不能添加标题, 块引用, 列表, 图像或 HTML 标签。
外部路径: 图片与链接
要添加图像,请使用感叹号 (!), 然后在方括号增加替代文本,图片链接放在圆括号里,括号里的链接后可以增加一个可选的图片标题文本。
例如, 这是本文作者的 GitHub 头像, 则使用 
如果你需要在文档中插入链接, 则把链接文本放在中括号内, 链接地址放在后面的括号中.
例如, 一个著名代码共享平台叫做 Github, 其中 Github 这个超链接就是使用代码[Github](https://github.com)
完成的.
对于图片型超链接, 则把前面的中括号内的链接文本改为上述的图片路径即可.
公式符号: $
使用 $ $
框住对应的
特别注意
公式的前后应该有空格, 否则不会编译. 这是 Markdown 的自动转义特性导致的.
这样写:
这是一个 $\Latex$ 公式
而不要这样写:
这是一个$\Latex$公式
例如: 调和级数 $\sum_{i=1}^n \frac{1}{i}$
进行编译.
特别提醒
一定要用半角标点符号, 否则你会见到臭名昭著的 ¥¥ 类错误.
大多数的 Markdown 编译器都会正确渲染
公式,但是不排除少数编译器不支持渲染 ,一般而言,不支持渲染的编译器将会原样显示公式内容。开始写作前试试编辑器能否正常渲染公式总是好的选择。
什么是 ?
纵然如此,
怎样安装 ?
我好久好久没装过这玩意了, 本地安装与环境配置等待其他的人写罢
人话: 咕咕咕
虽然如此,我们还有 PKU LaTeX !它是一个由 LCPU 开发和维护的线上 (才...才不是给自己打广告呢)
怎样使用 ?
article
, 长文用 report
, 书本用 book
, 信件用 letter
, 简历用 moderncv
, 幻灯片用 beamer
... 遗憾的是, 上述文档类型除了大部分相同的通用语法以外, 还都有着自己独立的宏和语句功能. 如果需要全部精通上述文档类型, 难度不亚于掌握 C++23
的所有发行包, 连笔者都不能说自己全部掌握了它们. 因此我将仅仅讲述基本语法, 实用包和几种文档类型.
基本语法
一个最基本的
\documentclass{article}
\begin{document}
Hello, Latex!
\end{document}
上述第一行代码表明了文章的类型是 article
, 其意思是短文, 通常用于不太长的论文书写, 是
中间的 begin...end
结构则是
在 begin...end
结构之内的则是文章内容, 其分段手段与 Markdown 类似, 使用空行分段; 但是换行则需要使用符号 \\
(双反斜杠) 而不是行尾空格或者 HTML 控制符.
对于转义符号, 与 Markdown 的使用完全相同, 这里不再赘述.
标题
\maketitle
提供, 它应该紧随 \begin{document}
之后. 该标题的内容则需要在其他地方标明, 且标明的地方应该在 \maketitle
之前.
下面是一个实例:
\title{我是标题内容}
\author{我是作者}
\date{我是日期}
% \date{\today} 可以直接使用当日日期
\begin{document}
\maketitle % 这个的意思就是我把标题放在这里
我是正文
\end{document}
下级标题
\section
, \subsection
, \subsubsection
.
1, 2, ...
, 1.1, 1.2, ...
和 1.1.1, 1.1.2, ...
. 如果在标题上面加一个星号 *
则不会显示标题编号.
标题宏后面的大括号内的内容可以缺省, 这样就只有编号没有标题文字. 当然如果你想也可以给无编号标题缺省内容, 那样就相当于是空行了 但是你为什么要这么做?
\begin{document}
\section{我是二级标题}
\subsection{我是三级标题}
\section*{我是二级标题(无编号)}
\end{document}
列表
enumerate
支持, 无序列表由 itemize
支持, 两者使用几乎相同, 因此以有序列表为例.
\begin{enumerate}
\item 这是第一项
\item 这是第二项
\end{enumerate}
该列表可以直接插在 document
的任意地方. 列表支持多级列表, 只需要嵌套即可.
强调: 粗体, 斜体和下划线
在 \textbf{}
支持, 斜体使用 \textit{}
支持, 下划线使用 \underline{}
支持. 除此以外, 还可以使用 \emph{}
来对文字进行笼统的强调任务, 但是这个强调会随着使用包的不同和上下文环境的不同而改变.
这是一个\textbf{粗体}实例
这是一个\textit{斜体}实例
这是一个\underline{下划线}实例
公式
行内公式和 Markdown 的使用方式是一样的, 使用 $...$
把需要编译的公式包住即可. 例如写一个非常简单的乘法算式 $3\times 4 = 12$
, 编译出来就是
单列公式则会单独列出一行展示, 写法分为两种, 一种是简易形态的, 一种是较为正式的. 简易形态的单列公式使用的是 $$...$$
, 正式形态的单列公式则使用下面的宏:
\begin{equation}
3 \times 4 = 12
\end{equation}
正式形态的公式有以下的好处:
- 自带公式号;
- 能够更简单地使用
\label
等超链接形式.
除了展示方式不一样以外, 行内公式和单列公式的外观也有差别. 一般单列公式的外观更加美观大方, 而行内公式更加紧凑. 比如说求和符号:
你可以轻易地发现两者的差别. 一般当公式比较长的时候, 应该使用正式形态的公式.
除此之外, 还有多行公式, 使用的宏是 align
. 这个公式功能更强大, 不过使用更加复杂. 例如我们要做一个脱式计算, 这时候要考虑对齐问题, 此时则使用 &
来对齐 (本质上是制表符) , \\
来换行.
\begin{align}
& 3 \times 4 + 6 \\
=& 12 + 6
=& 18
\end{align}
注意到, 有一些符号在键盘是不能直接打出来的, 例如乘号
实用包简介
先前提到,
\documentclass{article}
\usepackage[UTF8]{ctex}
\begin{document}
你好, \Latex!
\end{document}
如上代码块所示, 你直接在文件类型下面增加一个使用包的命令即可, 很类似于 C++
的 #include
预编译指令, 或者 Python
的 import
指令. 中括号内的内容是调用包时进行的设置, 不同的包有不同的设置, 具体请参见相关网站.
ctex
伟大无需多言的中文支持, 使用方法刚刚已经举例过了.
AMS
系列
美国数学会出品的一系列宏包. 学会根据其印刷和电子出版物以及在线资料库的样式要求, 编写了一组用于排版数学出版物的宏包套件. 我们在这个系列中最经常使用的包有下列三个:
amssymb
提供符号;amsfonts
提供字体;amsmath
提供算符.
直接使用 usepackage
命令引用即可.
geometry
这是一个完全负责版式的宏包, 比
\usepackage{geometry}
\geometry{a4paper, margin=1in} % A4纸张, 页边距1英寸
graphicx
这是一个专门负责图片的宏包. 具体使用较为复杂, 参见 Overleaf 官方网站: 插入图片.
在使用这个宏包的时候, 建议把图片全部放到同一个位置, 以便于整理.
listings
这是一个专门负责代码的宏包. 具体使用较为复杂, 参见 Overleaf 官方网站: 列出代码.
上述官方网站列出了一个叫 verbatim
的宏包, 但是它过于香草味原始, 我个人非常不喜欢这个宏包, 不建议使用它来展示代码. 不过 verbatim
非常适合在
algorithm2e
这是一个专门负责伪代码的宏包, 在算法伪码上的表现比 listings
要好得多. 使用也较为复杂, 参见 Overleaf 官方网站: 算法
cases
这是一个负责分段函数等的宏包, 在分段函数和方程组上的表现比 align
要好得多. 不过有时候 usepackage
不需要单独列出这个宏包, 但是有时候不列出来就会出错. 下面的例子是直接从 Overleaf 上节选的, 这里就没有列出.
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\maketitle
$$
1+(-1)^n=
\begin{cases}
0, & \text{if $n$ odd}\\
2, & \text{otherwise}
\end{cases}
$$
\end{document}
这个包还有一些其他的写法, 例如 subnumcases
, 尚待读者主动探索.
beamer
简述: 令人头秃 (主观) 的演示文稿
beamer
可以称得上是 article
以外最重要的包了. 它能够通过非图形界面来编写一种风格非常鲜明 令人头秃 的演示文稿, 许多教授 (尤其是理工科院系) 非常喜欢这个包; 这是因为它能够极为完美地兼容
不过由于这个包的理工味道实在是过于浓重, 对于文史类的 Pre
(为什么大伙都在卷 PPT 的精美程度啊) 来说并不适用. 因此在何种情况下使用这个包, 需要同学们自己衡量.
beamer
基本语法
对于一个 beamer
而言, 它有一个最基本的组成单位 "帧", 指的是一张幻灯片, 宏名为 frame
.
下面是一个非常简单的 beamer
实例:
\documentclass{beamer}
\usepackage[UTF8]{ctex}
\title{如何科学摸鱼}
\author{某位学长}
\begin{document}
\begin{frame}
\frametitle{能量守恒定律}
摸鱼时长 $\propto$ 课程难度 $\times$ 截止日期焦虑^{-1}
\end{frame}
\end{document}
对于唯一的帧而言, 编出来的是这样的:
你可能会问: 标题哪去了?
别急, 标题在下面:
beamer
的特殊页语法
beamer
的特殊页有 2 个: 标题页和目录页. 使用方法非常简单:
\begin{frame}
\titlepage % 我是标题页, 该页基于\title结构自动生成
\end{frame}
\begin{frame}
\contentsname % 我是目录名称, 也可以缺省后面的内容
\tableofcontents % 我是目录页, 这也是根据文档的\section结构自动生成的
\end{frame}
值得注意的是, beamer
的目录页依赖于文档的固有 \section
结构. 如果没有上述结构, 那么目录页反而会留空.
beamer
的主题与配色
Beamer 提供了多种主题和颜色主题,可以通过 \usetheme 和 \usecolortheme 命令来设置.
这里是 beamer 官方的主题集合也是最令人头秃的一批. 当然, 你可以使用其他的主题; 关于主题的下载, 这里暂不介绍. (人话: 咕了)
beamer
的强调块
beamer
内置了三种强调块: 蓝块 \block
, 红块 \alertblock
, 以及绿块 \exampleblock
. 使用方式不用我再啰嗦了, 下面是一个实例: (使用的主题是 Berlin
, 配色为 default
; 如果有不同的配色, 则可能会有所不同)
\begin{frame}
\begin{block}{这是蓝块}
咕
\end{block}
\begin{alertblock}{这是红块}
咕咕
\end{alertblock}
\begin{exampleblock}{这是绿块}
咕咕咕
\end{exampleblock}
\end{frame}
以上是 Beamer 的一些最最基本的用法. 不过通过这些语法, 就可以创建出结构清晰、内容丰富的演示文稿了; 当然, Beamer 的功能远不止这些, 还有许多例如动画等的高级功能等待你去探索.
report
简述: 超超超长文的处理利器
如果说 article 是
它的核心优势在于分章节如呼吸般自然,内置 \chapter{} 直接生成超大号标题,搭配自动目录 (\tableofcontents) 和分页控制,轻松实现从「草稿像蚯蚓」到「排版像艺术品」的阶级跃迁 (当然,前提是你能肝完)。
基础操作:从入门到摆烂
\documentclass{report}
\usepackage[UTF8]{ctex}
\title{关于熬夜是否影响发量的研究}
\author{一位秃然的学者}
\begin{document}
\maketitle % 生成标题页(比beamer的\frame{\titlepage}更简单!)
\tableofcontents % 自动生成目录(建议写完全文再生成,否则目录可能比脸还干净)
\chapter{深夜作死原理}
\section{咖啡因代谢动力学}
凌晨2点的大脑:
\begin{equation}
\text{效率} = \frac{\text{咖啡摄入量}}{\text{ddl剩余时间}} + \epsilon_{\text{玄学}}
\end{equation}
\chapter{实验数据}
% 此处应有100个表格和50张图,但作者已躺平
\end{document}
编出来以后大概是这样的:
特别提醒
写 report 时请远离 Ctrl+S 成瘾症: 因为文章超长, 每次保存后重新编译的时间足够你思考人生三遍。这边建议关掉自动编译, 写完以后一口气编完, 把等待时间用来补觉
或植发。用
\tableofcontents
自动生成目录后,可用tocloft
包调整行距/缩进,防止目录页比正文还长(被暴打力)(悲)什么, 你想让我写怎么用
tocloft
包? (╯‵□′)╯︵┻━┻有时间会写的, 不过现在暂时还是咕了罢
moderncv
简述: 不用排版的简历? 还有这等好事?
moderncv
是简历界的一股清流: 它号称能让你彻底摆脱 Word 里对齐线、字号和页边距的噩梦,用
不过要注意,此包自带一股“性冷淡极简风”,如果你梦想设计出五彩斑斓的黑/赛博朋克特效简历,建议直接转行当 UI 设计师 (或者去某宝花 5 块钱买个模板)。
只需声明文档类型为 moderncv,就能召唤出标准简历框架。以下代码足以让 HR/导师眼前一亮 (也可能眼前一黑):
\documentclass{moderncv}
\usepackage[UTF8]{ctex}
\moderncvtheme[blue]{casual} % 主题选casual,颜色选忧郁蓝
\name{王小明}{摸鱼学硕士} % 名字和头衔分开写,防止过于嚣张
\email{run@fast.com} % 建议别用“ilovexxx@qq.com”
\social[github]{github.com/xxx} % 虽然你仓库里可能到头来只有HelloWorld
\social[linkedin]{xxx} % 假装有国际化人脉, 不过谁用领英啊 (大嘘)
\quote{Stay hungry, stay foolish} % 乔布斯名言,HR已免疫
\begin{document}
\maketitle % 生成个人信息区块
\section{教育背景}
\cventry{2021--2025}{专业:理论与实操}{如何科学划水大学}{寄点3.7/5.0}{}{核心课程:《咖啡因代谢学》《早八生存指南》}
\section{实习经历}
\cventry{2023.06--2023.09}{首席工位守护者}{某厂}{}{}{主要成就:带薪拉屎时长部门TOP1}
\end{document}
编出来以后大概是这样的:
⚠️警告:此包可能导致副作用——当发现同学还在用 Word 调段落间距时,会忍不住露出怜悯微笑 (然后被揍)
该包的一个极为良好的特性是, 自动压缩空白区域, 可以有效地避免“半页纸尴尬”. 但是与其这样, 真不如多整点活填满这页纸吧 (大嘘) .
所以欢迎来 LCPU 玩
Typst
这玩意我也不会, 就咕咕咕了吧
此处能者居之
结语
由于本人的整活特性, 越到后来的且可能用不上的内容写得便越发抽象起来了. 不过我觉得这种求生指南 Blog 肯定是相对轻松一些更好: 这只是一个引导性质的内容, 更加进阶的内容肯定需要同学们自己去探索学习. 毕竟在你北上课可能是获取知识的最差手段之一了.
这边建议同学们先用这 12 篇博文的知识, 从日常作业开始慢慢上手, 再自行查找资料进阶与熟练: 至少技多不压身, 在未来写毕业论文或者课程论文的时候不必焦头烂额地现学了. 毕竟 ddl 是无止境的, 而头发是有限的; 两者相比, 看起来还是头发更重要哦( ̄▽ ̄)~*