写作语法速查#
这一篇是给自己看的备忘:这个站点支持的全部写法,以及每一种长什么样。 写新文章的时候直接回来抄。
一、每篇文章的开头#
每个 .md 文件最上面要有一段被两行 --- 夹住的信息。
这段不是正文,是给程序读的:日期决定文章在时间线上的位置,分类决定它出现在哪个分类页。
---
date: 2026-08-13
slug: my-post-name
authors:
- houzeyu
categories:
- 工具
- 单细胞
draft: false
---
# 文章标题
开头一两句话,这部分会显示在文章列表里当摘要。
<!-- more -->
正文从这里开始。
<!-- more --> 这一行是分界线:它上面的内容出现在列表页,下面的只有点进来才看得到。
slug 决定网址长什么样。上面这篇的网址会是 houzeyu.com/blog/2026/08/my-post-name/。
每篇都要写 slug,而且必须用英文小写加连字符。 不写的话程序会拿中文标题去生成网址,
变成 %E6%96%87%E7%AB%A0%E6%A0%87%E9%A2%98 这样一长串,分享出去很难看。
draft: true 的文章在本地预览时能看到,但执行发布命令时会被跳过。写到一半的文章加这一行就不会误发出去。
文件放在 docs/blog/posts/ 下面,文件名建议用 年-月-日-英文短名.md。
二、文字#
加粗,斜体,删除线,高亮,行内代码。
引用块。左边会有一条竖线,文字颜色变浅。
三、列表#
- 已完成的任务
- 未完成的任务
四、代码#
三个反引号开头,写上语言名字,三个反引号结尾。
加 title= 可以在代码块上方显示文件名。
```python title="preprocess.py"
import scanpy as sc
adata = sc.read_h5ad("data.h5ad")
sc.pp.normalize_total(adata, target_sum=1e4)
sc.pp.log1p(adata)
```
import scanpy as sc
adata = sc.read_h5ad("data.h5ad")
sc.pp.normalize_total(adata, target_sum=1e4)
sc.pp.log1p(adata)
右上角有复制按钮。支持的语言名很多,常用的:python r bash yaml json sql。
五、表格#
| 方法 | PCC | 备注 |
|---|---|---|
| GlobalMean | 0.80 | 基线 |
| CONCERT | 0.76 | 输给基线 |
---: 表示这一列右对齐,:---: 是居中。数字列右对齐更好读。
六、提示框#
标题可以自己写
缩进四个空格,写内容。
注意
这是警告框。
点击才展开
默认折叠起来,适合放冗长的推导过程或者一大段报错日志。
可用的类型:note abstract info tip success question
warning failure danger bug example quote。
七、数学公式#
行内用一对 $,独立成行用一对 $$。语法就是 LaTeX。
相关系数 $r \in [-1, 1]$,定义为
$$
r = \frac{\sum_i (x_i - \bar{x})(y_i - \bar{y})}
{\sqrt{\sum_i (x_i - \bar{x})^2} \sqrt{\sum_i (y_i - \bar{y})^2}}
$$
相关系数 \(r \in [-1, 1]\),定义为
八、图片#
把图片文件和 .md 放在同一个文件夹里,然后写:
如果一篇文章有好几张图,建议改成一篇一个文件夹:
把 2026-08-13-xxx.md 改成 2026-08-13-xxx/index.md,图片放进同一个文件夹。
这样图片不会和别的文章混在一起。
九、脚注#
这句话需要一个注释1。
十、键盘按键#
按 Ctrl+C 中断。
十一、分栏#
=== "R"
```r
m <- matrix(1:6, nrow = 2)
t(m)
```
=== "Python"
```python
import numpy as np
m = np.arange(1, 7).reshape(2, 3)
m.T
```
十二、写完之后#
在博客文件夹里执行两条命令。
预览的时候不联网也能用,改动只在自己电脑上。publish.sh 才会真的推上去。
-
注释内容会自动跑到页面最下面,并且带一个跳回去的箭头。 ↩