RST 대신 Markdown과 함께 스핑크스 사용


212

나는 RST를 싫어하지만 스핑크스를 좋아합니다. 스핑크스가 reStructuredText 대신 markdown을 읽는 방법이 있습니까?


1
사용할 수있는 옵션이 없습니다. 그러나 RST는 확장 성 측면에서 마크 다운보다 훨씬 더 많은 옵션을 제공합니다. 따라서 프로젝트에 따라 충분하지 않을 수 있습니다.
Wolph

2
대부분 유효한 마크 다운 인 rST서브 세트 가 있습니다 . Sphinx 필드 목록 :param path:등 을 싫어하는 경우 Napoleon 확장을 참조하십시오 .
Beni Cherniavsky-Paskin

3
Sphinx를 사용하여 Markdown에서 Python 프로젝트를 문서화하려면 bitbucket.org/birkenfeld/sphinx/issue/825/…
Panic Panic

1
이 의견을 보면 마치 두 가지를 혼합 한 것처럼 보입니다 : read-the-docs.readthedocs.org/en/latest/…
Stefan van der Walt

2
기본 마크 다운 지원이 마침내 스핑크스로 향했습니다 : 새로운 답변보기
Oliver Bestwalter

답변:


97

"적절한"방법 은 마크 다운을위한 docutils 파서 를 작성하는 것 입니다. (구문 분석기를 선택하기위한 스핑크스 옵션.) 이것의 장점은 모든 docutils 출력 형식을 즉시 지원하는 것입니다. 파서를 처음부터 개발하지 않고 접근하는 방법 :

  1. Pandoc 을 사용 하여 markdown을 RST로 변환하고 RST 파서에 전달 하는 "파서"를 속이고 쓸 수 있습니다.

  2. 기존 마크 다운-> XML 구문 분석기를 사용하고 XSLT를 사용하여 결과를 docutils 스키마로 변환 할 수 있습니다.

  3. 당신은 몇 가지 걸릴 수 있습니다 기존의 파이썬 인하 파서 사용자 정의 렌더러를 정의하고 docutils 노드 트리를 구축 할 수 있습니다.

  4. 기존 RST 리더를 포크하여 마크 다운과 관련이없는 모든 것을 제거하고 다른 구문을 변경하면됩니다 ( 이 비교 가 도움 될 수 있습니다)
    . Markdown은 이미 미묘하게 다른 방언을 너무 많이 가지고 있기 때문에 또 다른 방언이 생길 것입니다 ...

업데이트 : https://github.com/sgenoud/remarkdown 은 docutils의 마크 다운 리더입니다. 위의 단축키를 사용하지 않았지만 peg-markdown에서 영감을 얻은 Parsley PEG 문법을 사용합니다 .

업데이트 : https://github.com/readthedocs/recommonmark 는 ReadTheDocs에서 기본적으로 지원되는 다른 docutils 리더입니다. 비고에서 파생되었지만 CommonMark-py 파서를 사용합니다 .

  • 그것은 변환 할 수 있습니다 toctree 링크의 적절한 구조를 예를 들어 목록에 특정 다소간 자연 마크 다운 문법을. * 역할에 대한 일반적인 기본 구문이 없습니다.
  • 내장 지원하는 모든 으로, 지침을 포함하여 첫 번째 컨텐츠를, ```eval_rst울타리 블록 뿐만 아니라 지시를위한 속기 DIRECTIVE_NAME:: ....

업데이트 : MyST 는 또 다른 docutins / Sphinx 리더입니다. markdown-it-py, CommonMark 호환을 기반으로합니다.

  • {ROLE_NAME}`...`역할에 대한 일반적인 구문이 있습니다.
  • ```{DIRECTIVE_NAME} ...분리 된 블록이있는 지시문에 대한 일반적인 구문이 있습니다.

에서 모든 경우에, 당신은 표현하기 위해 마크 다운의 확장을 발명해야 스핑크스 지침 및 역할 . 당신이 그들 모두를 필요로하지 않을 수도 있지만, 일부 .. toctree::는 필수적입니다.
이것이 가장 어려운 부분이라고 생각합니다. 스핑크스 확장 이전의 reStructuredText는 이미 마크 다운보다 풍부했습니다. pandoc 's 와 같이 크게 확장 된 마크 다운조차도 대부분 rST 기능 세트의 하위 세트입니다. 그것은 다룰 근거가 많습니다!

