gitbookはmkdocs、mdbook、およびそれらの比較を移行します

私は自分のドキュメントや電子書籍を管理するためにコマンドラインツールを使用してきgitbookましたが、更新と開発が長い間停止しており、多くのバグがあり、代わりのものを探していました。

$ gitbook --version
CLI version: 2.3.2
GitBook version: 3.2.3
复制代码

gitbookに関するいくつかの問題

リンク一致エラー

リンクに次のものが含まれている場合、)生成されたリンクに問題が発生します。

[波拉地区](https://en.wikipedia.org/wiki/Pola_(Italian_province))
复制代码

になり波拉地区)、右側)がテキストとみなされ、テキストに対応するリンクも間違っているので、間違って書く必要があります。この問題は簡単に解決でき、)urlエンコードを使用します。

[波拉地区](https://en.wikipedia.org/wiki/Pola_%28Italian_province%29)
复制代码

脚注のジャンプが機能しない

脚注がカスタムテキストの場合、生成プロセスにエラーはなく、表示された脚注にもエラーはありませんが、実際にジャンプすることはできません。

in full expectation of victory.[^440.1]

[^440.1]: The Annals of Piacenza throw a new light on the history of Conradin
复制代码

section267.html#fn_440.1脚注のリンクは実際にfragmentはそれを含むURLですが、ブラウザはそれにジャンプできません。ブラウザがこの種のジャンプをサポートしていないのか、リンクを生成するプロセスが間違っているのか、個人の形式が間違っているのかわかりません。書き方が間違っていて(脚注を許可できません.か?)、調査する時間がありません。

脚注は複数行をサポートしていません

多くの本の脚注には、次のような段落もあります。

image.png

この質問は2016年に提起されましたが、解決されたことはありません。この場合、マークダウンの表現力は平均的であり、純粋なhtmlでも実現するのは簡単ではありませんが、少なくとも最も基本的な段落をサポートする必要があります。hexoはい、脚注の次の段落は、4つのスペースで始まる限り、ブロック構造として脚注の一部と見なすことができます。

インターネットで解決策を見つけました。これはgitbookにのみ適用できます。つまり、段落の後に引用符またはリスト文字を追加します。

> Que per valor et per noble coratge
>
> Mantenia W Enricx Vonrat linhalge
>
> De Colradi ah honrat vassalatge ;
>
> E'l reys W Anfos, ab son noble barutage
>
> Que a cor ric
>
> Den demandar tost sonfrair EN Enric,
>
复制代码

個別の空白行のない後続の各行は、依然として段落に連結されることに注意してください。これは少し醜いですが、この程度まで解決できるのは良いことです。

語彙不一致)

gitbookの用語集は私のお気に入りの機能の1つです。用語集は、本文のテキストセグメントのコメントを生成し、マウスをホバーして追加の説明テキストを表示できます。また、長い文の文の構造を区別するのに役立ち、簡単に削減できます。あいまいさ。意味。

ただし、次の形式の単語は語彙キーとして使用できません。

## Heinrich (VII)
复制代码

估计和链接不匹配)的问题是一样的,然而不能用%29这种方式解决,这实在是不给力,得看源码才能知道是怎么回事。

词汇表不匹配非英文字符

中文地名无法作为词汇表的key:

亲自护送囚犯到帕莱斯特里纳附近的圣彼得罗 GLOSSARY.md中:

## 帕莱斯特里纳
复制代码

要达到效果只能在正文中加入英文单词并用英文单词作为key:

亲自护送囚犯到帕莱斯特里纳(Palestrina)附近的圣彼得罗,在GLOSSARY.md中:

## Palestrina

帕莱斯特里纳是意大利拉齐奥大区罗马首都广域市的一个市镇。
复制代码

其实这个问题准确的说是不能匹配非英文字符结尾的单词,如果出现一些其它语言的字符也不能作为词汇表的key,如Brancaleone von Andalò,但如果出现在中间,如Connétable就没问题。

构建速度慢

一旦有大量章节和文件,gitbook就比较慢了,手头有本书是多语言的,每种语言有168个md文件,再加上词汇表有大量词语,要搜索匹配文本,慢得一塌糊涂,构建一次快5分钟了。

不能热更新

gitbook似乎自带liveload插件,一旦修改文件照理能自动热更的,然而实际并没有,可能有好用的插件,但没有仔细找过。

pdf效果很差

在book.json里设置pdf的marign参数,本地用gitbook生成的pdf文件根本不生效,生成的目录也很丑陋,总是以1.打头,有点不舒服。

试用mkdocs

$ mkdocs -V
mkdocs, version 1.3.0
复制代码

mkdocs是用python实现的,也是比较常用的markdown工具。

