Markdown+Sphinx+Read_the_Docs的一些技巧

打印 上一主题 下一主题

主题 556|帖子 556|积分 1668

Markdown+Sphinx+Read_the_Docs可以用来构建个人主页或知识教程,搭建方法网上许多,可以参考这个大佬的文章。本文告急陈诉一些技巧,可以让项目更加完美。
本人运行情况是WSL2 Ubuntu 22.04,Sphinx版本是7.3.7

  

一 工程搭建

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/,安装下令如下,
  1. pip install -U myst-parser
复制代码
其先容如下,

先容里提到这个插件是CommonMark-plus,以是就不必要CommonMark了。
2. 其它插件



  • Read the Docs主题插件,
    1. pip install -U sphinx_rtd_theme
    复制代码
  • mermaid图表渲染插件
    1. pip install -U sphinxcontrib.mermaid
    复制代码
  • 代码块一键复制按钮插件
    1. pip install -U sphinx_copybutton
    复制代码
3. 开端配置

使用VSCode打开工程目次,然后在source目次下打开conf.py,改为如下,
  1. # Configuration file for the Sphinx documentation builder.
  2. #
  3. # For the full list of built-in configuration values, see the documentation:
  4. # https://www.sphinx-doc.org/en/master/usage/configuration.html
  5. # -- Project information -----------------------------------------------------
  6. # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
  7. project = 'demo'
  8. copyright = '2024, WH'
  9. author = 'WH'
  10. # -- General configuration ---------------------------------------------------
  11. # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
  12. extensions = [
  13.     'myst_parser',
  14.     "sphinxcontrib.mermaid",
  15.     "sphinx_copybutton",
  16. ]
  17. source_suffix = {
  18.     '.rst': 'restructuredtext',
  19.     '.md': 'markdown',
  20. }
  21. myst_enable_extensions = [
  22.     "tasklist",
  23.     "deflist",
  24.     "dollarmath",
  25. ]
  26. templates_path = ['_templates']
  27. exclude_patterns = []
  28. language = 'zh_CN'
  29. # -- Options for HTML output -------------------------------------------------
  30. # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
  31. html_theme = 'sphinx_rtd_theme'
  32. html_static_path = ['_static']
复制代码
4. 简朴测试

在工程目次下实行make html,生成完毕后,cd进入build/html/目次下,实行下面下令开启服务器,
  1. python -m http.server
复制代码
显示如下,

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

我们在source目次下添加一个目次md,然后在md目次下添加markdown文件,最后md目次里内容如下,

然后在index.rst里添加新建的md文件,特殊要留意,md文件名地点行上面要空一行,不能紧邻toctree的配置,否则会解析错误,
  1. .. demo documentation master file, created by
  2.    sphinx-quickstart on Tue Jul  9 22:31:30 2024.
  3.    You can adapt this file completely to your liking, but it should at least
  4.    contain the root `toctree` directive.
  5. Welcome to demo's documentation!
  6. ================================
  7. .. toctree::
  8.    :maxdepth: 2
  9.    :caption: Contents:
  10.    md/教程1.md
  11.    md/教程2.md
  12.    md/教程1_detail/aa.md
  13.    md/教程1_detail/bb.md
  14.    md/教程2_detail/cc.md
  15.    md/教程2_detail/dd.md
  16. Indices and tables
  17. ==================
  18. * :ref:`genindex`
  19. * :ref:`modindex`
  20. * :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个函数,
  1. def source_read_handler(app, docname, content):
  2.     if '[[_TOC_]]' in content[0]:
  3.         content[0] = content[0].replace('[[_TOC_]]', '```{contents} Table of Contents\n:depth: 3\n```\n')
  4. def setup(app):
  5.     app.connect('source-read', source_read_handler)
复制代码
source_read_handler()对读取的md内容进行替换,如许就可以满足要求了。
此时在教程2.md里添加md的目次语法,

然后重新编译并运行,最后显示如下,可以看到目次正确显示了,


六 总结

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大号在练葵花宝典

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表