구현 측면에서 가장 쉬운 것은 docutils 역할 / 지시문을 표현하기 위해 일반 구성을 추가하는 것입니다. 구문 영감의 확실한 후보는 다음과 같습니다.

  • pandoc 및 기타 구현에서 이미 많은 인라인 및 블록 구성을 허용하는 속성 구문 예를 들어 `foo`{.method}-> `foo`:method:입니다.
  • HTML / XML. <span class="method">foo</span>docutils 내부 XML을 삽입하는 가장 친절한 방법 부터 !
  • 지시문에 대한 일종의 YAML?

그러나 이러한 일반적인 매핑은 가장 인상적인 해결책은 아닙니다 ... 현재 마크 다운 확장에 대해 가장 활발한 활동은 https://groups.google.com/forum/#!topic/pandoc-discuss , https : //입니다. github.com/scholmd/scholmd/

또한 마크 다운 파서를 어떻게 든 확장하지 않고 재사용 할 수는 없습니다. 판독은 다시 맞춤형 문서를 지원함으로써 문서 변환의 스위스 군용 칼로 명성을 얻었습니다 . (실제로 이것에 접근하려면 docutils 리더 / 변압기 / 라이터와 팬독 리더 / 필터 / 라이터 사이에 일반적인 다리를 만들려고합니다. 필요한 것보다 많지만 스핑크스 / 가격 인하.)


대체 미친 아이디어 : 스핑크스를 처리하기 위해 마크 다운을 확장하는 대신 reStructuredText를 확장하여 마크 다운의 슈퍼 세트를 지원하십시오! 아름다움은 스핑크스 기능을 그대로 사용할 수 있지만 대부분의 콘텐츠를 마크 다운으로 작성할 수 있다는 것입니다.

이미 상당한 구문 겹침이 있습니다 . 가장 주목할만한 링크 구문은 호환되지 않습니다. 마크 다운 링크 및 ###스타일 헤더에 대해 RST에 대한 지원을 추가 하고 기본 `backticks`역할을 리터럴로 변경하고 들여 쓰기 된 블록을 리터럴 ( > ...오늘 인용을 지원 하는 RST )로 변경하면 대부분의 마크 다운을 지원하는 유용한 것을 얻을 수 있다고 생각합니다 .


17
나는이 분야에서의 진전이 결여되어 있다고 ReST가 충분히 우수하고 그다지 유사하지 않을 수 있으므로 Markdown이 그 가치가있는 가치가 있다고 결론 내렸다.
교수 Falken

5
TLDR : 마크 다운을 사용하여 스핑크스 문서를 작성 하려면 recommonmark 를 사용하십시오 .
ostrokach

myst-parser이 답변에 새로운 것을 추가하는 것이 좋습니다 . 이길거야.
Rick은

92

동일한 Sphinx 프로젝트에서 Markdown 및 reStructuredText를 사용할 수 있습니다. 이 작업을 수행하는 방법은 문서 읽기에 간결하게 문서화되어 있습니다.

recommonmark ( pip install recommonmark)를 설치 한 후 다음을 편집하십시오 conf.py.

from recommonmark.parser import CommonMarkParser

source_parsers = {
    '.md': CommonMarkParser,
}

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

나는 Github (serra / sphinx-with-markdown)에서 어떻게 작동하는지 보여주는 작은 예제 프로젝트 만들었습니다 . CommonMark 0.5.4 및 recommonmark 0.4.0을 사용합니다.


4
Beni는 위의 매우 포괄적 인 답변 에서이 접근법을 언급합니다 . 그러나이 질문 에이 간단한 대답이 필요하다고 생각합니다.
Marijn

2
그것은 읽는 것이 중요 recommonmark.readthedocs.org/en/latest/auto_structify.html을 toctree를 생성하고 사용하는 방법 특히 방법, eval_rst울타리 블록을 어떤 RST 구조 / 지시를 삽입 할 수 있습니다.
Beni Cherniavsky-Paskin

이것은 recommonmark 및 commonmark를 설치하는 데 필요
XavierCLL

1
ImportError: cannot import name 'DocParser'Python 3.4.3에서 Sphinx 1.4.1을 얻 습니다.
detly

2
@detly 다음 ImportError를 인해 recommonmark과의 호환성을 깨는 commonmark의 최신 버전 (0.6.0)에 있습니다 : 볼 github.com/rtfd/recommonmark/issues/24를 . 해결책 :pip install commonmark==0.5.5 --upgrade
kadee

30

이것은 Sphinx를 사용하지 않지만 MkDocs 는 Markdown을 사용하여 문서를 작성합니다. 나는 또한 먼저 미워하고, 지금까지 MkDocs를 즐겼습니다.


5
MkDocs는 최종 사용자 문서를 위해 여기에서도 실제로 잘 작동했습니다. 여전히 docstrings 내에서 마크 다운을 사용하려고합니다.
Marcus Ottosson

2
이것에 대한 너무 예.
jkmacc