mkdocs兼容gitbook

使用mkdocs一个首要问题便是,如何兼容已有的大量的gitbook项目,如果一个一个的改配置,绝对无法忍受。研究了一下mkdocs,似乎它主要功能是为了生成静态站点,不是针对电子书。

固定的格式 mkdocs根目录需要有mkdocs.yml配置文件,源文件全部在根目录的docs/目录下,而且也不能配置。

自动生成目录 不像gitbook需要一个固定的SUMMARY.md文件来表示目录,mkdocs根据docs/的目录结构自动生成目录索引。

典型的gitbook多语言项目的目录:

LANGS.md
de/
  book.json
  SUMMARY.md
  README.md
en/
  book.json
  SUMMARY.md
  README.md
zh/
  book.json
  SUMMARY.md
  README.md
  GLOSSARY.md
复制代码

当然可以新建docs目录,再将各语言目录移动到docs目录下,然而这样git会生成一大坨改动记录,没有做很好的兼容,可以用软链接达到这一目的:

docs/
  de -> ../de
  en -> ../en
  zh -> ../zh
复制代码

用命令ln -s ../en docs/en就可以了,mkdocs.yml添加常规的属性就行,没有什么特别。

脚注自动生成序列

mkdocs本身不支持脚注,需要以扩展的形式在配置文件mkdocs.yml中加入:

markdown_extensions:
  - footnotes
复制代码

mkdocs把所有的脚注都按顺序自动生成了从1开始的数字序列,这样浏览器是可以识别的,成功跳转。

脚注同样不支持多行

mkdocs的脚注不支持多行,也没有解法,使用引用符显示会不正确。

不支持词汇表

mkdocs看起来比较灵活,似乎需要以自定义的形式写一些类似预处理器,没有再进一步研究了。

构建速度

python应该是快一点的,但没有benchmark的基准测试没有定论。

不能生成电子书格式


试用mdbook

mdbook最好是直接使用它的二进制命令,而不是通过包管理器安装,那样很麻烦

直接安装命令

下载相应系统的压缩包并解压:

wget https://github.com/rust-lang/mdBook/releases/download/v0.4.17/mdbook-v0.4.17-x86_64-unknown-linux-gnu.tar.gz

tar -zxvf mdbook-v0.4.17-x86_64-unknown-linux-gnu.tar.gz
mv mdbook ~/.local/bin
复制代码

解压完当前目录有一个可执行的文件mdbook,移动至~/.local/bin就可以直接引用命令了。如果用包管理器安装,需要先安rust语言的包管理器cargo,再用cargo安装mdbook。

$ mdbook --version
mdbook v0.4.17
复制代码

mdbook可以说是最接近gitbook的工具了,从目录结构与用法上,基本无缝支持。

mdbook兼容gitbook

mdbook如果非要支持多语言项目本身也不难,只需写一个SUMMARY.md文件,包含各语言的目录就没问题了。然而麻烦的是,对于已有的gitbook项目要如何支持呢,写一个包含所有目录的SUMMARY.md文件比较琐碎,而且分散在各个语言目录下的SUMMARY.md就得作废,只能从mdbook的配置文件book.toml入手。

可配置的格式 mdbook默认使用根目录下的src作为源码的目录,显然不能新建src再把所有源码目录移入,它的构建目录也不一样,还好这些都可以配置。

只能在各语言目录下分别构建自己的项目了,也就是说各语言目录下再多一个book.toml,这个问题不大,因为原本各语言就有一个自己的book.json

de/
  book.toml
en/
  book.toml
zh/
  book.toml
复制代码

book.toml如下,最关键的是src,build-dir两个key:

[book]
title = "罗马城中世纪史"
description = "从第五世纪到第十六世纪"
author = "[德] 斐迪南·格雷戈罗维乌斯, 译 林鹿"
multilingual = true
src = "."

[build]
build-dir = "_book"
create-missing = false
复制代码

运行时,分别在各语言目录下执行mdbook serve, 这样能比较完整的支持已经有项目了。

脚注自动生成序列

与mkdocs一样,mdbook也自动生成数字序列,跳转无误。

脚注同样不支持多行

效果与mkdocs一样

不支持词汇表

可能需要按照mdbook的规范写一些preprocessor,得深入研究一下。

构建速度

当然它的构建速度按照预想应该相当快。

不能生成电子书


总体来说,目前这2个替代工具用起来也不是特别顺手,只能先继续用gitbook,要彻底解决非得深入gitbook源码了。但这么长时间没有更新,也没见社区开源爱好者们在这个基础上继续贡献,是有人改了没人合进主线还是源码太庞大不好改?也没有人另起炉社。

おすすめ

転載: juejin.im/post/7086386302861443103