2010-03-18 57 views
170

我讨厌RST,但爱狮身人面像。有没有一种方法让狮身人面像读取markdown而不是reStructuredText?使用狮身人面像与Markdown代替RST

+0

我不知道用于此的任何选项。但请注意RST在可扩展性方面比减价有更多的选择。所以根据你的项目,这可能是不够的。 – Wolph 2010-03-21 13:58:08

+2

有一个[rST子集](https://gist.github.com/dupuy/1855764),大多是有效的减价。如果你讨厌Sphinx字段列表(':param path:'etc),请参见[Napoleon extension](https://pypi.python.org/pypi/sphinxcontrib-napoleon/)。 – 2014-04-07 22:21:29

+3

如果您想在Markdown with Sphinx中记录您的Python项目,请在https://bitbucket.org/birkenfeld/sphinx/issue/825/markdown-capable-sphinx投票选择功能请求 – 2014-09-14 17:26:08

回答

85

这样做的“正确”方法是编写docutils parser进行降价。 (加上一个狮身人面像选项来选择解析器。)它的优点将是对所有docutils输出格式的即时支持(但您可能并不在乎,因为大多数类似的降价工具已经存在)。方式来处理,没有从头开始开发一个解析器:

  • 你可以欺骗和编写使用Pandoc到降价转换为RST并传递到RST分析器:-)一个“解析器”。

  • 您可以使用现有的markdown-> XML解析器并将结果(使用XSLT?)转换为docutils架构。

  • 你可以拿一些existing python markdown parser,让你定义一个自定义的渲染器,并使其构建docutils节点树。

  • 你可以用叉子叉现有RST读者,剥开一切无关的降价和改变不同的语法(this comparison可能帮助)...
    编辑:除非你准备在很大程度上,我不建议这条路线测试它。降价已经有太多微妙的不同方言,这将有可能导致尚未另外一...

UPDATE:https://github.com/sgenoud/remarkdown是docutils的减价读者。它没有采取任何上述快捷方式,但使用了Parsley PEG语法,其灵感来源于peg-markdownDoesn't yet支持指令。

更新:https://github.com/rtfd/recommonmark是另一个docutils读者,本地支持ReadTheDocs。派生自重新下载,但使用CommonMark-py解析器。不支持指令,但can convert或多或少自然的Markdown语法适用于合适的结构,例如指向toctree的链接列表。对于其他需求,```eval_rst fenced block可让您嵌入任何rST指令。


所有案件,你需要创造降价的扩展来表示Sphinx directives and roles。虽然你可能不需要所有这些,但有些像.. toctree::是必不可少的。
这是我认为最难的部分。在狮身人面像扩展已经比标记更丰富之前,它是reStructuredText。即使大幅扩展降价,如pandoc's,也大多是rST功能集的一个子集。这是一个很好的理由!

实施方面,最简单的事情是添加一个通用结构来表达任何docutils角色/指令。语法灵感的明显候选者是:

  • 属性语法,pandoc和其他一些实现已允许在许多内联和块结构中使用。例如`foo`{.method} - >`foo`:method:
  • HTML/XML。从<span class="method">foo</span>到插入docutils内部XML的kludgiest方法!
  • 某种指令的YAML?

但是这样的通用映射不会是最降价十岁上下的解决方案... 目前最活跃的地方,讨论降价扩展是https://groups.google.com/forum/#!topic/pandoc-discusshttps://github.com/scholmd/scholmd/

这也意味着你不能只重用降价解析器,但不以某种方式进行扩展。 Pandoc再次恪守其作为文件转换瑞士军刀的声誉,支持custom filtes。 (事实上​​,如果我想这样做,我会尝试在docutils读者/变形记者/作者和pandoc读者/过滤器/作者之间建立一个通用桥梁,这比你需要的要多,但是收益会比sphinx /降价)


替代疯狂的想法:而不是扩大降价处理狮身人面像,延长reStructuredText的支持(主要是)降价的超集!美丽的是,你将能够使用任何狮身人面像功能,但能够用降价编写大部分内容。

已经有considerable syntax overlap;最值得注意的是链接语法不兼容。我认为,如果您为RST减价链接和###风格的标题添加支持,并将默认的`backticks`角色更改为文字,并且可能会将缩进的块更改为意思字面(现在RST支持> ...),您将获得可用的支持大多数降价。

+17

我从这方面缺乏进展得出的结论是,ReST可能足够好,而且不够差异,所以减价对于这样的承诺是值得的。 – 2013-02-04 13:04:01

+2

