Markdown+Sphinx+Read_the_Docs的一些技巧

news2024/9/22 19:36:11

Markdown+Sphinx+Read_the_Docs可以用来构建个人主页或知识教程,搭建方法网上很多,可以参考这个大佬的文章。本文主要讲述一些技巧,可以让项目更加完美。

本人运行环境是WSL2 Ubuntu 22.04,Sphinx版本是7.3.7

文章目录

  • 一 工程搭建
  • 二 安装插件
    • 1. Markdown支持插件 --- MyST-Parser
    • 2. 其它插件
    • 3. 初步配置
    • 4. 简单测试
  • 三 隐藏指定项
  • 四 显示文章目录
  • 五 使用Sphinx的事件函数
  • 六 总结


一 工程搭建

Sphinx安装好之后,在终端下运行sphinx-quickstart,接着会出现一个选项:是否需要把source目录和build目录分离?
在这里插入图片描述
这里选择yes,输入y并回车。分离的好处是工程结构更加清晰。

后续随便填下就行了,最后一个是项目语言,这里选择简体中文zh_CN
在这里插入图片描述
至此,工程就搭建好了。


二 安装插件

1. Markdown支持插件 — MyST-Parser

Sphinx默认支持reStructuredText,但是大部分人都是用Markdown来写文章,所以这里就需要安装支持Markdown的插件MyST-Parser,其官网地址是https://myst-parser.readthedocs.io/en/latest/,安装命令如下,

pip install -U myst-parser

其介绍如下,
在这里插入图片描述
介绍里提到这个插件是CommonMark-plus,所以就不需要CommonMark了。

2. 其它插件

  • Read the Docs主题插件,

    pip install -U sphinx_rtd_theme
    
  • mermaid图表渲染插件

    pip install -U sphinxcontrib.mermaid
    
  • 代码块一键复制按钮插件

    pip install -U sphinx_copybutton
    

3. 初步配置

使用VSCode打开工程目录,然后在source目录下打开conf.py,改为如下,

# Configuration file for the Sphinx documentation builder.
#
# For the full list of built-in configuration values, see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html

# -- Project information -----------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information

project = 'demo'
copyright = '2024, WH'
author = 'WH'

# -- General configuration ---------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration

extensions = [ 
    'myst_parser',
    "sphinxcontrib.mermaid",
    "sphinx_copybutton",
]

source_suffix = {
    '.rst': 'restructuredtext',
    '.md': 'markdown',
}


myst_enable_extensions = [
    "tasklist",
    "deflist",
    "dollarmath",
]

templates_path = ['_templates']
exclude_patterns = []

language = 'zh_CN'

# -- Options for HTML output -------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output

html_theme = 'sphinx_rtd_theme'
html_static_path = ['_static']

4. 简单测试

在工程目录下执行make html,生成完毕后,cd进入build/html/目录下,执行下面命令开启服务器,

python -m http.server

显示如下,
在这里插入图片描述

此时在外部浏览器里输入http://127.0.0.1:8000/,就可以看到生成的网页内容了,

在这里插入图片描述
我们在source目录下添加一个目录md,然后在md目录下添加markdown文件,最后md目录里内容如下,
在这里插入图片描述
然后在index.rst里添加新建的md文件,特别要注意,md文件名所在行上面要空一行,不能紧邻toctree的配置,否则会解析错误,

.. demo documentation master file, created by
   sphinx-quickstart on Tue Jul  9 22:31:30 2024.
   You can adapt this file completely to your liking, but it should at least
   contain the root `toctree` directive.

Welcome to demo's documentation!
================================

.. toctree::
   :maxdepth: 2
   :caption: Contents:

   md/教程1.md
   md/教程2.md
   md/教程1_detail/aa.md
   md/教程1_detail/bb.md
   md/教程2_detail/cc.md
   md/教程2_detail/dd.md


Indices and tables
==================

* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`

此时先把服务器停止,然后重新执行make html,最后再开启服务器,浏览器刷新一下,显示如下,

在这里插入图片描述
注意:这里显示的目录是md文件中的heading,不是md文件的名字,sphinx是读取md文件内容然后再转成网页。


三 隐藏指定项

可以看出之前的目录会把所有的md文件内容都显示出来,有时我们希望只显示其中一部分,那么就需要使用Sphinx的hidden选项,如下,把目录里的md文件隐藏掉,
在这里插入图片描述
PS:这里还启用了通配符功能,使用的是glob选项

重新编译并启动服务器,浏览器显示如下,
在这里插入图片描述
可以看到右侧已经如期望那样隐藏了指定的,但是左侧还是跟之前一样,这个时候需要参考一下这个主题的html配置选项,地址是https://sphinx-rtd-theme.readthedocs.io/en/stable/configuring.html,里面有如下选项,
在这里插入图片描述
可以看到这个includehidden,其默认是true,这个是造成上面现象的原因,所以在conf.py里添加这个选项,然后设置为False就可以了,
在这里插入图片描述
然后重新编译和运行服务器,最后刷新浏览器,显示如下,
在这里插入图片描述
成功!

其它配置项可以根据需要进行添加。


四 显示文章目录

在Markdown里显示目录没有统一标准,不同的Markdown软件会有不同的语法,例如CSDN是@[TOC],而在Azure Devops里则是[[_TOC_]],那么在Sphinx里如何显示目录呢?

这个取决于myst_parser,因为它负责把md转成网页,其官网教程是在md文件里添加如下红框中语句,
在这里插入图片描述

我们在教程1.md里添加以上语句,然后重新编译并启动服务器,

在这里插入图片描述
最后显示如下,可以看到目录正确出现了,
在这里插入图片描述


五 使用Sphinx的事件函数

Sphinx的构建分为很多步,每一步都触发对应的事件,如下,图片来自这里,
在这里插入图片描述
PS:蓝色框是事件名

每个事件用户都可以添加自定义的函数。

假设现在有个这样的需求:因为md文件有些语法不被myst_parser支持,那么转成网页前就需要先修改md文件里的语句,例如上一节里的目录语法,但是有时不想修改原始md文件内容,那么可以读取完md文件内容时把里面的目录语法替换成myst_parser支持的语法,那么此时可以使用source-read函数,其定义如下,

在这里插入图片描述
那么我们在source/conf.py里添加如下2个函数,

def source_read_handler(app, docname, content):
    if '[[_TOC_]]' in content[0]:
        content[0] = content[0].replace('[[_TOC_]]', '```{contents} Table of Contents\n:depth: 3\n```\n')


def setup(app):
    app.connect('source-read', source_read_handler)

source_read_handler()对读取的md内容进行替换,这样就可以满足要求了。

此时在教程2.md里添加md的目录语法,
在这里插入图片描述
然后重新编译并运行,最后显示如下,可以看到目录正确显示了,
在这里插入图片描述


六 总结

本文讲述了Markdown+Sphinx+Read_the_Docs构建网页时的一些技巧,可以让生成的网页更加美观。另外,也可以看出这些细节都是来自于官方文档,所以遇到问题网上找不到答案就多看看文档,总能解决的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1915828.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

生物打印后的生物力学过程

生物打印后的生物力学过程 3D生物打印技术在组织工程领域展现出巨大的潜力,但打印后组织的生物力学特性对其最终成功至关重要。本文将详细介绍打印后组织的生物力学特性及其在组织工程中的应用。 1. 打印后水凝胶交联 原位交联可以在生物打印过程中提供足够的机械…

cdn中配置ssl证书

##red## 🔴 大家好,我是雄雄,欢迎关注微信公众号,雄雄的小课堂。 SSL KEY 这个里面放的是:private.pem文件中的内容 SSL PEM 这个里面放的是:fullchain.crt文件中的内容,注意,这个…

Python 100道基础入门练习题!附解析

看书,看视频都可以帮助你学习代码,但都只是辅助作用,学好 Python,最重要的还是 多敲代码,多刷题。 不知道怎么找题刷题的小伙伴,可以看看这里今天带来了100道练习题。覆盖了基本语法,数据结构&…

【JavaWeb程序设计】Servlet(一)

目录 一、客户端通过login.jsp发出登录请求,请求提交到loginServlet处理。 1. 运行截图 2. 登录页面(login.jsp) 3. loginServlet 4. 登录成功页面(loginSuccess.jsp) 5. 登录失败页面(loginFail.jsp…

探索一个精美的商品橱窗布局:HTML与CSS的魔法

在今天的文章中,我们将一起探索一个精心设计的商品橱窗布局,这个布局完全通过HTML和CSS来实现。这个布局不仅美观,而且功能强大,非常适合用于展示商品或任何需要网格化布局的内容。 效果图: 一、HTML结构 首先&#…

tableau标靶图,甘特图与瀑布图绘制 - 9

标靶图,甘特图与瀑布图 1. 标靶图绘制1.1 筛选器筛选日期1.2 条形图绘制1.3 编辑参考线1.4 设置参考线1.5 设置参考区间1.6 四分位设置1.7 其他标靶图结果显示 2.甘特图绘制2.1 选择列属性2.2 选择列属性2.3 创建新字段2.4 设置天数大小及颜色 3. 瀑布图绘制3.1 she…

【案例】python集成OCR识别工具调研

目录 一、前言二、Tesseract_OCR2.1、安装过程2.2、python代码使用三、PaddleOCR3.1、安装过程3.2、python代码使用四、EasyOCR五、ddddOCR六、CnOCR一、前言 因项目需要OCR识别能力,且要支持私有化部署。本文将对比市场一些开源的OCR识别工具,从中选择适合项目需要的OCR,且…

基于主成分分析PCA的一维时间序列信号降噪方法(Python)

主成分分析PCA是面向模式分类的特征提取最典型的工具,是满足上述映射准则的一种数据压缩的方法。作为经典的特征提取方法,是在不减少原始数据所包含的内在信息前提下,将原始数据集转化为由维数较少的“有效”特征成分来表示,使其在…

极狐Gitlab使用(1)

目录 续接上篇:极狐Gitlab安装部署-CSDN博客 1. 关闭注册功能 2. 创建群组 3. 创建用户 5. 邀请成员到群组 6. 设置导入导出项目源 7. 通过gitee导入库 8. 通过仓库URL导入 9. 自创建项目 10. 默认分支main的权限 11. 使用普通用户进入自建库 12. 创建用…

深入理解 go map

什么是 map 维基百科里这样定义 map: In computer science, an associative array, map, symbol table, or dictionary is an abstract data type composed of a collection of (key, value) pairs, such that each possible key appears at most once in the collection. 简单…

前端挑战:Tkinter布局与设计【三种布局】

前端挑战:Tkinter布局与设计【三种布局】 文章目录 前端挑战:Tkinter布局与设计【三种布局】前言Frame 窗口组件代码效果Tkinter的布局grid 网格布局效果展示:代码讲解pack 布局基本使用左右布局place 布局代码预览前言 作为一个前端开发,习惯性的用HTML去解决客户端的问题…

【Linux 线程】线程的基本概念、LWP的理解

文章目录 一、ps -L 指令🍎二、线程控制 一、ps -L 指令🍎 🐧 使用 ps -L 命令查看轻量级进程信息;🐧 pthread_self() 用于获取用户态线程的 tid,而并非轻量级进程ID;🐧 getpid() 用…

卡尔曼滤波中dx更新公式

卡尔曼滤波是一种有效的递归滤波器,用于估计线性动态系统的状态。在标准的卡尔曼滤波中,系统和观测模型都是线性的,而在扩展卡尔曼滤波(EKF)和迭代卡尔曼滤波(IKF)中,系统或观测模型…

最受老板欢迎的监控员工电脑软件推荐!(6款真实测评)

你有没有遇到以下这种情况: 早晨刚到公司打开电脑,老板对着旁边同事大发雷霆突然发问: 小丽,你昨天上班期间刷抖音了? 你吓得瑟瑟发抖,老板咋知道的呢? 跟其他同事讨论才晓得,原…

【人生苦短,我学 Python】(12)函数(下)

Python 所有文章传送门【Python】所有文章传送门 目录 简述 / 前言1. 函数的返回值2. 变量2.1 局部变量2.2. 全局变量2.3 局部与全局变量混合使用 4. 匿名函数(Lamda表达式)5. 函数装饰器6. 递归函数7. 函数注释(文档字符串)与注解…

Linux下的misc设备驱动

文章目录 前言一、misc是什么?二、调用API1.注册2.注销 三、驱动框架总结 前言 misc设备即杂项设备,Linux系统中类似按键、触摸屏都有专门框架处理,类似adc、蜂鸣器等设备无法明确其属于什么类型,一般就归属于杂项设备&#xff0…

Databend 开源周报第 152 期

Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend。 支持内置 UDFs …

WPF 制作一个文字漂浮提示框

WPF好像没有自带的文字提示漂浮&#xff0c;我们可以定制一个。 效果如下&#xff1a; xaml xaml如下&#xff1a; <Window x:Class"GroupServer.MsgTip"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://sc…

Spring源码二十一:Bean实例化流程四

上一篇Spring源码二十&#xff1a;Bean实例化流程三中&#xff0c;我们主要讨论了单例Bean创建对象的主要方法getSingleton的内部方法createBean&#xff0c;createBean方法中的resolveBeanClase方法与prepareMethodOverrides方法处理了lookup-method属性与repliace-method配置…

设计模式之外观模式(Facade)

Facade设计模式&#xff0c;也称为外观模式&#xff0c;是一种结构型设计模式&#xff0c;它主要用于为子系统中的一组接口提供一个统一的高层接口&#xff0c;从而使得子系统更加容易使用。以下是关于Facade设计模式的详细介绍&#xff1a; 一、定义 Facade模式为多个复杂的…