GitBook 自定义代码高亮问题

2015-11-01 10:35:21 +08:00
 pheyer

最近 Swift 2.1 版本发布,觉得 Swift 也差不得稳定,可以开始学习了。于是就下载了《 the-swift-programming-language-in-chinese 》电子书开始慢慢学习。

学习过程中发现不太喜欢里面的代码高亮(提供的 PDF 和 EPub 格式甚至没有代码高亮),想换成如同Prism Demo - Okaidia Theme一样的代码高亮方式。这是我在使用了 MacDown 这个软件写 MarkDown 文章后,发现的一个不错黑底代码高亮风格,在 MacDown 里面的名字是 Github2 css/okaidia ,全名大概是 Prism Okaidia Theme 。

各种搜索,找到了两种相关的 okaidia 代码高亮资源,但问题是不知道怎么用。

第一种是在 npmjs 上找到的prismjs-okaidia-theme,这应该可以通过下面的命令进行安装:

npm install prismjs-okaidia-theme -g

但是安装之后怎么应用到 GitBook 上,我没找到答案。

第二种是去这个链接里手动配置代码高亮样式并下载 js 与 css 文件,同样是在使用上遇到难题。有一个相关的资料:根据Introduction | Swift Codeblocks Syntax Highlight, Coding 和 Gitbook 都通过 highlightjs 支持 swift 语法高亮。其中有这么一句:一般 html 解决办法见highlight.js,需要 xcode.css 、 highlight.pack.js ,看了一下还是没怎么搞懂。

也是学习 Swift 才第一次接触 GitBook ,很多东西包括 Js 与 NPM 都不甚了解,所以在这里求教一下 GitBook 高手,应该怎么把上面的代码高亮资源应用到 GitBook 里?

9913 次点击
所在节点    程序员
7 条回复
phyng
2015-11-01 10:42:30 +08:00
使用这个插件 https://github.com/gaearon/gitbook-plugin-prism ,然后可能要修改一下 https://github.com/gaearon/gitbook-plugin-prism/blob/master/index.js 里面的这一行 var prismCSS = require.resolve('prismjs/themes/prism.css');,改成你要的 themes/prism-okaidia.css
pheyer
2015-11-01 10:54:03 +08:00
@phyng 你说的链接我看到过,下载这个插件的命令应该是 npm install gitbook-plugin-prism
-g 。问题是如果我修改了 index.js ,不就是更新了插件源码吗,我怎么重新编译插件?或者说不用编译,找到插件路径修改就行?如果是的话这个路径在哪里?
还有 themes/prism-okaidia.css 这个路径在我安装了插件之后就有了吗?或者还是要我自己提供?
抱歉,新手总是有些不明白的地方
phyng
2015-11-01 12:21:32 +08:00
@pheyer
1. 是的, js 不需要编译
2. npm 加 -g 参数默认是安装在系统目录,不加 -g 默认安装路径在项目文件夹下的 node_modules/
3. npm 通过 package.json 配置, gitbook-plugin-prism 项目的 package.json 里面写明了依赖 prismjs ,安装的时候会自动下载 prism
4. gitbook 的插件是通过 book.json 设置,但是每次改动插件需要通过 gitbook install 加载
---
我闲着试了一下,这个插件不完善, prism-okaidia.css 优先级不高,我简单的加了一些 important ……
Github : https://github.com/phyng/gitbook-plugin-prism-test
Demo : http://phyng.com/gitbook-plugin-prism-test/
pheyer
2015-11-01 18:09:28 +08:00
@phyng 谢谢,现在差不多实现我想要的效果了,不过貌似有点小 bug
关于你说的 important 我是用代码比较才知道哪些是要加 important 的,大概改动了三个文件。
bug 代码示例:
```
let initialBits: UInt8 = 0b00001111
let invertedBits = ~initialBits // 等于 0b11110000
```
当类似上面的代码没有指定语言时,显示的效果是完全黑块,字体居然是黑色了——是在前面的 Swift 书中发现的,好多代码块都没有指定语言😂
另外一个问题是代码高亮的字体好像比较单薄,从你给的 Demo 里就可以看出来,不如 http://colobu.com/2014/10/09/gitbook-quickstart/这个网页的里面代码那么饱满
pheyer
2015-11-01 19:45:52 +08:00
@pheyer 偶然发现字体单薄是在 Chrome 中比较明显,在 Firefox 中好多了, Mac 环境
phyng
2015-11-01 20:33:10 +08:00
@pheyer 字体问题大概因为你给的链接里面的字体大小是 16px ,然后可能还跟 font-family 也有关,这些都是 CSS 的问题;没有指定语言的时候 markdown 解析器自然不会高亮(高亮就是解析语言不同的 token 加上不同的 class 再通过设置不同 class 的样式),可以写个程序给源文件指定一下语言
--
修正了没有语言的效果,字体大小设置为 16px ,(CSS 里面使用 !important 是很脏的代码- -!): https://github.com/phyng/gitbook-plugin-prism-test/commit/92036de20f22df166ece9aec57b6fe9bcd9b17f7
pheyer
2015-11-01 22:02:19 +08:00
@phyng 嗯, bug 解决了
目前也就看看网页了,试了一转换成 EPUB, Mobi, PDF 格式,代码显示乱得一塌糊涂,坑还是有很多,就不管了吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/232628

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX