20 个版本 (6 个重大更新)
0.7.1 | 2024 年 7 月 22 日 |
---|---|
0.6.4 | 2024 年 4 月 7 日 |
0.6.2 | 2024 年 3 月 22 日 |
0.3.1 | 2023 年 12 月 27 日 |
0.1.1 | 2023 年 11 月 23 日 |
#159 in 文本处理
每月下载量 4,892
155KB
3.5K SLoC
mdbook-pandoc
一个将大部分渲染过程外包给 pandoc
的 mdbook
后端。通过依赖 pandoc,支持许多输出格式,尽管该项目主要是针对 LaTeX 开发的。
请参阅 渲染的书籍 以查看渲染书籍的示例。
安装
-
安装
mdbook-pandoc
要安装发布到 crates.io 的最新版本
cargo install mdbook-pandoc
安装 GitHub 上提交的最新版本
cargo install --git https://github.com/max-heller/mdbook-pandoc.git mdbook-pandoc
-
注意:
mdbook-pandoc
与 Pandoc 2.10.1 或更高版本配合最佳。旧版本(如 2.8 或更低版本)部分支持,但会导致输出质量下降。如果您已安装 Pandoc 的旧版本(特别是,在 23.04 之前的 Ubuntu 版本中,其软件包仓库中的 Pandoc 版本低于推荐版本),请考虑从 Pandoc 的安装页面下载较新版本。
入门
通过更新您的 book.toml
文件来指导 mdbook
使用 mdbook-pandoc
。以下示例配置 mdbook-pandoc
以使用 LaTeX(必须 安装)生成书的 PDF 版本。要生成其他输出格式,请参阅 配置。
[book]
title = "My First Book"
+ [output.pandoc.profile.pdf]
+ output-file = "output.pdf"
+ to = "latex"
运行 mdbook build
将会将渲染后的书籍写入 pdf/output.pdf
,保存到 mdbook-pandoc
的 构建目录(如果配置了多个渲染器则为 book/pandoc
;否则为 book
)。
配置
由于 mdbook-pandoc
通过 pandoc
支持许多不同的输出格式,因此它必须在书籍的 book.toml
文件中的 [output.pandoc]
表中配置,以将书籍渲染为一种或多种格式。
配置围绕 输出配置文件 展开,这是 mdbook-pandoc
将作为 默认文件 传递给 pandoc
的命名选项包,以将书籍渲染为特定的格式。每个配置文件的输出将写入与配置文件同名的子目录中,该子目录位于 mdbook-pandoc
的顶级 构建目录(如果配置了多个渲染器则为 book/pandoc
;否则为 book
)。
以下描述了可用选项的一个子集
注意: Pandoc 从书籍的根目录(包含
book.toml
的目录)运行。因此,配置中的相对路径(例如include-in-header
、reference-doc
的值)应该相对于书籍的根目录编写。
[output.pandoc]
hosted-html = "https://doc.rust-lang.net.cn/book" # URL of a HTML version of the book
[output.pandoc.code]
# Display hidden lines in code blocks (e.g., lines in Rust blocks prefixed by '#').
# See https://rust-lang.github.io/mdBook/format/mdbook.html?highlight=hidden#hiding-code-lines
show-hidden-lines = false
[output.pandoc.profile.<name>] # options to pass to Pandoc (see https://pandoc.org/MANUAL.html#defaults-files)
output-file = "output.pdf" # output file (within the profile's build directory)
to = "latex" # output format
# PDF-specific settings
pdf-engine = "pdflatex" # engine to use to produce PDF output
# `mdbook-pandoc` overrides Pandoc's defaults for the following options to better support mdBooks
from = "commonmark" # source format; extensions enabled/disabled through this option are preserved
file-scope = true # parse each file individually before combining
number-sections = true # number sections headings
standalone = true # produce output with an appropriate header and footer
table-of-contents = true # include an automatically generated table of contents
# Arbitrary other Pandoc options can be specified as they would be in a Pandoc defaults file
# (see https://pandoc.org/MANUAL.html#defaults-files) but written in TOML instead of YAML...
# For example, to pass variables (https://pandoc.org/MANUAL.html#variables):
[output.pandoc.profile.<name>.variables]
# Set the pandoc variable named 'variable-name' to 'value'
variable-name = "value"
功能
- CommonMark + 由 mdBook 启用的扩展
- 目录
- 在解析链接时考虑
[output.html.redirect]
- 将 Font Awesome 4 图标(例如
<i class="fa fa-github"></i>
)转换为 LaTeX
预处理
mdbook-pandoc
在将书籍传递给 pandoc 之前执行一个简短的预处理步骤
- 为了使章节编号和生成的目录(如果适用),与在
SUMMARY.md
中定义的章节层次结构相匹配- 嵌套章节中的标题每级缩进一级
- 除了 H1 之外的所有标题都被标记为无编号和无列表
- 章节内的相对链接被“重置”为相对于源目录的,因此一个章节
src/foo/foo.md
可以通过[bar](bar.md)
链接到src/foo/bar.md
- Pandoc通过扩展
rebase_relative_paths
实现了此功能,但仅限于原生Markdown链接/图像,因此mdbook-pandoc
重新实现了它,以便未来支持原始HTML链接/图像
- Pandoc通过扩展
已知问题
- 除非章节包含一个具有非空标识符的标题(无论是自动生成的还是明确指定的),否则链接到章节不会工作。参见: https://github.com/max-heller/mdbook-pandoc/pull/100
与替代方案的比较
渲染的书籍
以下表格链接到使用 mdbook-pandoc
渲染的示例书籍。PDF使用LaTeX(LuaTeX)渲染。
书籍 | 渲染 |
---|---|
Cargo Book | |
mdBook Guide | |
Rustonomicon | |
Rust Book | |
Rust by Example | |
Rust Edition Guide | |
Embedded Rust Book | |
Rust Reference | |
Rust Compiler Development Guide |
渲染到PDF
- 当
mdbook-pandoc
最初编写时,现有的mdbook
LaTeX后端(mdbook-latex
,mdbook-tectonic
)由于手动处理markdown->LaTeX转换步骤,因此尚未成熟,无法渲染除最简单的书籍之外的内容。mdbook-pandoc
则将这个困难步骤外包给了pandoc,继承了其成熟度和可配置性。 - 基于“打印到PDF”的后端,如
mdbook-pdf
,更为成熟,但生成的PDF美学上可能不那么令人满意。此外,mdbook-pdf
不支持文档内链接或使用 mdbook的分支版本 生成目录。
渲染到其他格式
- 通过将大部分渲染过程外包给pandoc,
mdbook-pandoc
理论上支持许多不同的输出格式。其中大部分尚未经过测试,所以非常欢迎反馈其在不PDF格式上的表现!
依赖关系
~15–28MB
~438K SLoC