我们可以转身,但是不必回头,即使有一天,发现自己错了,也应该转身,大步朝着对的方向去,而不是一直回头怨自己错了。——刘墉《人生路,不回头》

ChinaTextbook:一个把中国教材“装进 GitHub”的公共资源库

如果你在寻找覆盖小学、初中、高中,乃至大学阶段的 PDF 教材资源,且希望这些资料能长期稳定地被访问、被引用,那么 TapXWorld 发起的 ChinaTextbook 项目会是你绕不开的宝藏仓库。它把海量教材体系化地归档在 GitHub 上,帮助更多人跨越“获取路径”的壁垒,尤其也方便海外华人家庭为孩子提供与国内一致的学习内容。

温馨提示:仓库体量非常庞大,不建议直接完整 clone;请按需获取单个文件或使用“只下载所需目录”的技巧(文内有示例)。


初衷与愿景:让访问教材不再困难

README 开宗明义说明了项目缘起:虽然国内已提供了免费教育资源,但“普通人获取信息的路径依然受限”。更糟糕的是,一些人利用信息不对称对这些资源进行二次售卖,还叠加了“私人水印”。因此,这个仓库希望通过公开、稳定的方式聚合教材,并且“也希望海外华人能够让自己的孩子继续了解国内教育”。

这不是一个“散文件仓库”,而是带着公共性与可持续性的资料库。


资源结构(以数学为例)

README 展示了较为详细的数学教材目录(小学/初中/高中/大学),例如:

  • 小学数学:人教版按年级上/下册条目化链接
  • 初中数学:初一至初三上下册的人教版教材
  • 高中数学:人教版(A 版)目录聚合
  • 大学数学:高等数学、线性代数、离散数学、概率论等子目录

结合仓库简介“所有小学初高、大学 PDF 教材”,可以理解为本仓库的覆盖范围跨越 K-12 到大学阶段。你可以直接在仓库的目录树中导航到对应年级/版本进行下载与学习。

提示:README 给出的具体链接较多,这里不一一展开。建议直接进入仓库,通过左侧目录树逐层定位到目标教材。


GitHub 文件大小限制与“拆分文件”合并

由于 GitHub 对文件大小有严格限制:

  • 超过 100MB 的文件无法上传;
  • 超过 50MB 的文件会收到警告。

因此,仓库中部分 PDF 会被拆分成多段(例如:xxx.pdf.1、xxx.pdf.2)。README 提供了合并方案:

  1. 使用官方合并程序(Windows)
  • ChinaTextbook-tools Releases 下载 mergePDFs-windows-amd64.exe
  • 将它放在包含被拆分 PDF 的同一文件夹。
  • 双击运行,自动完成合并。
  1. 通用方法(适合熟悉命令行的用户)
  • Windows(CMD):

    1
    copy /b "义务教育教科书·数学一年级上册.pdf.1"+"义务教育教科书·数学一年级上册.pdf.2" "义务教育教科书·数学一年级上册.pdf"
  • macOS / Linux(Shell):

    1
    cat "义务教育教科书·数学一年级上册.pdf."* > "义务教育教科书·数学一年级上册.pdf"

    注意:

  • 请确保各分段按正确顺序命名(.1、.2、.3 …)。

  • 如果系统对中文路径支持不友好,建议先将文件名临时重命名为英文,合并后再改回。


获取教材的三种实用姿势

从 README 可知,官方也给出了“重新下载”的建议:若你在内地网络环境良好、追求最新版本,可以借助原站点的解析工具 tchMaterial-parser 重下;若海外网络与内地连接较慢,可直接使用本仓库的归档版本。以下给出常见获取方式与小技巧:

方式一:网页端直达(适合大多数用户)

  • 打开 仓库主页,通过目录树点击进入目标年级/版本。
  • 对于未拆分的单个 PDF,点击后在文件页面使用 “Download raw”(或右键复制原始地址,用下载器提速)。
  • 对于被拆分的 PDF,下载所有分段到同一目录后,按“拆分合并”章节合成。

优点:操作简单;不需要命令行。
注意:GitHub 网页直连速度受区域与时段影响。

方式二:仅下载某个目录(进阶:Git Sparse-Checkout)

当你只需要某个学段/版本的若干文件,不想拉取整个超大仓库时,可以用 Git 的稀疏检出特性:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 1) 仅获取历史元数据,不拉取所有文件内容
git clone --filter=blob:none --no-checkout https://github.com/TapXWorld/ChinaTextbook.git
cd ChinaTextbook

# 2) 启用稀疏检出(cone 模式)
git sparse-checkout init --cone

