web-dev-qa-db-ja.com

Markdownと複数のファイルを含める

他のファイル、インクルードファイルなどを参照できるマークダウンフォークはありますか?具体的には、頻繁に呼び出すリンクを含む別個のマークダウンファイルを作成しますが、常にではありません(このB.mdを呼び出します)。現在のファイル(A.md)の最後からではなく、他のファイル(B.md)からリンクをプルするようにします。

161
David LaSpina

短い答えはノーです。長い答えはイエスです。 :-)

Markdownは、人々が簡単な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

...以前に使用したのと同じコマンドが、リンク全体を含めながらマージと変換を実行します。そのファイルの先頭に空白行または2行を残すようにしてください。 pandoc documentation は、この方法でマージされたファイル間に空白行を追加することを示していますが、空白行がないとこれは機能しませんでした。

187
Aaron Massey

catコマンドを使用して、入力ファイルをmarkdown_pyに連結する前に連結することができます。これは、入力される複数の入力ファイルでpandocと同じ効果があります。

cat *.md | markdown_py > youroutputname.html

私のMac上のPythonバージョンのMarkdownの上記のpandocの例とほとんど同じように機能します。

48
Marty Heyman

実際にマークダウンプリプロセッサを使用できます( 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

大規模なドキュメンテーションプロジェクトに適したプリプロセッサ機能の説明については、 MarkdownPP リポジトリの readme.mdpp を確認することを忘れないでください。

23
ninegrid

私の解決策はm4を使用することです。ほとんどのプラットフォームでサポートされており、binutilsパッケージに含まれています。

最初にマクロchangequote()をファイルにインクルードして、引用文字を好みのものに変更します(デフォルトは `')。ファイルが処理されると、マクロは削除されます。

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

コマンドラインで:

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

つい最近、Nodeに markdown-include という名前のこのようなものを書きました。これにより、Cスタイルの構文でマークダウンファイルを含めることができます。

#include "my-file.md"

これはあなたが尋ねている質問とうまく調和していると思います。私はこれが古いものであることを知っていますが、少なくとも更新したかったです。

これを任意のマークダウンファイルに含めることができます。そのファイルにはさらにインクルードを含めることができ、markdown-includeは内部リンクを作成し、すべての作業を行います。

npmからダウンロードできます

npm install -g markdown-include
13
Sethen

Multimarkdown はこれをネイティブに持っています。それを呼び出します ファイルトランスクルージョン

{{some_other_file.txt}}

必要なのはそれだけです。奇妙な名前ですが、すべてのボックスにチェックマークが付いています。

7
eff

includes.txtファイルを使用し、すべてのファイルを正しい順序で使用して、次のようにpandocを実行します。

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

チャームのように機能します!

5
Mike Mitterer

実際、ほとんどすべてのPandocおよびhtml構文をサポートしているため、latexで直接ラテックスコマンドである\input{filename}および\include{filename}を使用できます。

ただし、含まれているファイルはlatexファイルとして扱われることに注意してください。ただし、markdownを使用してlatexPandoxに簡単にコンパイルできます。

5
Wung Hugh

Asciidoc( http://www.methods.co.nz/asciidoc/ )は、実際にはステロイドの値下げです。全体として、アスキードックとマークダウンは非常に似ており、切り替えるのはかなり簡単です。 hugeマークダウンに対するAsciidocの利点は、他のAsciidocファイルに対してだけでなく、任意の形式に対してもインクルードをサポートしていることです。インクルードファイル内の行番号またはタグに基づいて、ファイルを部分的にインクルードすることもできます。

ドキュメントを書くとき、他のファイルを含めることは本当に命の恩人です。

たとえば、次のような内容のasciidocファイルを作成できます。

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

script.plでサンプルを管理します

そして、きっと疑問に思うでしょう。Githubはasciidocもサポートしています。

3
Wilfried Kopp

新しいファイルインクルード構文を採用する方が良いと思います(コードブロックを台無しにしないで、Cスタイルのインクルードはまったく間違っていると思います)、私はPerlで小さなツールを書きました。 cat.pl の命名。これはcatcat a.txt b.txt c.txtは3つのファイルをマージします)のように動作しますが、ファイルをマージしますin depthではなく、in widthではありません。使い方?

$ Perl cat.pl <your file>

構文の詳細は次のとおりです。

  • 再帰的なインクルードファイル:@include <-=path=
  • 1つだけ含める:%include <-=path=

ファイルのインクルードloopsを適切に処理できます(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.txt、c.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バージョンも作成しました。

3
dvorak4tzx

実際、このページの誰もHTMLソリューションを提供していないことに驚いています。 MarkDownファイルには、HTMLタグの広い部分(すべてではないにしても)を含めることができることを理解しています。したがって、次の手順に従ってください。

  1. From here :MarkDownファイルを<span style="display:block"> ... </span>タグに入れて、それらがマークダウンとしてレンダリングされるようにします。追加できるスタイルプロパティは他にもたくさんあります。私が好きなのはtext-align:justifyです。

  2. From here<iframe src="/path/to/file.md" seamless></iframe>を使用してメインファイルにファイルを含めます

P.S.1。このソリューションは、すべてのMarkDownエンジン/レンダリングで動作しません。たとえば、Typoraはファイルを正しくレンダリングしましたが、Visual Studio Codeはレンダリングしませんでした。他の人が自分の経験を他のプラットフォームと共有できたら素晴らしいと思います。特に、GitHubとGitLabについてお聞きしたいのですが...

P.S.2。さらなる調査では、Typora、GitHub、Visual Studioコードを含む多くのプラットフォームでこれが適切にレンダリングされない原因となる大きな非互換性の問題があるようです。解決するまでこれを使用しないでください。議論のためだけに答えを削除することはしませんし、もしあなたがあなたの意見を共有できるなら。

P.S.3。この問題をさらに調査するために、この質問をしました ここでStackOverflow および ここでReddit

P.S.4。いくつかの研究を経て、今のところAsciiDocが文書化のより良いオプションであるという結論に達しました。インクルード機能が組み込まれており、GitHubによってレンダリングされ、Atomやvscodeなどの主要なコードエディターにはライブプレビュー用の拡張機能があります。 Pandocまたは他のツールを使用して、既存のMarkDownコードをわずかな変更を加えて自動的にAsciiDocに変換できます。

P.S.5。インクルード機能が組み込まれた別の軽量マークアップ言語は、reStructuredTextです。標準で.. include:: inclusion.txt構文が付属しています。 ReText editor があり、ライブプレビューもあります。

2
Foad

Mac OS XではMarked 2を使用しています。他のファイルを含めるために次の構文をサポートしています。

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

残念ながら、構文を理解していないため、これをpandocにフィードすることはできません。ただし、構文を削除してpandocコマンドラインを作成するスクリプトを作成するのは簡単です。

0
paxos1977