我讨厌reST,但喜欢Sphinx。是否有一种方法,狮身人面像读取Markdown而不是reStructuredText?
当前回答
这没有使用Sphinx,但是MkDocs将使用Markdown构建您的文档。我也讨厌rst,到目前为止我真的很喜欢MkDocs。
其他回答
这是对推荐方法的更新。
pip install recommonmark
我个人使用Sphinx 3.5.1,所以
# for Sphinx-1.4 or newer
extensions = ['recommonmark']
点击这里查看官方文件。
现在正式支持:http://www.sphinx-doc.org/en/stable/markdown.html
也见https://myst-parser.readthedocs.io/en/latest/syntax/optional.html的扩展,包括linkify使url自动链接。
做到这一点的“正确”方法是编写一个用于markdown的docutils解析器。(加上一个Sphinx选项来选择解析器。)这样做的好处是立即支持所有文档输出格式(但您可能并不关心这一点,因为大多数情况下已经存在类似的降价工具)。不需要从头开发解析器的方法:
You could cheat and write a "parser" that uses Pandoc to convert markdown to RST and pass that to the RST parser :-). You can use an existing markdown->XML parser and transform the result (using XSLT?) to the docutils schema. You could take some existing python markdown parser that lets you define a custom renderer and make it build docutils node tree. You could fork the existing RST reader, ripping out everything irrelevant to markdown and changing the different syntaxes (this comparison might help)... EDIT: I don't recommend this route unless you're prepared to heavily test it. Markdown already has too many subtly different dialects and this will likely result in yet-another-one...
更新:https://github.com/sgenoud/remarkdown是一个文档的markdown阅读器。它没有采用上述任何捷径,而是使用了受到PEG -markdown启发的Parsley PEG语法。
目前还不支持指令。
更新:https://github.com/readthedocs/recommonmark,是另一个文档阅读器,原生支持ReadTheDocs。派生自remarkdown,但使用CommonMark-py解析器。
它可以将特定的或多或少的自然Markdown语法转换为适当的结构,例如指向toctree的链接列表。*没有角色的通用本地语法。 支持嵌入任何rST内容,包括指令,使用' ' ' eval_rst fenced块以及指令DIRECTIVE_NAME:: ....的简写
更新:MyST是另一个文档/Sphinx阅读器。基于markdown-it-py,兼容CommonMark。
有一个通用的{ROLE_NAME} '…的语法。 有一个通用语法的指令' ' ' {DIRECTIVE_NAME}…fenced块。
在所有情况下,您都需要发明Markdown的扩展来表示Sphinx指令和角色。虽然你可能不需要全部,但有些像..Toctree::是必不可少的。 我认为这是最难的部分。在Sphinx扩展之前的reStructuredText已经比markdown丰富了。即使是大量扩展的markdown,比如pandoc的markdown,也主要是rST特性集的子集。那要去的地方可真多啊!
在实现方面,最简单的事情是添加一个泛型结构来表达任何docutils角色/指令。语法灵感的明显候选有:
属性语法,pandoc和其他一些实现已经在许多内联和块结构上允许这种语法。例如' foo '{。方法}-> ' foo ':方法:。 HTML / XML。从<span class="method">foo</span>到只插入doctils内部XML的最笨拙的方法! 某种用于指令的YAML ?
但是这种通用的映射并不是最简单的解决方案…… 目前讨论降价扩展最活跃的地方是https://groups.google.com/forum/#!主题/ pandoc-discuss, https://github.com/scholmd/scholmd/
这也意味着您不能只重用markdown解析器而不扩展它。通过支持自定义过滤器,Pandoc再次不负文档转换瑞士军刀的美誉。(事实上,如果我要接近这个问题,我会尝试在docutils阅读器/transformer /writer和pandoc阅读器/filters/writer之间建立一个通用的桥梁。这比你需要的要多,但回报会比狮身人面像/降价要大得多。)
另一个疯狂的想法:与其扩展markdown来处理Sphinx,不如扩展reStructuredText来支持(大部分)markdown的超集!美妙之处在于,你可以使用任何Sphinx的特性,同时还可以以低价编写大部分内容。
已经有相当多的语法重叠;最明显的是链接语法不兼容。我认为如果你添加对RST的支持,标记低链接,和###风格的标题,并将默认的“反撇号”角色更改为文字,并可能将缩进块更改为文字(RST支持>…对于报价现在),你会得到一些可用的,支持大多数markdown。
有解决方法 sphinx-quickstart.py脚本生成一个Makefile。 每次您想要生成文档以将Markdown转换为reStructuredText时,都可以轻松地从Makefile调用Pandoc。
Markdown和ReST做不同的事情。
RST为处理文档提供了一个对象模型。
Markdown提供了一种雕刻文本的方法。
从您的sphinx项目中引用Markdown内容,使用RST来stub出一个较大文档的整体信息架构和流程,这似乎是合理的。让markdown发挥它的作用,让作者专注于写作文本。
是否有一种方法来引用markdown域,只是按原样雕刻内容?RST/sphinx似乎已经解决了像toctree这样的特性,而没有在markdown中复制它们。
推荐文章
- 如何在Python中进行热编码?
- 如何嵌入HTML到IPython输出?
- 在Python生成器上使用“send”函数的目的是什么?
- 是否可以将已编译的.pyc文件反编译为.py文件?
- Django模型表单对象的自动创建日期
- 在Python中包装长行
- 如何计算两个时间串之间的时间间隔
- 我如何才能找到一个Python函数的参数的数量?
- 您可以使用生成器函数来做什么?
- 将Python诗歌与Docker集成
- 提取和保存视频帧
- 使用请求包时出现SSL InsecurePlatform错误
- 如何检索Pandas数据帧中的列数?
- except:和except的区别:
- 错误:“字典更新序列元素#0的长度为1;2是必需的”