From 9e6d3d2d1fd8abe904589a355e4e89b62eaccf20 Mon Sep 17 00:00:00 2001
From: Jiankian <luozhengan@vip.qq.com>
Date: Tue, 20 May 2025 16:09:25 +0800
Subject: [PATCH 1/5] =?UTF-8?q?=E6=B7=BB=E5=8A=A0docfx=E6=94=AF=E6=8C=81?=
 =?UTF-8?q?=EF=BC=8C=E4=BB=A5=E4=BE=BF=E4=BA=8E=E5=B0=86=E6=96=87=E6=A1=A3?=
 =?UTF-8?q?=E7=94=9F=E6=88=90=E4=B8=BA=E5=B8=A6=E7=9B=AE=E5=BD=95=E7=9A=84?=
 =?UTF-8?q?PDF=E6=96=87=E6=A1=A3=20add=20docfx=20support,=20make=20PDF=20g?=
 =?UTF-8?q?enerate=20with=20Table=20of=20Content?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .gitignore  |   1 +
 docfx.json  |  33 ++++
 index.md    |  11 ++
 src/toc.yml | 432 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 toc.yml     |   2 +
 5 files changed, 479 insertions(+)
 create mode 100644 docfx.json
 create mode 100644 index.md
 create mode 100644 src/toc.yml
 create mode 100644 toc.yml

diff --git a/.gitignore b/.gitignore
index bb354950..226138bc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
 book
 .idea
