마크 다운 및 여러 파일 포함


199

포함 파일과 같은 다른 파일을 참조 할 수있는 마크 다운 포크가 있습니까? 특히, 자주 호출하지만 항상 그렇지는 않지만 (이 B.md라고 부르는) 링크가있는 별도의 마크 다운 파일을 만들고 싶습니다 .md 파일에서 참조로 링크 할 때 (A.md), 나는 현재 파일의 끝 (A.md)이 아닌 다른 파일 (B.md)에서 링크를 가져 오는 것이 좋습니다.


1
질문이 github 관련 markdown 인 경우 여기를
Adi Prasetyo

3
Markdown의 경험상 'Can Markdown ...'에 대한 대답은 일반적으로 '실제적으로, 보편적으로 또는 쉽게는 아닙니다'입니다.
Michael Scheper 18시 03 분

4
Pandoc을 통해이를 위해 github.com/jgm/pandoc/issues/553 과 commonmark 포럼 ( talk.commonmark.org/t/…)
naught101

답변:


217

짧은 대답은 '아니요'입니다. 긴 대답은 그렇습니다. :-)

마크 다운은 사람들이 간단한 HTML 마크 업으로 쉽게 변환 할 수있는 간단하고 읽기 쉬운 텍스트를 작성할 수 있도록 설계되었습니다. 실제로 문서 레이아웃을 수행하지는 않습니다. 예를 들어 이미지를 오른쪽이나 왼쪽으로 정렬하는 실제 방법은 없습니다. 귀하의 질문에 관해서는, 마크 다운 버전의 파일에서 하나의 파일에서 다른 파일로의 단일 링크를 포함시키는 마크 다운 명령이 없습니다 (내가 아는 한).

이 기능에 가장 가까운 것은 Pandoc 입니다. Pandoc를 사용하면 변환의 일부로 파일을 병합 할 수 있으므로 여러 파일을 단일 출력으로 쉽게 렌더링 할 수 있습니다. 예를 들어, 책을 작성하는 경우 다음과 같은 장이있을 수 있습니다.

01_preface.md
02_introduction.md
03_why_markdown_is_useful.md
04_limitations_of_markdown.md
05_conclusions.md

동일한 디렉토리에서이 명령을 실행하여 병합 할 수 있습니다.

pandoc *.md > markdown_book.html

pandoc은 번역하기 전에 모든 파일을 병합하므로 다음과 같이 마지막 파일에 링크를 포함시킬 수 있습니다.

01_preface.md
02_introduction.md
03_why_markdown_is_useful.md
04_limitations_of_markdown.md
05_conclusions.md
06_links.md

따라서 일부는 01_preface.md다음과 같이 보일 수 있습니다.

I always wanted to write a book with [markdown][mkdnlink].

그리고 당신의 일부는 02_introduction.md다음과 같이 보일 수 있습니다 :

Let's start digging into [the best text-based syntax][mkdnlink] available.

마지막 파일에 다음 줄이 포함되어있는 한 :

[mkdnlink]: http://daringfireball.net/projects/markdown

... 이전에 사용 된 동일한 명령은 병합과 변환을 수행하면서 해당 링크를 전체에 포함시킵니다. 해당 파일의 시작 부분에 빈 줄을 두어 두십시오. pandoc 설명서 는이 방법을 병합 파일 사이에 빈 줄을 추가 있다고하지만, 이것은 빈 줄없이 나를 위해 일을하지 않았다.


6
이것은 나에게 매우 유용한 게시물로 밝혀졌습니다! 고마워 Aaron. / chapters 디렉토리, 챕터를 빌드 / 병합하는 스크립트, 다음과 같은 단계를 포함하는 최상위 레벨 래퍼 스크립트를 갖는 것이 일반적인 유스 케이스 인 것 같습니다. --include-before-body $ (include_dir) / merged_chapters .html. 이것이 조직의 이익을 얻기 위해 취하는 접근법입니다.
Rob

1
pandoc을 사용하는 또 다른 장점은 방대한 양의 출력을 지원한다는 것입니다. HTML뿐만 아니라 docx에서 LaTeX, ePUB에 이르기까지 모든 것을 생성 할 수 있습니다.
Chris Krycho 2016 년

pandoc *.md > markdown_book.html결과 pandoc: *.md: openfile: invalid argument (Invalid argument)-지정한 구문을 지원하지 않는 것 같습니다.
Jason Young

내 시스템에서 작동하고 있습니다. GitHub 에서 샘플 리포지토리를 만들었 으므로 사용한 모든 파일로 시도 할 수 있습니다.
Aaron Massey

