生成 Django 中文文档 PDF 版

ops/2024/11/13 15:31:24/

文章目录

    • 背景
    • 克隆 Django 文档和翻译仓库
    • 配置 `conf.py`
    • 设置和同步翻译
      • 生成 `.pot` 文件
      • 运行 `sphinx-intl update`
      • 复制翻译文件
    • 构建 PDF
      • 生成 tex 文件
      • 安装 MikTeX
      • 生成 PDF
    • Sphinx 生成文档

背景

浏览看到一个帖子,有个评论说可以用 sphinx 构建一个 pdf,正好最近用到了 sphinx,于是试了下,最终构建了一个关于 Django 官方文档的中文版 PDF 文件。

在这里插入图片描述


克隆 Django 文档和翻译仓库

打开命令行,执行以下命令克隆仓库:

git clone https://github.com/django/django.git
git clone https://github.com/django/django-docs-translations.git

切换到需要的版本的分支

# django-docs-translations
git checkout stable/4.2.x
# django
git checkout stable/4.2.x

安装第三方库

pip install sphinx sphinx-rtd-theme sphinx-intl  # 用于安装 Sphinx 和多语言支持
pip install -U sphinx_rtd_theme recommonmark latexmk  # 用于生成 PDF 所需的依赖

配置 conf.py

django/docs/conf.py 中添加或修改以下配置来启用中文翻译:

# 设置语言
language = 'zh_CN'# 加入 PDF 输出格式
latex_engine = 'xelatex'
latex_elements = {"fontpkg": r"""\setmainfont{Symbola}""","preamble": r"""\usepackage{newunicodechar}\usepackage[UTF8]{ctex}\newunicodechar{π}{\ensuremath{\pi}}\newunicodechar{≤}{\ensuremath{\le}}\newunicodechar{≥}{\ensuremath{\ge}}\newunicodechar{♥}{\ensuremath{\heartsuit}}\newunicodechar{…}{\ensuremath{\ldots}}\usepackage{ctex}  % 中文支持\usepackage{fontspec}  % 字体支持\setmainfont{Times New Roman}  % 英文主字体\setsansfont{Arial}  % 英文无衬线字体\setmonofont{Courier New}  % 英文等宽字体\setCJKmainfont{SimSun}  % 中文字体""",
}# Sphinx theme,可以不改
html_theme = "sphinx_rtd_theme"

设置和同步翻译

进入 django/docs 目录,用 sphinx-intl 设置语言环境。在生成多语言支持的翻译文件时,Sphinx 首先需要生成 .pot 文件。

生成 .pot 文件

django/docs 目录中运行以下命令,会将所有可翻译的文本提取为 .pot 文件,并放在 _build/gettext 目录中。

sphinx-build -b gettext . _build/gettext

sphinxintl_update_84">运行 sphinx-intl update

在生成 .pot 文件后,接着运行 sphinx-intl update 命令,这一步将根据 .pot 文件创建或更新 zh_CN 语言的 .po 文件,这里是在 doc 目录下创建了 locale/zh_CN\LC_MESSAGES,并生成了一些后缀是po的文件。

sphinx-intl update -p _build/gettext -l zh_CN

复制翻译文件

django-docs-translations/zh_Hans/LC_MESSAGES 下的 .po 文件复制到 django/docs/locale/zh_CN/LC_MESSAGES,替换掉相应的 .po 文件。


构建 PDF

生成 tex 文件

django/docs 目录中运行以下命令生成 tex 文件(这里是在windows命令行):

sphinx-intl build
make.bat latex

成功后,这会在 _build/latex 文件夹中生成一个 django.tex 文件。

安装 MikTeX

安装 MikTeX 或 TeX Live 作为 LaTeX 引擎,用于生成 PDF。

我尝试下载 MikTeX下载_latex文本编辑器最新64位版v21.8_3DM软件 (3dmgame.com),安装目录是 D:\Program Files\MiKTeX

生成 PDF

django\docs\_build\latex 目录下,执行生成 pdf

cd _build/latex
"D:\Program Files\MiKTeX\miktex\bin\x64\lualatex" -interaction=nonstopmode django.tex# "D:\Program Files\MiKTeX\miktex\bin\x64\pdflatex" django.tex  # 有报错,没搞成
# "D:\Program Files\MiKTeX\miktex\bin\x64\xelatex" -interaction=nonstopmode django.tex  # 书签没有标题

最后生成了如下 pdf。期间试了好几个方法,不是编译报错,就是生成了空白的 pdf,或者生成的 pdf 没有书签。

在这里插入图片描述


Sphinx 生成文档

也能在本地生成文档。

sphinx-build -b html . _build/html -D html_theme=sphinx_rtd_theme

进入 docs/_build/html,通过浏览器打开 index.html,看到文档。

在这里插入图片描述


http://www.ppmy.cn/ops/133342.html

相关文章

C++初阶——list

一、什么是list list是一个可以在序列的任意位置进行插入和删除的容器,并且可以进行双向迭代。list的底层是一个双向链表,双向链表可以将它们包含的每个元素存储在不同且不相关的存储位置。通过将每个元素与前一个元素的链接和后一个元素的链接关联起来&…

【免越狱】iOS砸壳 可下载AppStore任意版本 旧版本IPA下载

软件介绍 下载iOS旧版应用,简化繁琐的抓包流程。 一键生成去更新IPA(手机安装后,去除App Store的更新检测)。 软件界面 支持系统 Windows 10/Windows 8/Windows 7(由于使用了Fiddler库,因此需要.Net环境…

ssm088基于JAVA的汽车售票网站abo+vue(论文+源码)_kaic

毕 业 设 计(论 文) 题目:汽车售票网站的设计与实现 摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为…

【SQL实验】更新操作

完整代码在文章末尾【代码是自己的解答,并非标准答案,也有可能写错,文中可能会有不准确或待完善之处,恳请各位读者不吝批评指正,共同促进学习交流】 将素材“图书管理”文件下载到本地,并将其还原到SQL SER…

鸿蒙系统(HarmonyOS)与OpenHarmony

一、概述 华为推出的鸿蒙系统(HarmonyOS)凭借其分布式架构及多设备协同能力在业界引起了广泛关注。与此同时,还有一个名为OpenHarmony的开源项目,它在推动物联网设备之间的互联互通。尽管两者同源,但它们的应用场景、…

力扣 LeetCode 142. 环形链表II(Day2:链表)

解题思路&#xff1a; 使用set判断是否重复添加&#xff0c;如果set加入不进去证明之前到达过该节点&#xff0c;有环 public class Solution {public ListNode detectCycle(ListNode head) {Set<ListNode> set new HashSet<>();ListNode cur head;while (cur …

2024-11-10-leetcode每日一题-540. 有序数组中的单一元素

题目描述 给你一个仅由整数组成的有序数组&#xff0c;其中每个元素都会出现两次&#xff0c;唯有一个数只会出现一次。 请你找出并返回只出现一次的那个数。 你设计的解决方案必须满足 O(log n) 时间复杂度和 O(1) 空间复杂度。 示例 1: 输入: nums [1,1,2,3,3,4,4,8,8] …

Spring Boot 的生命周期

Spring Boot的生命周期非常丰富&#xff0c;包含了从初始化到运行再到关闭的各个阶段。每个阶段都有其特定的任务和事件&#xff0c;开发者可以利用这些生命周期的特性来更好地控制应用的行为。 初始化阶段 (Initialization Phase) 1. 构造 SpringApplication 对象 当调用 Spr…