Sphinx文档和Markdown链接

Sphinx文档和Markdown链接

本文介绍了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/[email protected]/.local/lib/python3.6/site-packages/sphinx/ext/math
jax.py
#   alabaster (0.7.11) from /home/[email protected]/.local/lib/python3.6/site-packages/alabaster/__init__.py
Traceback (most recent call last):
  File "/home/[email protected]/.local/lib/python3.6/site-packages/sphinx/cmd/build.py", line 304, in build_ma
in
    app.build(args.force_all, filenames)
  File "/home/[email protected]/.local/lib/python3.6/site-packages/sphinx/application.py", line 341, in build
    self.builder.build_update()
  File "/home/[email protected]/.local/lib/python3.6/site-packages/sphinx/builders/__init__.py", line 347, in
build_update
    len(to_build))
  File "/home/[email protected]/.local/lib/python3.6/site-packages/sphinx/builders/__init__.py", line 360, in
build
    updated_docnames = set(self.read())
  File "/home/[email protected]/.local/lib/python3.6/site-packages/sphinx/builders/__init__.py", line 468, in
read
    self._read_serial(docnames)
  File "/home/[email protected]/.local/lib/python3.6/site-packages/sphinx/builders/__init__.py", line 490, in
_read_serial
    self.read_doc(docname)
  File "/home/[email protected]/.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/[email protected]/.local/lib/python3.6/site-packages/sphinx/io.py", line 318, in read_doc
    pub.publish()
  File "/home/[email protected]/.local/lib/python3.6/site-packages/docutils/core.py", line 218, in publish
    self.apply_transforms()
  File "/home/[email protected]/.local/lib/python3.6/site-packages/docutils/core.py", line 199, in apply_trans
forms
    self.document.transformer.apply_transforms()
  File "/home/[email protected]/.local/lib/python3.6/site-packages/sphinx/transforms/__init__.py", line 90, in
 apply_transforms
    Transformer.apply_transforms(self)
  File "/home/[email protected]/.local/lib/python3.6/site-packages/docutils/transforms/__init__.py", line 171,
 in apply_transforms
    transform.apply(**kwargs)
  File "/home/[email protected]/.local/lib/python3.6/site-packages/recommonmark/transform.py", line 325, in ap
ply
    self.traverse(self.document)
  File "/home/[email protected]/.local/lib/python3.6/site-packages/recommonmark/transform.py", line 297, in tr
averse
    self.traverse(child)
  File "/home/[email protected]/.local/lib/python3.6/site-packages/recommonmark/transform.py", line 297, in tr
averse
    self.traverse(child)
  File "/home/[email protected]/.local/lib/python3.6/site-packages/recommonmark/transform.py", line 297, in tr
averse
    self.traverse(child)
  File "/home/[email protected]/.local/lib/python3.6/site-packages/recommonmark/transform.py", line 287, in tr
averse
    newnode = self.find_replace(c)
  File "/home/[email protected]/.local/lib/python3.6/site-packages/recommonmark/transform.py", line 267, in fi
nd_replace
    newnode = self.auto_doc_ref(node)
  File "/home/[email protected]/.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/[email protected]/.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:

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

[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链接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-29 18:34