TLDR:使用[recommonmark](https://github.com/rtfd/recommonmark)使用Markdown编写Sphinx文档。 – ostrokach 2016-04-04 00:19:38

1

有一种解决方法。
sphinx-quickstart.py脚本生成一个Makefile。
您可以在每次想要生成文档以便将Markdown转换为reStructuredText时从Makefile轻松调用Pandoc。

+3

除非我做错了什么,否则用Markdown替换ReST并不容易。如果您在Markdown源文件中使用[toctree](http://sphinx-doc.org/markup/toctree.html)等指令,则Pandoc会将它们更改为一行:'.. toctree :::maxdepth:2 :glob:'在转换过程中,他们将停止工作。换句话说,以这种方式使用指令是不可能的。 – 2013-05-20 08:03:56

+0

@WiktorWalc我对pandoc并不是很熟悉,但我并没有真的尝试过,但我猜测它很有意义。好吧。我试过了。我想你可以提交一份错误报告? – 2013-05-21 22:06:54

+0

@WiktorWalc:'..toctree'是无效的Markdown语法。你要么在Markdown中编写整个文档(并且要放弃ReSt的细节),要么使用ReST。你不能吃你的蛋糕,也不能吃。 – Aditya 2013-09-25 19:02:05

21

Markdown和ReST做不同的事情。

RST提供了一个处理文档的对象模型。

Markdown提供了一种雕刻文本位的方法。

想要从sphinx项目中引用Markdown内容中的一些内容似乎是合理的,它使用RST来截取整个信息体系结构和更大文档的流程。让降价做它做的事情,这可以让作家专注于撰写文字。

有没有办法引用一个降价域,只是为了雕刻内容? RST /狮身人面像似乎已经照顾了诸如toctree之类的功能而没有在减价中重复它们。

+4

“想从你的狮身人面像项目中引用你的Markdown内容似乎是合理的 - ”这实际上是我想要做的;我想在我的更全面的Sphinx文档中加入一些降价内容(我的'README.md')。你知道这是可能的吗? – detly 2014-04-29 12:45:00

23

这不使用狮身人面像,但MkDocs将使用Markdown构建您的文档。我也很讨厌,到目前为止,我真的很喜欢MkDocs。

+5

对于最终用户文档,MkDocs在这里也工作得很好。仍然希望在文档字符串中使用降价。 – 2014-05-15 15:11:58

+2

对此,这么多是的。 – jkmacc 2014-05-16 13:38:32

+1

嘿,谢谢 - [MkDocs](http://www.mkdocs.org/)太棒了!与Sphinx和RST相比,我丧失了许多强大的功能和特性,这是肯定的...但它非常简单,简化,使用起来非常简单快捷。几乎适用于我所有的用例 - 比如简短安装说明和一些快速入门教程以及一些示例。对于少数情况,我需要大量的源代码解释 - 例如类和函数调用文档 - 我坚持使用Sphinx。 – Brutus 2015-08-14 11:52:58

7

我跟贝尼建议使用pandoc完成这个任务。安装后,以下脚本会将源目录中的所有降价文件转换为第一个文件,以便您可以用markdown编写所有文档。希望这对其他人有用。

#!/usr/bin/env python 
import os 
import subprocess 

DOCUMENTATION_SOURCE_DIR = 'documentation/source/' 
SOURCE_EXTENSION = '.md' 
OUTPUT_EXTENSION = '.rst' 

for _, __, filenames in os.walk(DOCUMENTATION_SOURCE_DIR): 
    for filename in filenames: 
     if filename.endswith('.md'): 
      filename_stem = filename.split('.')[0] 
      source_file = DOCUMENTATION_SOURCE_DIR + filename_stem + SOURCE_EXTENSION 
      output_file = DOCUMENTATION_SOURCE_DIR + filename_stem + OUTPUT_EXTENSION 
      command = 'pandoc -s {0} -o {1}'.format(source_file, output_file) 
      print(command) 
      subprocess.call(command.split(' ')) 
54

您可以在同一个Sphinx项目中使用Markdown和reStructuredText。如何在Read The Docs上简洁地记录这一点。安装recommonmark(pip install recommonmark),然后编辑conf.py

from recommonmark.parser import CommonMarkParser 

source_parsers = { 
    '.md': CommonMarkParser, 
} 

source_suffix = ['.rst', '.md'] 

我创建了一个小例子项目on Github (serra/sphinx-with-markdown)展示它是如何(以及)的作品。它使用CommonMark 0.5.4和推荐0.4.0。

+4

Beni在[上面的非常全面的答案]中提到了这种方法(http://stackoverflow.com/a/2487862/322283)。不过,我觉得这个问题值得这个简单的答案。 – Marijn 2015-11-19 07:42:23

+2

阅读https://recommonmark.readthedocs.org/en/latest/auto_structify.html,尤其是如何创建一个toctree,以及如何使用['eval_rst' fenced block](https://recommonmark.readthedocs。 org/en/latest/auto_structify.html#embed-restructuredtext)插入任何rST构造/指令。 – 2015-12-02 09:37:33

+0

这需要安装recommonmark和commonmark – XavierCLL 2016-04-30 03:40:17

12

它看起来像一个基本的实现已经进入狮身人面像的方式,但字还没有到位。 See github issue comment

安装依赖:

pip install commonmark recommonmark 

调整conf.py

source_parsers = { 
    '.md': 'recommonmark.parser.CommonMarkParser', 
} 
source_suffix = ['.rst', '.md'] 
+1

如果你得到'无法导入名称DocParser',请尝试'pip install commonmark == 0.5.5 '。 – 2016-09-09 02:27:16

0

注意,使用行家和嵌入式狮身人面像+降价支持建立文档完全由后续支持荷兰国际集团的Maven插件:

https://trustin.github.io/sphinx-maven-plugin/index.html

<plugin> 
    <groupId>kr.motd.maven</groupId> 
    <artifactId>sphinx-maven-plugin</artifactId> 
    <version>1.6.1</version> 
    <configuration> 
    <outputDirectory>${project.build.directory}/docs</outputDirectory> 
    </configuration> 
    <executions> 
    <execution> 
     <phase>package</phase> 
     <goals> 
     <goal>generate</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin>