#mdbook #pandoc #pdf #latex #book

bin+lib mdbook-pandoc

将大部分渲染过程外包给 pandoc 的 mdbook 后端

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 文本处理

Download history 1285/week @ 2024-05-04 763/week @ 2024-05-11 1113/week @ 2024-05-18 1213/week @ 2024-05-25 867/week @ 2024-06-01 778/week @ 2024-06-08 620/week @ 2024-06-15 1141/week @ 2024-06-22 1416/week @ 2024-06-29 2058/week @ 2024-07-06 1145/week @ 2024-07-13 1693/week @ 2024-07-20 898/week @ 2024-07-27 790/week @ 2024-08-03 1255/week @ 2024-08-10 1916/week @ 2024-08-17

每月下载量 4,892

MIT/Apache

155KB
3.5K SLoC

mdbook-pandoc最新版本

一个将大部分渲染过程外包给 pandocmdbook 后端。通过依赖 pandoc,支持许多输出格式,尽管该项目主要是针对 LaTeX 开发的。

请参阅 渲染的书籍 以查看渲染书籍的示例。

安装

  • 安装 mdbook

  • 安装 mdbook-pandoc

    要安装发布到 crates.io 的最新版本

    cargo install mdbook-pandoc
    

    安装 GitHub 上提交的最新版本

    cargo install --git https://github.com/max-heller/mdbook-pandoc.git mdbook-pandoc
    
  • 安装 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-headerreference-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"

功能

预处理

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链接/图像

已知问题

与替代方案的比较

渲染的书籍

以下表格链接到使用 mdbook-pandoc 渲染的示例书籍。PDF使用LaTeX(LuaTeX)渲染。

书籍 渲染
Cargo Book PDF
mdBook Guide PDF
Rustonomicon PDF
Rust Book PDF
Rust by Example PDF
Rust Edition Guide PDF
Embedded Rust Book PDF
Rust Reference PDF
Rust Compiler Development Guide PDF

渲染到PDF

  • mdbook-pandoc 最初编写时,现有的 mdbook LaTeX后端(mdbook-latexmdbook-tectonic)由于手动处理markdown->LaTeX转换步骤,因此尚未成熟,无法渲染除最简单的书籍之外的内容。mdbook-pandoc 则将这个困难步骤外包给了pandoc,继承了其成熟度和可配置性。
  • 基于“打印到PDF”的后端,如 mdbook-pdf,更为成熟,但生成的PDF美学上可能不那么令人满意。此外,mdbook-pdf 不支持文档内链接或使用 mdbook的分支版本 生成目录。

渲染到其他格式

  • 通过将大部分渲染过程外包给pandoc,mdbook-pandoc 理论上支持许多不同的输出格式。其中大部分尚未经过测试,所以非常欢迎反馈其在不PDF格式上的表现!

依赖关系

~15–28MB
~438K SLoC