インクルードファイルなど、他のファイルを参照できるマークダウンフォークはありますか?具体的には、頻繁に呼び出されるが常にではない(このB.mdを呼び出す)リンクを含む個別のマークダウンファイルを作成し、次に、書いているmdファイル(A.md)で参照によってリンクすると、現在のファイルの末尾(A.md)からではなく、他のファイル(B.md)からリンクをプルするのが好きです。
インクルードファイルなど、他のファイルを参照できるマークダウンフォークはありますか?具体的には、頻繁に呼び出されるが常にではない(このB.mdを呼び出す)リンクを含む個別のマークダウンファイルを作成し、次に、書いているmdファイル(A.md)で参照によってリンクすると、現在のファイルの末尾(A.md)からではなく、他のファイル(B.md)からリンクをプルするのが好きです。
回答:
短い答えはノーです。長い答えはイエスです。:-)
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
...以前に使用したのと同じコマンドが、そのリンク全体を含めてマージと変換を実行します。そのファイルの先頭に1行または2行の空白を残すようにしてください。pandocのドキュメントでは、それがこのようにマージされたファイルの間に空白行を追加することを言いますが、これは空白行せずに私のために動作しませんでした。
pandoc *.md > markdown_book.html
結果はpandoc: *.md: openfile: invalid argument (Invalid argument)
-指定した構文をサポートしていないようです。
cat
コマンドを使用して入力ファイルを連結する前に連結して、複数の入力ファイルが入ってくる場合とmarkdown_py
同じ効果があることを述べておきpandoc
ます。
cat *.md | markdown_py > youroutputname.html
Mac上のMarkdownのPythonバージョンの上記のpandocの例とほとんど同じように機能します。
cat *.md
、柔軟性のないファイル命名規則を意味します。この規則は、必ずしも再帰的なインクルードを禁止するだけでなく、大規模なドキュメントプロジェクトの場合、新しいファイルをミックスに追加するのは面倒です。多くのカウントと名前の変更を行う必要があります。値下げプロジェクトは、2010年まで以来、この非常に目的のためのプリプロセッサを持っていた
実際にMarkdown Preprocessor(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.mdpp
は、MarkdownPPリポジトリのを参照することを忘れないでください。
私の解決策は、m4を使用することです。ほとんどのプラットフォームでサポートされており、binutilsパッケージに含まれています。
まずchangequote()
、ファイルにマクロを含めて、引用文字を希望するものに変更します(デフォルトは `'です)。マクロは、ファイルが処理されるときに削除されます。
changequote(`{{', `}}')
include({{other_file}})
コマンドラインで:
m4 -I./dir_containing_other_file/ input.md > _tmp.md
pandoc -o output.html _tmp.md
m4
はほとんど知られていませんが、そのような一般的なインクルードのニーズに関しては、確かに非常に強力なツールです。ドキュメントで言及するのに十分なほど、それは「かなり中毒性がある」可能性があります。
最近、私はこのようなマークダウン-インクルードと呼ばれるノードでこのようなものを書きました。これにより、Cスタイルの構文でマークダウンファイルを含めることができます。
#include "my-file.md"
これはあなたの質問とうまく一致していると思います。これは古いものですが、少なくとも更新したかったのです。
これを任意のマークダウンファイルに含めることができます。そのファイルには、より多くのインクルードとmarkdown-includeも含めることができますことができ、は内部リンクを作成し、すべての作業を行います。
からダウンロードできます npm
npm install -g markdown-include
Multimarkdownはこれをネイティブに持っています。それをファイル転置と呼びます:
{{some_other_file.txt}}
それが取るすべてです。奇妙な名前ですが、すべてのボックスをチェックします。
私が使用してincludes.txt
私はこのようなpandocを実行し、正しい順序ですべての私のファイルを使用してファイルを:
pandoc -s $(cat includes.txt) --quiet -f markdown -t html5 --css pandoc.css -o index.html
魅力的な作品!
glob
ファイルに番号を付けない限り、メソッドを使用して実行することはできません。
Asciidoc(http://www.methods.co.nz/asciidoc/)は、実際にはステロイドの値下げです。全体として、AscidocとMarkdownは非常によく似ており、切り替えるのはかなり簡単です。巨大なマークダウンに対するAsciidoc利点は、他のAsciidocファイルだけでなく、任意の形式でもインクルードがサポートされていることです。含まれるファイル内の行番号またはタグに基づいてファイルを部分的に含めることもできます。
他のファイルをインクルードすることは、ドキュメントを書くときに本当に救命です。
たとえば、次のような内容のasciidocファイルを作成できます。
// [source,perl]
// ----
// include::script.pl[]
// ----
サンプルを維持します script.pl
Githubはasciidocもサポートしています。
私たちはより良いと思う新しいファイルのインクルードの構文を採用(そのコードブロックではない台無しに、私はCスタイルのインクルージョンが完全に間違っていると思いますが)、そして私が命名、Perlで小さなツールを書いたcat.pl
ことがあるため、同じように動作しcat
(cat a.txt b.txt c.txt
マージします3つのファイル)ですが、幅ではなく深さでファイルをマージします。使い方?
$ 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.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バージョンも作成しました(同じではありませんが、近いです)。
<<[include_file.md]
(macOSでマーク2):gist.github.com/district10/d46a0e207d888d0526aef94fb8d8998c
@
pandoc-citeproc
( " @Darwin1859
"など)の引用に使用されることです。
このページの誰もHTMLソリューションを提供していないことに私は実際に驚いています。MarkDownファイルには、HTMLタグの広い部分(すべてではないにしても)を含めることができることを理解しました。したがって、次の手順に従います。
ここから:MarkDownファイルを<span style="display:block"> ... </span>
タグに配置して、確実にマークダウンとしてレンダリングされるようにします。追加できる他の多くのスタイルプロパティがあります。私が好きなのはtext-align:justify
です。
ここから:を使用してメインファイルにファイルを含めます<iframe src="/path/to/file.md" seamless></iframe>
PS1。このソリューションは、すべてのMarkDownエンジン/レンダリングで機能するわけではありません。たとえば、Typoraはファイルを正しくレンダリングしましたが、Visual Studio Codeはレンダリングしませんでした。他のプラットフォームで他のプラットフォームと自分の経験を共有できればすばらしいと思います。特にGitHubとGitLabについて知りたいのですが...
PS2。さらなる調査により、Typora、GitHub、Visual Studioコードを含む多くのプラットフォームでこれが適切にレンダリングされないことにつながる、主要な非互換性の問題があるようです。解決するまで使用しないでください。話し合いのため、また、ご意見をお聞かせいただければ、回答は削除いたしません。
PS3。この問題をさらに調査するために、StackOverflowとRedditでこの質問をしました。
PS4。いくつかの検討を重ねた結果、現時点ではAsciiDocがドキュメンテーションのより良いオプションであるという結論に達しました。組み込みのインクルード機能が付属し、GitHubによってレンダリングされます。Atomやvscodeなどの主要なコードエディターには、ライブプレビュー用の拡張機能があります。Pandocまたは他のツールを使用して、マイナーな変更を加えて既存のMarkDownコードをAsciiDocに自動的に変換できます。
PS5。組み込み機能を備えたもう1つの軽量マークアップ言語はreStructuredText
です。.. include:: inclusion.txt
標準で構文が付属しています。ありReTextエディタだけでなく、ライブプレビューでは。
私はこれが古い質問であることを知っていますが、この影響に対する回答は見ていません:基本的に、マークダウンとパンドックを使用してファイルをPDFに変換している場合、ページの上部にあるyamlデータに、このようなもの:
---
header-includes:
- \usepackage{pdfpages}
output: pdf_document
---
\includepdf{/path/to/pdf/document.pdf}
# Section
Blah blah
## Section
Blah blah
pandocはlatexを使用してすべてのドキュメントを変換するため、このheader-includes
セクションではpdfpagesパッケージを呼び出します。次に、インクルード\includepdf{/path/to/pdf/document.pdf}
すると、そのドキュメントにインクルードされているものは何でも挿入されます。さらに、この方法で複数のPDFファイルを含めることができます。
おもしろいボーナスとして、これは、ラテックスファイルなど、マークダウン以外のファイルを含める場合に、マークダウンをよく使用するためです。私はこの答えを多少変更しました。マークダウンファイルmarkdown1.mdがあるとします。
---
title: Something meaning full
author: Talking head
---
そして、次のような2つの追加のラテックスファイルdocument1があります。
\section{Section}
Profundity.
\subsection{Section}
Razor's edge.
そして別のdocument2.texは次のようになります。
\section{Section
Glah
\subsection{Section}
Balh Balh
document1.texとdocument2.texをmarkdown1.mdに含めたいと仮定すると、これをmarkdown1.mdに行うだけです。
---
title: Something meaning full
author: Talking head
---
\input{/path/to/document1}
\input{/path/to/document2}
たとえば、パンドックを実行します
ターミナルで pandoc markdown1.md -o markdown1.pdf
最終的なドキュメントは次のようになります。
豊富さ。
剃刀の刃。
グラ
バルバル
私はMac OS XでMarked 2を使用しています。他のファイルを含めるために次の構文をサポートしています。
<<[chapters/chapter1.md]
<<[chapters/chapter2.md]
<<[chapters/chapter3.md]
<<[chapters/chapter4.md]
残念ながら、構文を理解していないため、これをpandocにフィードすることはできません。ただし、スクリプトを記述して構文を削除し、pandocコマンドラインを作成するのは簡単です。
markdown-itとjQueryを使用した、別の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>