使用mdbook构筑你自己的电子笔记
本文最后更新于 2023年8月27日 下午
前言
写下本文的动机其实是记录一下我自己准备跳出gitbook时所做的事情。在之前,我是拿gitbook来做笔记并且保存在GitHub的,gitbook很好用,渲染也漂亮,还提供免费的在线浏览。不过有一个问题就是这玩意在商业化之后吃相难看起来了,下载要收费,导出PDF要收费,什么都要收费。于是转而开始寻找替代品,找到了这个:mdbook。
mdbook是一个基于rust的电子书系统,使用起来和原来的gitbook别无二致,同时也有大量的第三方插件可供选择,基本上如果你以前使用的是gitbook,那么你将能够非常完美的转换为使用mdbook编写书籍.
一、安装[1]
1.1 安装rust[2]
由于mdbook是使用rust编写的,因此在使用时需要先安装rust,本教程使用的环境为Windows11,因此直接在下载界面下载官方的rustup-init.exe
后运行即可。
运行之后会出现这样一个命令行界面,直接回车即可:
之后它就会开始自行安装相关组件并添加环境变量,当运行结束之后,再次回车退出即可:
此时再次打开命令行,输入以下指令:
1 |
|
如果能够正常输出,则说明安装成功:
1.2 安装mdbook
打开命令行,运行以下指令:
1 |
|
它会安装GitHub上最新版本的mdbook,不过如果你网络不太行,在这一步失败的话,也可以直接运行:
1 |
|
这会安装发行版的mdbook,版本可能会存在些许的更新不及时,但一般也不会差太多。
安装完毕之后,运行:
1 |
|
正常输出,安装成功。
二、编写书籍
2.1 初始化目录
来到你想要创建书籍的根目录下,运行以下指令:
1 |
|
这行指令会自动建立文件夹,例如你希望你的书存在D:/notebook/mybook
下,那么实际上你需要做的是进入notebook目录,运行
1 |
|
运行过程中会询问是否创建gitignore和书籍名称是什么,选是并输入你的书籍名称即可:
运行完毕之后,可以看到它自行创建了PRMLNote文件夹,并在其中创建了初始文件:
此时在这个目录中运行以下指令:
1 |
|
mdbook就会自动生成html文件并在浏览器中打开:
由于我们还什么都没有写,因此这里就只有初始的默认界面。
2.2 配置文件
在我们的根目录中,有一个book.toml
文件,这个文件就是我们书籍的配置文件,书籍的标题、渲染主题、第三方插件等都是在这里配置的。我这里贴一个我的示例:
1 |
|
当然你的肯定不会跟我一样,这里有几个条目:
- authors:作者,可以有多个
- language:书籍的语言,如果下面的multilingual没有启用,则这行意义不大
- multilingual:是否有多个语言翻译
- src:书籍源文件所在目录,默认为src
- title:书籍的标题
后面我们还会多次用到这个文件,记好了。
2.3 新建章节
与gitbook一样,mdbook也是使用一个SUMMARY.md
来管理文章组织结构的,我来贴一个例子加以说明:
1 |
|
同时附上目录结构:
通过这个SUMMARY.md
渲染出来的目录是这样的:
这样一来就比较好理解了,实际上,本身markdown文件怎么存,其实和目录结构是完全无关的,我这里分成多个文件夹完全是为了自己看的时候方便组织管理。真正决定目录结构的就是SUMMARY.md
中的缩进,每一级列表的缩进就代表一集目录,例如上图中的chapter_2.1,由于缩进了一级,因此在目录渲染后表现为一个二级目录。
同时,SUMMARY.md
中的一级标题也在目录渲染中起到作用,它会表现为一条单纯的文本,不可点击,例如上图的part1&2和part3,这也可以用于章节管理。
SUMMARY.md
的全文标题(默认为SUMMARY)在渲染时会被自动忽略
不过目前来看,mdbook好像还不能像gitbook那样通过命令行自动生成新的章节文件,因此你得每次手动编辑SUMMARY.md
来添加新的章节。
三、使用插件
mdbook本身有着丰富的第三方插件,官方列了一个插件列表:https://github.com/rust-lang/mdBook/wiki/Third-party-plugins。
每一个插件都有说明,你可以根据需要寻找符合要求的插件点进去链接查看如何配置,我这里说几个我常用的
3.1 数学公式支持
插件仓库链接:https://github.com/lzanini/mdbook-katex
安装&配置
运行以下命令进行安装:
1 |
|
安装完毕后,在book.toml
中添加以下内容:
1 |
|
具体参数的含义,这是官方的说明:
Argument | Type |
---|---|
output | "html" , "mathml" , or "htmlAndMathml" |
leqno | boolean |
fleqn | boolean |
throw-on-error | boolean |
error-color | string |
min-rule-thickness | number |
max-size | number |
max-expand | number |
trust | boolean |
不过基本上不需要修改,保持默认即可。
演示
源文件:
渲染结果:
3.2 HINT
在gitbook中,可以使用hint来实现一些提示块,在mdbook中,同样也有类似的插件实现这一功能,mdbook-admonish:
仓库链接:https://github.com/tommilligan/mdbook-admonish
安装&配置
首先安装该插件:
1 |
|
接下来,在书根目录下运行:
1 |
|
运行结束后,你会发现你的book.toml中多了以下内容:
1 |
|
同时,根目录下多了一个mdbook-admonish.css
文件,说明安装完毕。
演示
源代码:
1 |
|
渲染结果:
3.3 PDF导出
所使用的插件为mdbook-pdf,仓库地址:https://github.com/HollowMan6/mdbook-pdf
安装&配置
安装:
1 |
|
这里安装的时候需要电脑上有chrome或者edge,如果没有,可以安装一个,或者运行以下指令:
1 |
|
程序会制动下载chromium并编译运行。
安装完毕后,在book.toml
中添加以下内容:
1 |
|
支持目录
默认渲染出来的pdf是没有目录的,可以使用
1 |
|
安装mdbook-pdf-outline,并在book.toml
中添加:
1 |
|
之后通过mdbook build
编译,即可得到PDF文件。