1
감사합니다 — MkDocs 는 대단합니다! 나는 스핑크스와 RST에 비해 많은 힘과 기능을 잃어 버렸다. 물론 ... 복잡하지 않고 능률적이고 사용하기 쉽고 빠르다. 간단한 설치 지침 및 일부 예제가 포함 된 빠른 시작 자습서와 같은 거의 모든 사용 사례에 적합합니다. ig 클래스 및 함수 호출 문서를 설명하는 많은 소스 코드가 필요한 몇 가지 경우에는 Sphinx를 사용합니다.
Brutus

이 문서를 작성할 당시에는 2 단계의 TOC 들여 쓰기 만 지원합니다.
wrygiel

@wrygiel 당신이 옳지 않다. 렌더링되는 TOC 레벨의 수는 사용하는 테마에 따라 다르다.
Ale

27

업데이트 : 이것은 공식적으로 지원되며 스핑크스 문서에 문서화되어 있습니다.

기본 구현이 스핑크스로 들어가는 것처럼 보이지만 단어는 아직 완성되지 않았습니다. github 이슈 코멘트 참조

설치 종속성 :

pip install commonmark recommonmark

조정 conf.py:

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

1
당신이 얻을 경우 cannot import name DocParser, 시도하십시오 pip install commonmark==0.5.5.
Roger Dahl

1
스핑크스의 문서에 링크해야 sphinx-doc.org/en/master/usage/markdown.html
폴 Brannan

21

마크 다운과 ReST는 다른 일을합니다.

RST는 문서 작업을위한 객체 모델을 제공합니다.

마크 다운은 약간의 텍스트를 조각하는 방법을 제공합니다.

RST를 사용하여 전체 정보 아키텍처와 더 큰 문서의 흐름을 없애기 위해 스핑크스 프로젝트에서 Markdown 콘텐츠를 참조하는 것이 합리적입니다. 마크 다운이하는 일을하게하여 글쓰기에 집중할 수있게합니다.

콘텐츠를 그대로 새기려면 마크 다운 도메인을 참조하는 방법이 있습니까? RST / 스핑크스는 toctree마크 다운에서 복제하지 않고 같은 기능을 처리 한 것으로 보입니다 .


5
"스핑크스 프로젝트에서 여러분의 Markdown 콘텐츠를 참조하는 것이 합리적입니다."-이것이 실제로하고 싶은 일입니다. README.md보다 포괄적 인 Sphinx 설명서에 일부 마크 다운 컨텐츠 (my ) 를 포함하고 싶습니다 . 이것이 가능한지 아십니까?
detly


8

이 작업에 pandoc을 사용하겠다는 Beni의 제안과 함께 갔다. 일단 설치되면 다음 스크립트는 소스 디렉토리의 모든 마크 다운 파일을 첫 번째 파일로 변환하므로 모든 문서를 마크 다운으로 작성할 수 있습니다. 이것이 다른 사람들에게 유용하기를 바랍니다.

#!/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(' '))

1

해결 방법이 있습니다.
sphinx-quickstart.py 스크립트는 Makefile을 생성합니다.
Markdown을 reStructuredText로 변환하기 위해 문서를 생성 할 때마다 Makefile에서 Pandoc을 쉽게 호출 할 수 있습니다.


3
내가 잘못하고 있지 않는 한 ReST를 Markdown으로 바꾸는 것은 쉽지 않습니다. Markdown 소스 파일에서 toctree 와 같은 지침을 사용하면 Pandoc은 한 줄로 변경합니다. .. toctree:: :maxdepth: 2 :glob:변환 중에는 작동이 중지됩니다. 즉, 이런 식으로 지시문을 사용하는 것은 불가능합니다.
Wiktor Walc

@WiktorWalc 나는 pandoc에 익숙하지 않으며 실제로 시도하지는 않았지만 추측하는 것이 합리적입니다. 오 잘 나는 노력했다. 버그 신고를 할 수있을 것 같아?
the_drow

@WiktorWalc : ..toctree는 유효한 마크 다운 구문이 아닙니다. Markdown으로 전체 문서를 작성하거나 ReSt의 장점을 잃어 버리거나 ReST를 사용합니다. 케이크를 가지고 먹을 수도 없습니다.
Aditya

1
힌트 : 해결책은 pandoc 필터를 사용하여 특수 명령을 건너 뛰고 출력 생성과 같이 그대로 두는 것입니다. 나는 pandoc 필터의 마법사가 아니며 구성표에 추가 복잡성을 추가합니다.
zmo


0

maven 및 임베디드 Sphinx + MarkDown 지원을 사용하여 문서 작성 은 다음 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>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.