+
+ +
+
+ +
+
+ +
+ +

代码高亮

+

使用 gitbook 默认高亮

+

对于大多数被广泛使用的语言,无需做任何配置,在 markdown 中插入代码块就行。

+

但是如果你要插入一种未被支持的语言,代码块就没有任何高亮,看起来比较丑。

+

下面给出我的一种解决方案:

+

使用 prism 插件

+

禁用 gitbook 默认高亮并使用 prism 高亮插件:

+
// book.json
+{
+    "plugins": [
+        "-highlight",
+        "prism"
+    ],
+    "pluginsConfig": {
+        "prism": {
+            // 设置个人比较喜欢的暗色调主题
+            // 可以去同目录下找更多的主题
+            "css": ["prismjs/themes/prism-tomorrom.css"]
+        }
+    }
+}
+
+

随后通过 gitbook install 安装插件。

+

最后 gitbook build 就可以看到效果了。

+

添加自己的语言支持

+

在安装 prism 插件后,我们可以看一下 node_modules/prismjs/components 文件夹,里面包含了目前可用的所有语言支持。比如说有一个 prism-c.js ,那么就表明支持 C 语言。

+

下面以我支持 riscv 汇编高亮的流程来举例说明一下:

+
    +
  1. 写一个 prism-riscv.js 并复制到 components 文件夹下,可在这里找到。 +这里面只进行简单的词法分析,使用一个正则表达式 pattern 来匹配一种词,并使用别名 alias 来描述这种词的类型,其实也就是决定最后渲染出来这种词的颜色。

    +

    我这里大概就是寄存器一种颜色,指令一种颜色,伪指令一种颜色。对于汇编语言这也就够了。

    +

    然而 prism 还支持更高级一点的语法分析

    +
  2. +
  3. 将你的语言注册到 node_modules/prismjs/components.json

    +

    打开看一下,就是在 languages 插入一个描述你的语言的贡献者和名字的键值对。

    +

    我的代码如下:

    +
  4. +
+
# add_riscv_component.py
+
+import json
+
+json_path = 'node_modules/prismjs/components.json'
+
+data = json.load(open(json_path))
+data['languages']['riscv'] = {'title': 'RISC-V', 'owner': 'shinbokuow2'}
+with open(json_path, 'w') as f:
+f.write(json.dumps(data, sort_keys = True, indent = 4))
+
+

如果只是自己用的话这就够了,想要为 prism 社区做贡献的参考这里

+

gitbook build 之前做完上面两步,build 之后你会发现 riscv 代码块被正确高亮了!

+

行内代码

+

gitbook 默认的行内代码和普通字体是一个颜色,我们希望它在灰色背景的同时字体变为红色,更加显眼。

+

我的做法是在 gitbook build 之后直接暴力改生成的 css 。这个 css 放在 docs/gitbook/style.css。(build 之后的结果本来应该放在 _book 文件夹下,为了套用 Github Page 将其重命名为 docs

+
# add_code_style.py
+
+s = open('docs/gitbook/style.css').read()
+code = 'markdown-section code{'
+color_red = 'color:#bf616a;'
+code_in_pre = 'markdown-section pre>code{'
+color_inherit = 'color:#ccc;'
+s = s.replace(code, code + color_red)
+s = s.replace(code_in_pre, code_in_pre + color_inherit)
+with open('docs/gitbook/style.css', 'w') as f:
+    f.write(s)
+
+

+ + +
+ +
+
+
+ +

results matching ""

+
    + +
    +
    + +

    No results matching ""

    + +
    +
    +
    + +
    +
    +
    + +

    results matching ""

    +
      + +
      +
      + +

      No results matching ""

      + +
      +
      +
      + +
      +