적절한 CSS를 포함시켜 이미지를 바로 정렬 할 수 있습니다.
naught101

50

cat입력 파일을 파이핑하기 전에 명령을 사용하여 입력 파일을 연결하면 여러 입력 파일이 들어오는 markdown_py것과 동일한 효과 를 얻을 수 있다고 언급합니다 pandoc.

cat *.md | markdown_py > youroutputname.html

Mac에서 Python 버전의 Markdown에 대한 위 의 pandoc 예제 와 거의 동일하게 작동합니다 .


1
@ tprk77 : Aaron의 대답을 제외하고는 cat 명령이 여기에서 중복됨을 분명히합니다.
naught101

1
사용은 cat *.md유연하지 않은 파일 명명 규칙 을 의미합니다. 이 규칙은 재귀 포함을 반드시 금지 할뿐만 아니라 대규모 문서 프로젝트의 경우 새 파일을 혼합에 추가하는 것이 어려울 수 있습니다. 계산과 이름 바꾸기를 많이해야합니다. 마크 다운 프로젝트는 2010
이후이

@ninegrid MarkdownPP는 매우 유용 해 보이지만 답변에서 참조한 소스 리포지토리를 살펴보면 나에게 보이는 것처럼 보입니다. (a) MarkdownPP는 John Reese의 프로젝트 일뿐입니다. (b) "마크 다운 프로젝트"(다양한 맛 중 하나)의 일부가 아닙니다. 및 (c) MarkdownPP는 구체적으로 GFM을 출력한다. 옳은? 내가 말했듯이, 흥미롭고 도움이되는 것처럼 보이지만 여기에 귀하의 의견은 모든 Markdown 구현과 함께 제공되는 표준 Markdown 기능인 것처럼 들립니다. 그러나 저장소를 보면 상황이 완전히 반대 인 것처럼 보입니다.
FeRD

MD 테이블을 HTML 테이블로 변환하지 못합니다.
james.garriss

30

실제로 MarkdownPP ( MarkdownPP )를 사용할 수 있습니다 . 다른 답변의 가상의 책 예제를 사용 .mdpp하여 장을 나타내는 파일 을 만듭니다 . .mdpp파일은 다음 사용할 수있는 !INCLUDE "path/to/file.mdpp"재귀 최종 출력에 참조 된 파일의 내용으로 지시를 교체하여 작동 지침을.

chapters/preface.mdpp
chapters/introduction.mdpp
chapters/why_markdown_is_useful.mdpp
chapters/limitations_of_markdown.mdpp
chapters/conclusions.mdpp

그런 index.mdpp다음 다음을 포함 하는 것이 필요합니다 .

!INCLUDE "chapters/preface.mdpp"
!INCLUDE "chapters/introduction.mdpp"
!INCLUDE "chapters/why_markdown_is_useful.mdpp"
!INCLUDE "chapters/limitations_of_markdown.mdpp"
!INCLUDE "chapters/conclusions.mdpp"

책을 렌더링하려면 다음에서 전처리기를 실행하면됩니다 index.mdpp.

$ markdown-pp.py index.mdpp mybook.md

상기 볼 잊지 마세요 readme.mdppMarkdownPP의 전처리의 박람회가 큰 문서 프로젝트에 적합한 기능에 대한 저장소.


19

내 해결책은 m4를 사용하는 것입니다. 대부분의 플랫폼에서 지원되며 binutils 패키지에 포함되어 있습니다.