+_site
\ No newline at end of file
diff --git a/docfx.json b/docfx.json
new file mode 100644
index 00000000..b1aa4c15
--- /dev/null
+++ b/docfx.json
@@ -0,0 +1,33 @@
+{
+  "$schema": "https://raw.githubusercontent.com/dotnet/docfx/main/schemas/docfx.schema.json",
+  "build": {
+    "content": [
+      {
+        "files": [
+          "**/*.{md,yml}"
+        ],
+        "exclude": [
+          "_site/**"
+        ]
+      }
+    ],
+    "resource": [
+      {
+        "files": [
+          "images/**"
+        ]
+      }
+    ],
+    "output": "_site",
+    "template": [
+      "default",
+      "modern"
+    ],
+    "globalMetadata": {
+      "_appName": "\u901A\u8FC7\u4F8B\u5B50\u5B66\u4E60Rust - by docfx",
+      "_appTitle": "\u901A\u8FC7\u4F8B\u5B50\u5B66\u4E60Rust - by docfx",
+      "_enableSearch": true,
+      "pdf": true
+    }
+  }
+}
\ No newline at end of file
diff --git a/index.md b/index.md
new file mode 100644
index 00000000..f9859f84
--- /dev/null
+++ b/index.md
@@ -0,0 +1,11 @@
+---
+_layout: landing
+---
+
+# This is the **HOMEPAGE**.
+
+Refer to [Markdown](http://daringfireball.net/projects/markdown/) for how to write markdown files.
+
+## Quick Start Notes:
+
+1. Add images to the *images* folder if the file is referencing an image.
\ No newline at end of file
diff --git a/src/toc.yml b/src/toc.yml
new file mode 100644
index 00000000..d01e1117
--- /dev/null
+++ b/src/toc.yml
@@ -0,0 +1,432 @@
+- name: 简介
+  href: index.md
+- name: Hello World
+  href: hello.md
+  items:
+    - name: 注释
+      href: hello/comment.md
+    - name: 格式化输出
+      href: hello/print.md
+      items:
+        - name: 调试(debug)
+          href: hello/print/print_debug.md
+        - name: 显示(display)
+          href: hello/print/print_display.md
+        - name: 测试实例:List
+          href: hello/print/print_display/testcase_list.md
+        - name: 格式化
+          href: hello/print/fmt.md
+- name: 原生类型
+  href: primitives.md
+  items:
+    - name: 字面量和运算符
+      href: primitives/literals.md
+    - name: 元组
+      href: primitives/tuples.md
+    - name: 数组和切片
+      href: primitives/array.md
+- name: 自定义类型
+  href: custom_types.md
+  items:
+    - name: 结构体
+      href: custom_types/structs.md
+    - name: 枚举
+      href: custom_types/enum.md
+      items:
+        - name: 使用 use
+          href: custom_types/enum/enum_use.md
+        - name: C 风格用法
+          href: custom_types/enum/c_like.md
+        - name: 测试实例:链表
+          href: custom_types/enum/testcase_linked_list.md
+    - name: 常量
+      href: custom_types/constants.md
+- name: 变量绑定
+  href: variable_bindings.md
+  items:
+    - name: 可变变量
+      href: variable_bindings/mut.md
+    - name: 作用域和遮蔽
+      href: variable_bindings/scope.md
+    - name: 变量先声明
+      href: variable_bindings/declare.md
+    - name: 冻结
+      href: variable_bindings/freeze.md
+- name: 类型系统
+  href: types.md
+  items:
+    - name: 类型转换
+      href: types/cast.md
+    - name: 字面量
+      href: types/literals.md
+    - name: 类型推断
+      href: types/inference.md
+    - name: 别名
+      href: types/alias.md
+- name: 类型转换
+  href: conversion.md
+  items:
+    - name: From 和 Into
+      href: conversion/from_into.md
+    - name: TryFrom 和 TryInto
+      href: conversion/try_from_try_into.md
+    - name: ToString 和 FromStr
+      href: conversion/string.md
+- name: 表达式
+  href: expression.md
+- name: 流程控制
+  href: flow_control.md
+  items:
+    - name: if/else
+      href: flow_control/if_else.md
+    - name: loop 循环
+      href: flow_control/loop.md
+      items:
+        - name: 嵌套循环和标签
+          href: flow_control/loop/nested.md
+        - name: 从 loop 循环返回
+          href: flow_control/loop/return.md
+    - name: while 循环
+      href: flow_control/while.md
+    - name: for 循环和区间
+      href: flow_control/for.md
+    - name: match 匹配
+      href: flow_control/match.md
+      items:
+        - name: 解构
+          href: flow_control/match/destructuring.md
+          items:
+            - name: 元组
+              href: flow_control/match/destructuring/destructure_tuple.md
+            - name: 数组/切片
+              href: flow_control/match/destructuring/destructure_slice.md
+            - name: 枚举
+              href: flow_control/match/destructuring/destructure_enum.md
+            - name: 指针和引用
+              href: flow_control/match/destructuring/destructure_pointers.md
+            - name: 结构体
+              href: flow_control/match/destructuring/destructure_structures.md
+        - name: 卫语句
+          href: flow_control/match/guard.md
+        - name: 绑定
+          href: flow_control/match/binding.md
+    - name: if let
+      href: flow_control/if_let.md
+    - name: while let
+      href: flow_control/while_let.md
+- name: 函数
+  href: fn.md
+  items:
+    - name: 方法
+      href: fn/methods.md
+    - name: 闭包
+      href: fn/closures.md
+      items:
+        - name: 捕获
+          href: fn/closures/capture.md
+        - name: 作为输入参数
+          href: fn/closures/input_parameters.md
+        - name: 类型匿名
+          href: fn/closures/anonymity.md
+        - name: 输入函数
+          href: fn/closures/input_functions.md
+        - name: 作为输出参数
+          href: fn/closures/output_parameters.md
+        - name: std 中的例子
+          href: fn/closures/closure_examples.md
+          items:
+            - name: Iterator::any
+              href: fn/closures/closure_examples/iter_any.md
+            - name: Iterator::find
+              href: fn/closures/closure_examples/iter_find.md
+    - name: 高阶函数
+      href: fn/hof.md
+    - name: 发散函数
+      href: fn/diverging.md
+- name: 模块
+  href: mod.md
+  items:
+    - name: 可见性
+      href: mod/visibility.md
+    - name: 结构体的可见性
+      href: mod/struct_visibility.md
+    - name: use 声明
+      href: mod/use.md
+    - name: super 和 self
+      href: mod/super.md
+    - name: 文件分层
+      href: mod/split.md
+- name: crate
+  href: crates.md
+  items:
+    - name: 库
+      href: crates/lib.md
+    - name: 使用库
+      href: crates/using_lib.md
+- name: cargo
+  href: cargo.md
+  items:
+    - name: 依赖
+      href: cargo/deps.md
+    - name: 约定规范
+      href: cargo/conventions.md
+    - name: 测试
+      href: cargo/test.md
+    - name: 构建脚本
+      href: cargo/build_scripts.md
+- name: 属性
+  href: attribute.md
+  items:
+    - name: 死代码 dead_code
+      href: attribute/unused.md
+    - name: crate
+      href: attribute/crate.md
+    - name: cfg
+      href: attribute/cfg.md
+      items:
+        - name: 自定义条件
+          href: attribute/cfg/custom.md
+- name: 泛型
+  href: generics.md
+  items:
+    - name: 函数
+      href: generics/gen_fn.md
+    - name: 实现
+      href: generics/impl.md
+    - name: trait
+      href: generics/gen_trait.md
+    - name: 约束
+      href: generics/bounds.md
+      items:
+        - name: 测试实例:空约束
+          href: generics/bounds/testcase_empty.md
+    - name: 多重约束
+      href: generics/multi_bounds.md
+    - name: where 子句
+      href: generics/where.md
+    - name: newtype 惯用法
+      href: generics/new_types.md
+    - name: 关联项
+      href: generics/assoc_items.md
+      items:
+        - name: 存在问题
+          href: generics/assoc_items/the_problem.md
+        - name: 关联类型
+          href: generics/assoc_items/types.md
+    - name: 虚类型参数
+      href: generics/phantom.md
+      items:
+        - name: 测试实例:单位检查
+          href: generics/phantom/testcase_units.md
+- name: 作用域规则
+  href: scope.md
+  items:
+    - name: RAII
+      href: scope/raii.md
+    - name: 所有权和移动
+      href: scope/move.md
+      items:
+        - name: 可变性
+          href: scope/move/mut.md
+        - name: 部分移动
+          href: scope/move/partial_move.md
+    - name: 借用
+      href: scope/borrow.md
+      items:
+        - name: 可变性
+          href: scope/borrow/mut.md
+        - name: 别名使用
+          href: scope/borrow/alias.md
+        - name: ref 模式
+          href: scope/borrow/ref.md
+    - name: 生命周期
+      href: scope/lifetime.md
+      items:
+        - name: 显式标注
+          href: scope/lifetime/explicit.md
+        - name: 函数
+          href: scope/lifetime/fn.md
+        - name: 方法
+          href: scope/lifetime/methods.md
+        - name: 结构体
+          href: scope/lifetime/struct.md
+        - name: trait
+          href: scope/lifetime/trait.md
+        - name: 约束
+          href: scope/lifetime/lifetime_bounds.md
+        - name: 强制转换
+          href: scope/lifetime/lifetime_coercion.md
+        - name: static
+          href: scope/lifetime/static_lifetime.md
+        - name: 省略
+          href: scope/lifetime/elision.md
+- name: 特质 trait
+  href: trait.md
+  items:
+    - name: 派生
+      href: trait/derive.md
+    - name: 使用 dyn 返回 trait
+      href: trait/dyn.md
+    - name: 运算符重载
+      href: trait/ops.md
+    - name: Drop
+      href: trait/drop.md
+    - name: Iterator
+      href: trait/iter.md
+    - name: impl Trait
+      href: trait/impl_trait.md
+    - name: Clone
+      href: trait/clone.md
+    - name: 父 trait
+      href: trait/supertraits.md
+    - name: 消除重叠 trait
+      href: trait/disambiguating.md
+- name: 使用 macro_rules! 来创建宏
+  href: macros.md
+  items:
+    - name: 语法
+      href: macros/syntax.md
+      items:
+        - name: 指示符
+          href: macros/designators.md
+        - name: 重载
+          href: macros/overload.md
+        - name: 重复
+          href: macros/repeat.md
+    - name: DRY (不写重复代码)
+      href: macros/dry.md
+    - name: DSL (领域专用语言)
+      href: macros/dsl.md
+    - name: 可变参数接口
+      href: macros/variadics.md
+- name: 错误处理
+  href: error.md
+  items:
+    - name: panic
+      href: error/panic.md
+    - name: Option 和 unwrap
+      href: error/option_unwrap.md
+      items:
+        - name: 使用 ? 解开 Option
+          href: error/option_unwrap/question_mark.md
+        - name: 组合算子:map
+          href: error/option_unwrap/map.md
+        - name: 组合算子:and_then
+          href: error/option_unwrap/and_then.md
+    - name: 结果 Result
+      href: error/result.md
+      items:
+        - name: Result 的 map
+          href: error/result/result_map.md
+        - name: 给 Result 取别名
+          href: error/result/result_alias.md
+        - name: 提前返回
+          href: error/result/early_returns.md
+        - name: 引入 ?
+          href: error/result/enter_question_mark.md
+    - name: 处理多种错误类型
+      href: error/multiple_error_types.md
+      items:
+        - name: 从 Option 中取出 Result
+          href: error/multiple_error_types/option_result.md
+        - name: 定义一种错误类型
+          href: error/multiple_error_types/define_error_type.md
+        - name: 把错误 “装箱”
+          href: error/multiple_error_types/boxing_errors.md
+        - name: “?” 的其他用法
+          href: error/multiple_error_types/reenter_question_mark.md
+        - name: 包裹错误
+          href: error/multiple_error_types/wrap_error.md
+    - name: 遍历 Result
+      href: error/iter_result.md
+- name: 标准库类型
+  href: std.md
+  items:
+    - name: 箱子、栈和堆
+      href: std/box.md
+    - name: 动态数组 vector
+      href: std/vec.md
+    - name: 字符串 String
+      href: std/str.md
+    - name: 选项 Option
+      href: std/option.md
+    - name: 结果 Result
+      href: std/result.md
+      items:
+        - name: “?” 用法
+          href: std/result/question_mark.md
+    - name: panic!
+      href: std/panic.md
+    - name: 散列表 HashMap
+      href: std/hash.md
+      items:
+        - name: 更改或自定义关键字类型
+          href: std/hash/alt_key_types.md
+        - name: 散列集 HashSet
+          href: std/hash/hashset.md
+    - name: 引用计数 Rc
+      href: std/rc.md
+    - name: 共享引用计数 Arc
+      href: std/arc.md
+- name: 标准库更多介绍
+  href: std_misc.md
+  items:
+    - name: 线程
+      href: std_misc/threads.md
+      items:
+        - name: 测试实例:map-reduce
+          href: std_misc/threads/testcase_mapreduce.md
+    - name: 通道
+      href: std_misc/channels.md
+    - name: 路径
+      href: std_misc/path.md
+    - name: 文件输入输出(I/O)
+      href: std_misc/file.md
+      items:
+        - name: 打开文件 open
+          href: std_misc/file/open.md
+        - name: 创建文件 create
+          href: std_misc/file/create.md
+        - name: 读取行 read lines
+          href: std_misc/file/read_lines.md
+    - name: 子进程
+      href: std_misc/process.md
+      items:
+        - name: 管道
+          href: std_misc/process/pipe.md
+        - name: 等待
+          href: std_misc/process/wait.md
+    - name: 文件系统操作
+      href: std_misc/fs.md
+    - name: 程序参数
+      href: std_misc/arg.md
+      items:
+        - name: 参数解析
+          href: std_misc/arg/matching.md
+    - name: 外部语言函数接口
+      href: std_misc/ffi.md
+- name: 测试
+  href: testing.md
+  items:
+    - name: 单元测试
+      href: testing/unit_testing.md
+    - name: 文档测试
+      href: testing/doc_testing.md
+    - name: 集成测试
+      href: testing/integration_testing.md
+    - name: 开发依赖
+      href: testing/dev_dependencies.md
+- name: 不安全操作
+  href: unsafe.md
+- name: 兼容性
+  href: compatibility.md
+  items:
+    - name: 原始标志符
+      href: compatibility/raw_identifiers.md
+- name: 补充
+  href: meta.md
+  items:
+    - name: 文档
+      href: meta/doc.md
+    - name: Playpen
+      href: meta/playpen.md
diff --git a/toc.yml b/toc.yml
new file mode 100644
index 00000000..d6c6c3aa
--- /dev/null
+++ b/toc.yml
@@ -0,0 +1,2 @@
+- name: Docs
+  href: src/
\ No newline at end of file

From 5e9d4ee19180493b4367533f1dfd0249266a3c5c Mon Sep 17 00:00:00 2001
From: Jiankian <luozhengan@vip.qq.com>
Date: Tue, 20 May 2025 16:21:56 +0800
Subject: [PATCH 2/5] =?UTF-8?q?docs:=20=E6=B7=BB=E5=8A=A0=E7=94=9F?=
 =?UTF-8?q?=E6=88=90=20PDF=20=E6=A0=BC=E5=BC=8F=E7=A6=BB=E7=BA=BF=E6=96=87?=
 =?UTF-8?q?=E6=A1=A3=E8=AF=B4=E6=98=8E?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

- 在 README.md 中添加了使用 Docfx生成本地离线文档和 PDF格式离线文档的说明
- 提供了具体的命令示例,方便用户操作
---
 README.md | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/README.md b/README.md
index b5b17912..c5339e0e 100644
--- a/README.md
+++ b/README.md
@@ -31,6 +31,13 @@ $ mdbook serve
 
 为了能够运行这些示例,你必须要连接到网络;当然你可以离线阅读所有这些内容。
 
+## 生成PDF格式的离线文档
+
+兼容Docfx文档工具,可以使用 [Docfx](https://dotnet.github.io/docfx/index.html) 来生成本地离线文档,本项目已经添加docfx配置,不影响mdbook工具,可以直接使用下面的命令打开docfx生成的文档页面以及生成PDF格式离线文档(带目录的PDF文件)。
+```bash
+docfx docfx.json --serve -p 8900
+```
+
 ## 如何贡献
 
 请查看 [CONTRIBUTING.md][how-to-contribute] 文件了解详细内容。

From 9649287ca8d36aa564d549cc9a4c86d12d2bd9b8 Mon Sep 17 00:00:00 2001
From: Jiankian <luozhengan@vip.qq.com>
Date: Tue, 20 May 2025 16:35:12 +0800
Subject: [PATCH 3/5] =?UTF-8?q?docs:=E4=BF=AE=E6=AD=A3=E9=94=99=E8=AF=AF?=
 =?UTF-8?q?=E5=A4=84=E7=90=86=E6=96=87=E6=A1=A3=E4=B8=AD=E7=9A=84=E7=AB=A0?=
 =?UTF-8?q?=E8=8A=82=E6=A0=87=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

- 将 “?” 的其他用法 修改为 "? 的其他用法"
- 将 “?” 用法 修改为 "?用法"
- 删除了多余的空格和引号,统一了章节标题的格式
---
 src/toc.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/toc.yml b/src/toc.yml
index d01e1117..d4f35e69 100644
--- a/src/toc.yml
+++ b/src/toc.yml
@@ -333,7 +333,7 @@
           href: error/multiple_error_types/define_error_type.md
         - name: 把错误 “装箱”
           href: error/multiple_error_types/boxing_errors.md
-        - name: “?” 的其他用法
+        - name: "? 的其他用法"
           href: error/multiple_error_types/reenter_question_mark.md
         - name: 包裹错误
           href: error/multiple_error_types/wrap_error.md
@@ -353,7 +353,7 @@
     - name: 结果 Result
       href: std/result.md
       items:
-        - name: “?” 用法
+        - name: "? 用法"
           href: std/result/question_mark.md
     - name: panic!
       href: std/panic.md

From ed1c0c2df17e03ea694a234f4431a1277e5e65b3 Mon Sep 17 00:00:00 2001
From: Jiankian <luozhengan@vip.qq.com>
Date: Sat, 21 Jun 2025 20:49:11 +0800
Subject: [PATCH 4/5] add mdbook pdf support

---
 book.toml | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/book.toml b/book.toml
index e3e814df..2e0d71b2 100644
--- a/book.toml
+++ b/book.toml
@@ -18,5 +18,8 @@ editor = "ace"
 # 将书籍导航展开,作为书籍目录,收缩起来不便于章节快速查找 —— 2022-01-26
 enable = false
 
+[output.pdf]
+# mdbook-pdf 插件 生成pdf
+
 [rust]
 edition = "2021"
\ No newline at end of file

From 25f1014a74139ace02b42bfa0688f538a2bab332 Mon Sep 17 00:00:00 2001
From: Jiankian <luozhengan@vip.qq.com>
Date: Sat, 21 Jun 2025 21:21:08 +0800
Subject: [PATCH 5/5] =?UTF-8?q?build(book):=20=E6=9B=B4=E6=96=B0=E5=9B=BE?=
 =?UTF-8?q?=E4=B9=A6=E8=BE=93=E5=87=BA=E6=A0=BC=E5=BC=8F=E9=85=8D=E7=BD=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

- 在 book.toml 中添加了 PDF 目录生成配置
- 新增了 EPUB 输出格式配置
- 这些更改将提高图书的可读性和多样性
---
 book.toml | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/book.toml b/book.toml
index 2e0d71b2..2ae4da6e 100644
--- a/book.toml
+++ b/book.toml
@@ -19,7 +19,10 @@ editor = "ace"
 enable = false
 
 [output.pdf]
-# mdbook-pdf 插件 生成pdf
+# mdbook-pdf 插件 生成pdf 带目录
+
+[output.epub]
+# mdbook-epub 插件 生成epub
 
 [rust]
 edition = "2021"
\ No newline at end of file