# 3) 仅选择需要的目录(示例:小学/数学/人教版)
# 注意:实际路径以仓库目录为准,包含中文路径时可在 shell 中加引号
git sparse-checkout set "小学/数学/人教版"

# 4) 检出 master 分支
git checkout master

优点:只拉你要的那一小部分;节省时间与带宽。
注意:路径需与仓库实际目录一致;含空格或中文请用引号包裹。

方式三:命令行抓取单文件(原始地址直下)

若你已打开某个 PDF 的文件页面,可点击 “Raw” 获取原始地址,然后用常见工具下载:

1
2
3
4
5
# 使用 curl
curl -L -o textbook.pdf "https://raw.githubusercontent.com/TapXWorld/ChinaTextbook/{branch_or_commit}/{path/to/file}.pdf"

# 或使用 aria2c(多线程)
aria2c -x 16 -s 16 -o textbook.pdf "https://raw.githubusercontent.com/TapXWorld/ChinaTextbook/{branch_or_commit}/{path/to/file}.pdf"

注意:

  • 把 {branch_or_commit} 和 {path/to/file} 替换成真实的分支名/commit 与文件路径。
  • 中文路径建议在命令行中用引号包裹,或改用 URL 编码。

常见问答(根据 README 要点整理)

  • 问:为啥有些 PDF 被拆成 .1、.2、.3?
    答:因为 GitHub 对单文件大小有限制(>100MB 禁止;>50MB 警告),所以大文件会被拆分。按本文合并方法可以还原。

  • 问:我在国内,能不能直接用工具从原站点重下最新?
    答:可以,README 推荐 tchMaterial-parser(鼓励开源)。若你在海外且与内地网络较慢,可优先用本仓库存档。

  • 问:我能贡献或反馈吗?
    答:仓库开放 Issues/Discussions;你也可以加入 Telegram 社区获取最新动态并交流:加入 Telegram


代码案例:从“获取”到“合并”的一条龙示例

下面给出一个“只拉取某个目录 + 批量合并拆分 PDF”的范例流程,便于在 Windows 和 macOS/Linux 上快速复用。

1) 稀疏检出某一目录(示例:小学/数学/人教版)

1
2
3
4
5
git clone --filter=blob:none --no-checkout https://github.com/TapXWorld/ChinaTextbook.git
cd ChinaTextbook
git sparse-checkout init --cone
git sparse-checkout set "小学/数学/人教版"
git checkout master

2) Windows 批量合并同目录下的拆分 PDF

将如下内容保存为 merge_parts.bat 并放到含拆分文件的目录,双击运行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
setlocal EnableDelayedExpansion

for %%F in (*.pdf.1) do (
set "base=%%~nF"
set "out=!base!"
rem 去掉最后的 .1,还原为完整文件名
set "out=!out:.1=!"
echo Merging parts for "!out!.pdf" ...
rem 你可以按需调整最大分段数
copy /b "%%F"+"!base!.pdf.2"+"!base!.pdf.3" "!out!.pdf" >nul
)
echo Done.
pause

说明:

  • 该脚本假设每本书最多拆成 3 段(.1、.2、.3),如果更多,请继续在 copy /b 后面追加。
  • 中文文件名在 CMD 下通常可用,若遇编码问题可先把文件临时改名为英文。

3) macOS / Linux 批量合并

保存为 merge_parts.sh 并在目标目录执行 bash merge_parts.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/env bash
set -euo pipefail

shopt -s nullglob

for p1 in *.pdf.1; do
base="${p1%.pdf.1}"
out="${base}.pdf"
echo "Merging parts for: ${out}"
cat "${base}.pdf."* > "${out}"
done

echo "Done."

说明:

  • 假设拆分文件遵循统一命名:xxx.pdf.1、xxx.pdf.2、…。
  • 如果目录中混有其他无关 .pdf.* 文件,请先清理或改写匹配条件。

倡议与合规

  • 教材资源的收集与传播,初衷是降低获取门槛,服务学习与研究。请遵守所在地区法律法规与版权政策,合理合规使用。
  • 若本仓库帮助到你,欢迎 Star 支持与传播,以促进资源的长久维护与更新。
  • 支持与社区:
    • Telegram 社区:https://t.me/+1V6WjEq8WEM4MDM1
    • 支持作者(README 提供了捐赠二维码)
    • Star 趋势可参考 README 中嵌入的 Star History

结语

ChinaTextbook 把“教育资源的可达性”作为第一要务:把分散的、容易“绕弯”的获取途径,变成一个任何人都能找到与下载的公共仓库。无论你是想系统复习 K-12 课程,还是查阅大学基础数学,或是希望让海外的孩子延续中文教材学习,这里都能给到直接而可靠的入口。

再次附上关键链接:

愿每个人都能以更少的阻力,抵达知识。