먼저 changequote()파일에 매크로 를 포함 시켜 인용 문자를 원하는대로 변경하십시오 (기본값은` '). 파일이 처리되면 매크로가 제거됩니다.

changequote(`{{', `}}')
include({{other_file}})

명령 행에서 :

m4 -I./dir_containing_other_file/ input.md > _tmp.md
pandoc -o output.html _tmp.md

2
m4거의 알려지지 않았지만 그러한 일반적인 포함 요구에 관해서는 실제로 매우 강력한 도구입니다. 문서에 언급이 충분하기 때문에 "정말 중독성"일 수 있습니다.
Uriel

이제 그게 해결책입니다! Genius
Brandt

m4 의 아이디어와 알림 +1 ! 재미있는 점은 위의 확장을 'md'로 볼 때 m4 머리에서 생각하고 있다는 것입니다 . 그런 다음 예제를 포함시키는 것이 좋습니다. 이 질문이 내가 무엇을하는지 정확하게 묻는 지 확실하지 않지만 어떻게 할 수 있습니까? 어느 쪽이든 감사합니다.
Pryftan

15

최근에 markdown-include 라는 노드에 다음과 같이 C 스타일 구문으로 markdown 파일을 포함시킬 수있는 것을 작성했습니다.

#include "my-file.md"

나는 이것이 당신이 묻는 질문과 잘 일치한다고 생각합니다. 나는 이것이 오래된 것을 알고 있지만 적어도 업데이트하고 싶었다.

원하는 마크 다운 파일에이를 포함시킬 수 있습니다. 해당 파일에는 더 많은 포함이있을 수 있으며 markdown-include 는 내부 링크를 만들고 모든 작업을 수행합니다.

통해 다운로드 할 수 있습니다 npm

npm install -g markdown-include

1
이것은 매우 도움이되었습니다! 감사합니다!
leas

@leas 서비스를 제공하게되어 기쁘다 ... 나는 몇 년 동안 해본 적이 없지만 항상 어느 시점에서 다시 돌아올 것을 의미한다. 잘하면 그것은 당신의 목적에 잘 맞습니다.
Sethen

9

멀티 마크 다운에는 기본적으로이 기능이 있습니다. 파일 변환 이라고합니다 .

{{some_other_file.txt}}

필요한 전부입니다. 이상한 이름이지만 모든 상자를 틱합니다.


이 구문을 렌더링하기 위해 무료 및 오픈 소스 편집기가 있습니까? 자세한 내용과 함께이 질문을 했습니다 . 도와 주시면 감사하겠습니다.
Foad

1
@Foad : 저는 vim 사용자이고 그러한 편집자를 알지 못합니다. 나는 당신의 레딧 Q에서 Asciidoc과 다양한 편집자가 이것을 지원한다는 것을 알았습니다. 나는 이것을 몰랐습니다-감사합니다.
eff

도움이되었다 니 다행입니다. 그러나 vim에 MultiMarkDown의 실시간 미리보기가 있습니까? 설정 및 도트 파일을 좀 더 자세한 내용으로 공유 하시겠습니까?
Foad

1
실시간 미리보기가 없습니다. 나는 그런 종류의 사람이 아닙니다. ;) 내가 마크 다운을 사용한 주된 이유는 처리 되지 않을 때 사람이 읽을 수있는 것을 목표로하기 때문에 미리보기에 대해 너무 신경 쓰지 않습니다 (다른 사람들이하는 이유를 이해하지만). 이 경우 내가 관심을 갖는 유일한 것은 구문 강조 표시이며 기본 마크 다운 구문 강조 표시는 저에게 충분합니다. 도움이되지 않아서 죄송합니다.
eff

1
적어도 내 목적을 위해 markdown / asciidoc을 통해 선택해야 할 이유는 없지만 흥미로울 것 같습니다.
eff

8

includes.txt다음과 같이 pandoc을 실행하는 올바른 순서로 모든 파일과 함께 파일을 사용합니다 .

pandoc -s $(cat includes.txt) --quiet -f markdown -t html5 --css pandoc.css -o index.html

매력처럼 작동합니다!


1
훌륭한 접근 방식 . 파일 순서를 지정하는 것은 기본이지만 glob파일 번호를 지정하지 않으면 방법으로 수행 할 수 없습니다.
ephsmith

단계에 대한 설명을 포함시킬 수 있습니까? 너무 강력 해 보인다! .pdf 및 .tex와 같은 다른 변환을 수행하기 위해 트리밍 할 수 있는지 알고 싶습니다.
nilon

6

사실 당신이 사용할 수있는 \input{filename}\include{filename}라텍스 명령을 직접에서,있는 Pandoc가 지원하기 때문에, 거의 모든 htmllatex 구문.

그러나 포함 된 파일은 파일로 취급됩니다 latex. 그러나 당신은 당신의 컴파일 markdown에를 latexPandox쉽게.


6

Asciidoc ( http://www.methods.co.nz/asciidoc/ )은 실제로 스테로이드에 대한 마크 다운입니다. 전반적으로 Asciidoc과 Markdown은 매우 비슷해 보이며 전환하기가 쉽습니다. 마크 다운에 비해 Asciidoc 의 이점은 이미 다른 Asciidoc 파일과 원하는 형식에 대한 포함을 지원한다는 것입니다. 포함 된 파일 내부의 줄 번호 또는 태그를 기반으로 파일을 부분적으로 포함 할 수도 있습니다.

다른 파일을 포함하면 문서를 작성할 때 실제로 생명을 구할 수 있습니다.

예를 들어 다음과 같은 내용의 asciidoc 파일을 가질 수 있습니다.

// [source,perl]
// ----
// include::script.pl[]
// ----

그리고 당신의 샘플을 유지 script.pl

Github는 asciidoc도 지원합니다.


여기에 좋은 약속이 있지만 방법 단계에 대한 완전한 대답을 제공하지는 않습니다. 다중 파일 문서를 단일 문서로 변환하는 방법을 설명 할 수 있습니까?
nilon

이것이 지금까지이 페이지에서 가장 좋은 솔루션입니다. 나는이 결론에 도달하여 여기서 Reddit 의 문제를 다루었 다 . AsciiDoc에는 내장 포함 기능이 있으며 GitHub에서 렌더링합니다. Atom과 vscode에는 라이브 미리보기를위한 멋진 플러그인도 있습니다. AsciiDoc이 왜 업계 표준이 아닌지 궁금합니다!
Foad

4

나는 우리가 더 나은 생각하는 새로운 파일 포함 구문 채택 (그래서 코드 블록으로 엉망하지, 내가 C 스타일의 포함은 완전히 잘못된 생각됩니다), 나는 이름, 펄의 작은 도구를 썼다 cat.pl가 있기 때문에, 같은 작품cat ( cat a.txt b.txt c.txt병합합니다 세 개의 파일)이지만 너비가 아닌 깊이로 파일 병합합니다 . 사용하는 방법?

$ perl cat.pl <your file>

구문은 다음과 같습니다.

  • 재귀 포함 파일 : @include <-=path=
  • 하나만 포함하십시오. %include <-=path=

파일 포함 루프를 올바르게 처리 할 수 ​​있습니다 (a.txt <-b.txt, b.txt <-a.txt 인 경우 예상되는 것)?

예:

a.txt :

a.txt

    a <- b

    @include <-=b.txt=

a.end

b.txt :

b.txt

    b <- a

    @include <-=a.txt=

b.end

perl cat.pl a.txt > c.txtc.txt :

a.txt

    a <- b

    b.txt

        b <- a

        a.txt

            a <- b

            @include <-=b.txt= (note:won't include, because it will lead to infinite loop.)

        a.end

    b.end

a.end

https://github.com/district10/cat/blob/master/tutorial_cat.pl_.md에 더 많은 예제가 있습니다 .

또한 동일한 효과를 가진 Java 버전을 작성했습니다 (동일하지는 않지만 가깝습니다).



참고 @pandoc-citeproc(예 : " @Darwin1859")로 인용하는 데 사용됩니다 .
PlasmaBinturong

4

실제로이 페이지에 HTML 솔루션을 제공 한 사람이 없다는 것에 놀랐습니다. 지금까지 MarkDown 파일에는 HTML 태그의 전체가 아닐 수도 있습니다. 따라서 다음 단계를 따르십시오.

  1. 에서 여기에 : 당신의 인하 파일을 넣어 <span style="display:block"> ... </span>있는지가 인하로 렌더링됩니다로 태그입니다. 추가 할 수있는 다른 스타일 속성이 많이 있습니다. 내가 좋아하는 것은 text-align:justify입니다.

  2. 에서 여기에 다음을 사용하여 기본 파일에있는 파일을 포함<iframe src="/path/to/file.md" seamless></iframe>

PS1. 이 솔루션은 모든 MarkDown 엔진 / 렌더에서 작동하지 않습니다. 예를 들어 Typora는 파일을 올바르게 렌더링했지만 Visual Studio Code는 그렇지 않았습니다. 다른 사람들이 다른 플랫폼과 경험을 공유 할 수 있다면 좋을 것입니다. 특히 GitHub와 GitLab에 대해 듣고 싶습니다 ...

PS2. 추가 조사에서 Typora, GitHub 및 Visual Studio 코드를 포함한 많은 플랫폼에서 올바르게 렌더링되지 않는 주요 비 호환성 문제가있는 것으로 보입니다. 문제가 해결 될 때까지 사용하지 마십시오. 나는 단지 토론을 위해 답을 삭제하지 않을 것이며 아마도 당신의 의견을 공유 할 수있을 것입니다.

PS3. 이 문제를 더 조사하기 위해 StackOverflowReddit 에서이 질문을 했습니다 .

PS4. 연구를 거친 후, AsciiDoc이 더 나은 문서화 옵션이라는 결론에 도달했습니다. 내장 기능이 포함되어 있으며 GitHub에 의해 렌더링되며 Atom 및 vscode와 같은 주요 코드 편집기에는 라이브 미리보기 확장 기능이 있습니다. Pandoc 또는 기타 도구를 사용하여 약간의 변경만으로 기존 MarkDown 코드를 AsciiDoc으로 자동 변환 할 수 있습니다.

PS5. 내장 기능이 포함 된 또 다른 간단한 마크 업 언어는 reStructuredText입니다. .. include:: inclusion.txt 표준 으로 구문 이 제공됩니다 . 실시간 미리보기 기능 이있는 ReText 편집기 도 있습니다.


1

나는 이것이 오래된 질문이라는 것을 알고 있지만이 효과에 대한 답변을 보지 못했습니다. 기본적으로 markdown 및 pandoc을 사용하여 파일을 pdf로 변환하는 경우 페이지 상단의 yaml 데이터에 다음을 포함 할 수 있습니다 이 같은:

---
header-includes:
- \usepackage{pdfpages}
output: pdf_document
---

\includepdf{/path/to/pdf/document.pdf}

# Section

Blah blah

## Section 

Blah blah

pandoc은 라텍스를 사용하여 모든 문서를 변환 header-includes하므로이 섹션에서는 pdfpages 패키지를 호출합니다. 그런 다음 포함 \includepdf{/path/to/pdf/document.pdf}하면 해당 문서에 포함 된 내용이 삽입됩니다. 또한이 방법으로 여러 pdf 파일을 포함 할 수 있습니다.

재미있는 보너스로 이것은 라텍스 파일과 같이 마크 다운 이외의 파일을 포함하려는 경우 종종 마크 다운을 사용하기 때문입니다. 이 답변을 다소 수정했습니다 . markdown 파일 markdown1.md가 있다고 가정하십시오.

---
title: Something meaning full
author: Talking head
---

그리고 두 개의 추가 라텍스 파일 document1은 다음과 같습니다.

\section{Section}

Profundity.

\subsection{Section}

Razor's edge.

그리고 다른 document2.tex는 다음과 같습니다.

\section{Section

Glah

\subsection{Section}

Balh Balh

markdown1.md에 document1.tex 및 document2.tex를 포함한다고 가정하면 markdown1.md에이 작업을 수행하면됩니다.

---
title: Something meaning full
author: Talking head
---

\input{/path/to/document1}
\input{/path/to/document2}

예를 들어 pandoc을 실행하십시오.

터미널에서 pandoc markdown1.md -o markdown1.pdf

최종 문서는 다음과 같습니다.

의미가 가득 찬

말하는 머리

부분

번영.

부분

면도기의 가장자리.

부분

글라

부분

발 발


0

Mac OS X에서 Marked 2를 사용합니다. 다른 파일을 포함하기 위해 다음 구문을 지원합니다.

<<[chapters/chapter1.md]
<<[chapters/chapter2.md]
<<[chapters/chapter3.md]
<<[chapters/chapter4.md]

슬프게도 구문을 이해하지 못하기 때문에 pandoc에 공급할 수 없습니다. 그러나 pandoc 명령 행을 구성하기 위해 구문을 제거하는 스크립트를 작성하는 것은 매우 쉽습니다.


7
쉽게 말하는 대신 스크립트를 사용하겠습니까? :)
toobulkeh

0

markdown-itjQuery를 사용하는 또 다른 HTML 기반의 클라이언트 측 솔루션 입니다. 아래는 마스터 문서로서 작은 HTML 래퍼로, 마크 다운 파일의 무제한 포함을 지원하지만 중첩 된 포함은 지원하지 않습니다. JS 주석에 설명이 제공됩니다. 오류 처리가 생략되었습니다.

<script src="/markdown-it.min.js"></script>
<script src="/jquery-3.5.1.min.js"></script>

<script> 
  $(function() {
    var mdit = window.markdownit();
    mdit.options.html=true;
    // Process all div elements of class include.  Follow up with custom callback
    $('div.include').each( function() {
      var inc = $(this);
      // Use contents between div tag as the file to be included from server
      var filename = inc.html();
      // Unable to intercept load() contents.  post-process markdown rendering with callback
      inc.load(filename, function () {
        inc.html( mdit.render(this.innerHTML) );
      });
  });
})
</script>
</head>

<body>
<h1>Master Document </h1>

<h1>Section 1</h1>
<div class="include">sec_1.md</div>
<hr/>
<h1>Section 2</h1>
<div class="include">sec_2.md</div>


-5

IMHO, 다음과 같이 입력 * .md 파일을 연결하여 결과를 얻을 수 있습니다.

$ pandoc -s -o outputDoc.pdf inputDoc1.md inputDoc2.md outputDoc3.md
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.