# 高级用法
>如果想要修改页面的显示或者定制某些页面的部分, 可以参考官方文档上的 [Customization 部分](https://toolchain.gitbook.com/templating/). 以下只介绍一些常用的定制功能.
**[1. 主题](#主题)**
**[2. 定义变量](#定义变量)**
**[3. 页面的通用修改](#页面的通用修改)**
**[4. 插件](#插件)**
**[5. 流程图](#流程图)**
## 主题
gitbook 支持主题, 当你的 gitbook 应用了这些主题之后, 页面显示内容的方式都会发生改变.
[这里](#插件)是使用主题的方法.
同一时间只能使用一个主题, 下面是一些常用的主题.
### 默认主题
本文档现在用的就是默认主题
### faq 主题
https://github.com/GitbookIO/theme-faq
![api](/image/theme-faq.png)
### api 主题
https://github.com/GitbookIO/theme-api
![api](/image/theme-dark.png)
## 定义变量
### 局部变量
我们可以在每个 Markdown 页面中定义变量, 并在接下来的页面内容中使用这些变量, 比如我们在某个页面 xxx.md 中这样写:
```
{% set softwareVersion = "1.0.0" %}
Current version is {{ softwareVersion }}. // 页面将会显示为 Current version is 1.0.0.
```
### 全局变量
除了局部变量外, 你也可以在项目根目录下的 `book.json` 中定义全局变量, 比如
```
...
//variables 与 title 属性平级
"variables": {
"admin": "张三"
}
```
定义好之后, 就可以在普通的页面中使用这些变量了.
```
联系管理员 {{ book.admin }} 解决 // 页面将会显示为 联系管理员 张三 解决
```
### 系统变量
在上面全局变量的使用中, 我们可以发现使用的是 `book.admin`, 其实这里的 `book` 就是一个系统变量, 跟他类似的还有很多系统变量, 用户都可以在页面中的任何地方去使用这些系统变量
需要注意的是, 系统变量不能动态的被修改(除非使用插件才有可能做到), 只能提前在相应的文件中定义好.
```
//像下面这种语法是错误的, 无法动态为一个系统变量赋值
{% set book.admin = "李四" %}
```
想要了解更多的系统变量, 请参考[这里](https://toolchain.gitbook.com/templating/variables.html)
## 页面的通用修改
上面已经介绍过页面的主题, 当我们没有主动设置一个主题时, gitbook就会自动应用它自带的默认主题. 在使用主题后, 所有 gitbook 页面都按照主题所设置的模板规则来显示, 我们可以对主题的模板规则进行修改, 这样的修改就会应用到所有页面.
比如对于我们使用的默认模板来说, 如果我们想要修改这个默认模板的行为, 比如修改页面的 title, 可以直接对这个文件 `_layouts/website/page.html` 进行修改(没有的话请自行创建)
```
{% extends template.self %} // 继承模板所有的内容
{% block title %} // 对模板中的 title block 进行覆写
Gitbook 帮助文档
{% endblock %}
```
对于其它的主题, 比如 api 主题或是 faq, 也是进行类似的操作就可以修改模板的行为, 只是每个模板的具体的参数和修改方式不同
## 插件
插件是最主要的对 gitbook 进行定制化的工具, 即使主题也是插件的一种. 要使用插件, 我们需要在 `book.json` 中先声明.
以 "api 主题" 这个插件为例, 首先我们需要添加下面的内容到 `book.json` 中,
```
{
"plugins": ["theme-api"],
"pluginsConfig": {
"theme-api": {
"theme": "dark"
}
}
}
```
其中, `plugins` 中声明所有你想要安装的插件的名称, `pluginsConfig` 中可以对每个插件的可选配置进行修改, 比如 `theme-api` 的可选配置就是主题的颜色, 有 dark 和 light 两个选择给用户使用.
常用插件列表可以参考这些:
* https://yangjh.oschina.io/gitbook/faq/Recommand.html
* http://gitbook.wiliam.me/plugins.html
>要注意, 有些网络上的插件由于版本太老旧, 已经不适合现在的版本, 所以有的时候会出现即使安装了插件也没有任何效果的情况
## 流程图
当前的项目中, 已经在 scripts 文件夹下引入了 mermaidjs, 通过这个 js 库可以实现在 markdown 中直接通过代码的形式生成流程图.
以下是示例.