Sphinx文档和Markdown链接 [英] Sphinx documentation and links to Markdown

查看:97
本文介绍了Sphinx文档和Markdown链接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用Sphinx从Markdown来源构建一些文档.我的 conf.py 如下...

I'm trying to use Sphinx to build some documentation from Markdown source. My conf.py is as follows...

conf.py

from recommonmark.parser import CommonMarkParser
project = 'DS'
copyright = '2018, DS'
author = 'DS, Work'

version = ''
release = ''

extensions = []

templates_path = ['_templates']

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

master_doc = 'index'

language = None
exclude_patterns = []
pygments_style = 'sphinx'
html_theme = 'classic'
html_static_path = ['_static']
source_parsers = {
   '.md': CommonMarkParser,
}
htmlhelp_basename = 'DSDocumentationdoc'
latex_elements = {
}
latex_documents = [
    (master_doc, 'DSDocumentation.tex', 'DS Documentation',
     'DS, Work', 'manual'),
]
man_pages = [
    (master_doc, 'dsdocumentation', 'DS Documentation',
     [author], 1)
]
texinfo_documents = [
    (master_doc, 'DSDocumentation', 'DS Documentation',
     author, 'DSDocumentation', 'One line description ofproject.',
 'Miscellaneous'),
]

index.rst

Welcome to DS Documentation!
======================================

The following documentation is produced and maintained by the Data Science team.

Contents:

.. toctree::
   :maxdepth: 2
   :glob:

   README.md
   documentation.md
   getting_started/*
   how-tos/*
   statistics_data_visualisation.md

生成文档并生成html输出,但是 README.md 在两个子目录中具有指向其他markdown文档的链接,例如以下...

The documents build and html output is generated, however README.md has links to other markdown documents in the two sub-directories such as the following...

... [this document](./getting_started/setting_your_machine_up.md)...

...在翻译后的 README.html 文档中,该目标尚未转换为翻译后的HTML目标,因为它已被识别为外部参考 ...

...which in the translated README.html document the target has not been converted to the translated HTML target as its been recognised as reference external...

...<a class="reference external" href="./getting_started/setting_your_machine_up.md">this document</a>...

...我正在半期待/希望它会以 reference internal 的形式输出并适当地转换文件扩展名...

...I was half-expecting/hoping it would output as reference internal and convert the file extension approrpiately...

...<a class="reference internal" href="./getting_started/setting_your_machine_up.html">this document</a>...

...从而使链接的工作方式与目录在侧边栏中的作用相同.

...so that links worked in the same vein as the Table of Contents does in the sidebar.

任何有关是否可以实现的建议将不胜感激.

Any suggestions as to whether this can be achieved would be appreciated.

干杯.

编辑

尝试@waylan建议的解决方案,我通过 conf.py 将以下内容添加到 enable_auto_doc_ref ...

Trying out the solution suggested by @waylan I have added the following to by conf.py to enable_auto_doc_ref...

def setup(app):
    app.add_config_value('recommonmark_config', {
        'enable_auto_doc_ref': True,
    }, True)
    app.add_transform(AutoStructify)

...并且在运行 make html 时出现以下错误.....

...and on running make html I get the following error.....

❱ cat /tmp/sphinx-err-57rejer3.log 
# Sphinx version: 1.8.0
# Python version: 3.6.6 (CPython)
# Docutils version: 0.14 
# Jinja2 version: 2.10
# Last messages:
#   building [mo]: targets for 0 po files that are out of date
#   
#   building [html]: targets for 16 source files that are out of date
#   
#   updating environment:
#   
#   16 added, 0 changed, 0 removed
#   
#   reading sources... [  6%] README
#   
# Loaded extensions:
#   sphinx.ext.mathjax (1.8.0) from /home/neil.shephard@samba.sheffield.thefloow.com/.local/lib/python3.6/site-packages/sphinx/ext/math
jax.py                                                                                                                                
#   alabaster (0.7.11) from /home/neil.shephard@samba.sheffield.thefloow.com/.local/lib/python3.6/site-packages/alabaster/__init__.py
Traceback (most recent call last):
  File "/home/neil.shephard@samba.sheffield.thefloow.com/.local/lib/python3.6/site-packages/sphinx/cmd/build.py", line 304, in build_ma
in                                                                                                                                    
    app.build(args.force_all, filenames)
  File "/home/neil.shephard@samba.sheffield.thefloow.com/.local/lib/python3.6/site-packages/sphinx/application.py", line 341, in build
    self.builder.build_update()
  File "/home/neil.shephard@samba.sheffield.thefloow.com/.local/lib/python3.6/site-packages/sphinx/builders/__init__.py", line 347, in 
build_update                                                                                                                          
    len(to_build))
  File "/home/neil.shephard@samba.sheffield.thefloow.com/.local/lib/python3.6/site-packages/sphinx/builders/__init__.py", line 360, in 
build                                                                                                                                 
    updated_docnames = set(self.read())
  File "/home/neil.shephard@samba.sheffield.thefloow.com/.local/lib/python3.6/site-packages/sphinx/builders/__init__.py", line 468, in 
read                                                                                                                                  
    self._read_serial(docnames)
  File "/home/neil.shephard@samba.sheffield.thefloow.com/.local/lib/python3.6/site-packages/sphinx/builders/__init__.py", line 490, in 
_read_serial                                                                                                                          
    self.read_doc(docname)
  File "/home/neil.shephard@samba.sheffield.thefloow.com/.local/lib/python3.6/site-packages/sphinx/builders/__init__.py", line 534, in 
read_doc                                                                                                                              
    doctree = read_doc(self.app, self.env, self.env.doc2path(docname))
  File "/home/neil.shephard@samba.sheffield.thefloow.com/.local/lib/python3.6/site-packages/sphinx/io.py", line 318, in read_doc
    pub.publish()
  File "/home/neil.shephard@samba.sheffield.thefloow.com/.local/lib/python3.6/site-packages/docutils/core.py", line 218, in publish
    self.apply_transforms()
  File "/home/neil.shephard@samba.sheffield.thefloow.com/.local/lib/python3.6/site-packages/docutils/core.py", line 199, in apply_trans
forms                                                                                                                                 
    self.document.transformer.apply_transforms()
  File "/home/neil.shephard@samba.sheffield.thefloow.com/.local/lib/python3.6/site-packages/sphinx/transforms/__init__.py", line 90, in
 apply_transforms                                                                                                                     
    Transformer.apply_transforms(self)
  File "/home/neil.shephard@samba.sheffield.thefloow.com/.local/lib/python3.6/site-packages/docutils/transforms/__init__.py", line 171,
 in apply_transforms                                                                                                                  
    transform.apply(**kwargs)
  File "/home/neil.shephard@samba.sheffield.thefloow.com/.local/lib/python3.6/site-packages/recommonmark/transform.py", line 325, in ap
ply                                                                                                                                   
    self.traverse(self.document)
  File "/home/neil.shephard@samba.sheffield.thefloow.com/.local/lib/python3.6/site-packages/recommonmark/transform.py", line 297, in tr
averse                                                                                                                                
    self.traverse(child)
  File "/home/neil.shephard@samba.sheffield.thefloow.com/.local/lib/python3.6/site-packages/recommonmark/transform.py", line 297, in tr
averse                                                                                                                                
    self.traverse(child)
  File "/home/neil.shephard@samba.sheffield.thefloow.com/.local/lib/python3.6/site-packages/recommonmark/transform.py", line 297, in tr
averse                                                                                                                                
    self.traverse(child)
  File "/home/neil.shephard@samba.sheffield.thefloow.com/.local/lib/python3.6/site-packages/recommonmark/transform.py", line 287, in tr
averse                                                                                                                                
    newnode = self.find_replace(c)
  File "/home/neil.shephard@samba.sheffield.thefloow.com/.local/lib/python3.6/site-packages/recommonmark/transform.py", line 267, in fi
nd_replace                                                                                                                            
    newnode = self.auto_doc_ref(node)
  File "/home/neil.shephard@samba.sheffield.thefloow.com/.local/lib/python3.6/site-packages/recommonmark/transform.py", line 175, in au
to_doc_ref                                                                                                                            
    return self.state_machine.run_role('doc', content=content)
  File "/home/neil.shephard@samba.sheffield.thefloow.com/.local/lib/python3.6/site-packages/recommonmark/states.py", line 134, in run_r
ole                                                                                                                                   
    content=content)
TypeError: 'NoneType' object is not callable

我仔细检查了最后两个调用,我认为这可能是由于未设置 content 造成的,这可能与我的 index.rst 有关但是我真的不在这里.

I've looked through the last two calls and I think this might be down to content not being set, which may be something to do with my index.rst but I'm really out of my depth here.

推荐答案

推荐标记文档建议通过将以下内容添加到您的中来启用 AutoStructify config.py 文件:

The recommonmark documentation suggests enabling AutoStructify by adding the following to your config.py file:

from recommonmark.transform import AutoStructify

github_doc_root = 'https://github.com/rtfd/recommonmark/tree/master/doc/'
def setup(app):
    app.add_config_value('recommonmark_config', {
            'url_resolver': lambda url: github_doc_root + url,
            'auto_toc_tree_section': 'Contents',
            }, True)
    app.add_transform(AutoStructify)

这将为您提供以下功能:

This will give you the following features:

  • enable_auto_toc_tree :是否启用自动Toc树"功能.
  • auto_toc_tree_section :启用后,仅在与标题匹配的部分上启用自动Toc树".
  • 启用_auto_doc_ref :是否启用自动文档参考"功能.
  • enable_math :是否启用数学公式
  • enable_inline_math :是否启用内联数学
  • enable_eval_rst :是否启用了嵌入reStructuredText.
  • url_resolver :将文档中现有的相对位置映射到http链接的功能
  • enable_auto_toc_tree: whether enable Auto Toc Tree feature.
  • auto_toc_tree_section: when enabled, Auto Toc Tree will only be enabled on section that matches the title.
  • enable_auto_doc_ref: whether enable Auto Doc Ref feature.
  • enable_math: whether enable Math Formula
  • enable_inline_math: whether enable Inline Math
  • enable_eval_rst: whether Embed reStructuredText is enabled.
  • url_resolver: a function that maps a existing relative position in the document to a http link

值得注意的是自动文档参考功能:

通常在一个文档中引用另一文档页面.我们通常使用引用来做到这一点.AutoStructify将翻译这些参考块转换为结构化文档参考.例如

It is common to refer to another document page in one document. We usually use reference to do that. AutoStructify will translate these reference block into a structured document reference. For example

[API Reference](api_ref.md)

将转换为以下reStructuredText代码的AST

will be translated to the AST of following reStructuredText code

:doc:`API Reference </api_ref>`

它将呈现为API参考

为什么这是必要的?因为与Rst不同,Markdown对给定文档之外的任何内容都不了解,也不支持Rst样式指令.因此,没有转换URL的机制.

Why is this necessary? Because, unlike Rst, Markdown does not have any knowledge of anything outside of the given document and has no support for Rst style directives. Therefore, there is no mechanism to transform a URL.

相反,AutoStructify会等到重新标记桥将Markdown转换为Sphinx的基础文档结构(docutils文档对象)之后,然后在其上运行一系列转换器以提供有限的类似Rst的功能.即使使用AutoStructify,使用Markdown时也永远不会获得全部功能支持.那将需要Markdown对指令进行本地支持,这是不可能的.

Instead, AutoStructify waits until after the recommonmark bridge converts the Markdown to Sphinx's underlying document structure (docutils document object), then it runs a series of transformers on it to provide limited Rst like functionality. Even with AutoStructify, you will never get full feature support when using Markdown. That would require Markdown to have native support for directives, which is not likely to ever happen.

这篇关于Sphinx文档和Markdown链接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