mdBook
是一个用于创建在线书籍的工具,类似于GitBook,但专门设计用于Rust社区。它能够将Markdown文件转换成可浏览的HTML书籍格式,并且支持嵌入代码、生成导航栏、搜索功能等。不选择GitBook的原因在于gitbook cli多年未更新,大部分优化都用于商业化了,其次其生成pdf的方式坑比较多。
1. 介绍
mdBook
是一个用于创建在线书籍的工具,类似于GitBook,但专门设计用于Rust社区。它能够将Markdown文件转换成可浏览的HTML书籍格式,并且支持嵌入代码、生成导航栏、搜索功能等。
不选择GitBook的原因在于gitbook cli多年未更新,大部分优化都用于商业化了,其次其生成pdf的方式坑比较多。
2. 安装mdbook与插件
mdbook需要rust1.72以上版本才能安装,cargo是rust的包管理器。
cargo install mdbook
安装mdbook-pdf,用于生成pdf,由于生成pdf方式使用chrome,所以需要安装chromium,然后配置环境变量,或直接指定配置(见下文)
cargo install mdbook-pdf
安装pdf的目录生成工具,需要python>=3.9。
python3 -m pip install mdbook-pdf-outline
安装pdf.tocgen
,用于修复firefox浏览pdf时,目录的页码错误。
python3 -m pip install pdf.tocgen
3. 生成pdf
首先修改book.toml,增加pdf配置:
[book]
authors = ["wendajiang"]
language = "zh"
multilingual = false
src = "src"
title = "Effective Modern C++"
[output.html]
mathjax-support = true
no-section-label = true
git-repository-url = "https://github.com/CnTransGroup/EffectiveModernCppChinese"
git-repository-icon = "fa-github"
[output.pdf]
## Set for auto-retrying if failed to generate PDF.
# trying-times = 1
## This backend only support latest Chromium based browsers, not Safari and Firefox currently.
## If needed, please specify the full path.
## If you specify the wrong binary, chances are that there will be a timeout error.
# browser-binary-path = ""
## Assign the static hosting site url so that relative links outside the book can be fixed.
# static_site_url = "https://aye10032.gitbook.io/computernetwork/"
## Check Chrome Devtools Protocol Docs for the explanation of the following params:
## https://chromedevtools.github.io/devtools-protocol/tot/Page/#method-printToPDF
landscape = false
display-header-footer = true
print-background = true
theme = ""
scale = 0.8
paper-width = 8
paper-height = 10
margin-top = 0.5
margin-bottom = 0.5
margin-left = 0.5
margin-right = 0.5
page-ranges = ""
ignore-invalid-page-ranges = false
header-template = "<h3 style='font-size:8px; margin-left: 48%' class='title'></h3>"
footer-template = "<p style='font-size:10px; margin-left: 48%'><span class='pageNumber'></span> / <span class='totalPages'></span></p>"
prefer-css-page-size = true
[output.pdf-outline]
like-wkhtmltopdf = true ## 启用该配置可以帮助生成更为详细的目录
首先运行mdbook build
,生成原始pdf文件和带目录的pdf文件,然后使用pdf阅读器打开后,发现页码会少1页,无法对齐。此时假如使用firefox的pdf.js打开pdf文件,会出现更为离谱的页码错误。
这时,pdf.tocgen
作用就体现出来,使用以下命令提取该pdf文件的目录并重新写到out.pdf
:
pdftocio book/pdf-outline/output.pdf > toc.txt && pdftocio -o out.pdf book/pdf-outline/output.pdf < toc.txt && rm -f toc.txt
Comments NOTHING