it-swarm.com.de

Markdown und das Hinzufügen mehrerer Dateien

Gibt es einen Markdown-Zweig, mit dem Sie auf andere Dateien verweisen können, z. B. eine Include-Datei? Insbesondere möchte ich eine separate Markdown-Datei mit Verknüpfungen erstellen, die ich oft, aber nicht immer anrufe (nennen Sie dies B.md). Wenn ich in der md-Datei, die ich schreibe (A.md), verlinke, würde ich Es gefällt mir, den Link aus der anderen Datei (B.md) zu ziehen, anstatt vom Ende der aktuellen Datei (A.md). 

142
David LaSpina

Die kurze Antwort lautet nein. Die lange Antwort lautet ja. :-)

Markdown wurde entwickelt, um Benutzern das Schreiben einfacher, lesbarer Texte zu ermöglichen, die leicht in ein einfaches HTML-Markup umgewandelt werden können. Es ist nicht wirklich das Layout von Dokumenten. Es gibt beispielsweise keine echte Möglichkeit, ein Bild nach rechts oder links auszurichten. Zu Ihrer Frage gibt es keinen Markdown-Befehl, der in einer beliebigen Version von Markdown einen einzelnen Link von einer Datei zu einer anderen enthält (soweit ich weiß). 

Am nächsten kommen Sie zu dieser Funktion. Pandoc . Pandoc ermöglicht das Zusammenführen von Dateien als Teil der Umwandlung, sodass Sie problemlos mehrere Dateien in einer einzigen Ausgabe rendern können. Wenn Sie beispielsweise ein Buch erstellen, können Sie Kapitel wie diese haben:

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

Sie können sie zusammenführen, indem Sie diesen Befehl in demselben Verzeichnis ausführen:

pandoc *.md > markdown_book.html

Da Pandoc vor der Übersetzung alle Dateien zusammenführt, können Sie Ihre Links wie folgt in die letzte Datei einfügen:

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

Ein Teil Ihres 01_preface.md könnte also so aussehen:

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

Und ein Teil Ihres 02_introduction.md könnte so aussehen:

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

So lange Ihre letzte Datei die Zeile enthält:

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

... der gleiche Befehl, der zuvor verwendet wurde, führt die Zusammenführung und Konvertierung durch, während dieser Link durchgehend enthalten ist. Stellen Sie einfach sicher, dass Sie am Anfang dieser Datei ein oder zwei Leerzeilen lassen. Die pandoc-Dokumentation besagt, dass eine leere Zeile zwischen Dateien eingefügt wird, die auf diese Weise zusammengeführt werden. Dies funktionierte jedoch nicht für mich ohne die leere Zeile.

172
Aaron Massey

Ich möchte nur erwähnen, dass Sie den Befehl cat verwenden können, um die Eingabedateien zu verketten, bevor Sie sie an markdown_py weiterleiten. Dies hat dieselbe Wirkung wie pandoc, wenn mehrere Eingabedateien eingehen.

cat *.md | markdown_py > youroutputname.html

funktioniert so ziemlich wie das pandoc Beispiel für die Python-Version von Markdown auf meinem Mac.

45
Marty Heyman

Sie können den Markdown-Präprozessor ( MarkdownPP ) tatsächlich verwenden. Mit dem hypothetischen Buchbeispiel aus den anderen Antworten würden Sie .mdpp-Dateien erstellen, die Ihre Kapitel darstellen. Die .mdpp-Dateien können dann die !INCLUDE "path/to/file.mdpp"-Direktive verwenden, die rekursiv die Direktive durch den Inhalt der referenzierten Datei in der endgültigen Ausgabe ersetzt.

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

Sie benötigen dann einen index.mdpp, der Folgendes enthält:

!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"

Um Ihr Buch zu rendern, führen Sie einfach den Präprozessor unter index.mdpp aus:

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

Vergessen Sie nicht, im readme.mdpp im Repository MarkdownPP nach einer Darstellung von Präprozessorfunktionen zu suchen, die für größere Dokumentationsprojekte geeignet sind.

20
ninegrid

Meine Lösung ist die Verwendung von m4. Es wird auf den meisten Plattformen unterstützt und ist im Paket binutils enthalten.

Fügen Sie zunächst ein Makro changequote() in die Datei ein, um die Anführungszeichen nach Ihren Wünschen zu ändern (Standardeinstellung ist `'). Das Makro wird entfernt, wenn die Datei verarbeitet wird. 

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

In der Kommandozeile:

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

Vor kurzem habe ich so etwas in Node geschrieben, genannt markdown-include , mit dem Sie Markdown-Dateien mit der C-Stil-Syntax einfügen können.

#include "my-file.md"

Ich glaube, das passt gut zu der Frage, die Sie stellen. Ich weiß, dass es ein altes ist, aber ich wollte es wenigstens aktualisieren.

Sie können dies in jede gewünschte Markdown-Datei einfügen. Diese Datei kann auch mehr Include-Dateien enthalten, und markdown-include erstellt einen internen Link und erledigt die gesamte Arbeit für Sie.

Sie können es über npm herunterladen.

npm install -g markdown-include
11
Sethen

Ich verwende eine includes.txt - Datei mit all meinen Dateien in der richtigen Reihenfolge und führe Pandoc folgendermaßen aus:

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

Klappt wunderbar!

5
Mike Mitterer

Tatsächlich können Sie \input{filename} und \include{filename} verwenden. Hierbei handelt es sich um Latexbefehle Direkt in Pandoc, da fast alle html- und latex-Syntax unterstützt werden.

Aber Achtung, die enthaltene Datei wird als latex-Datei behandelt. Sie können jedoch Ihre markdown mit latex leicht zu Pandox kompilieren.

3
Wung Hugh

Asciidoc ( http://www.methods.co.nz/asciidoc/ ) ist eigentlich ein Preisnachlass für Steroide. Insgesamt werden Asciidoc und Markdown sehr ähnlich aussehen und es ist ziemlich einfach zu wechseln. Ein großer Vorteil von Asciidoc gegenüber Markdown ist, dass es bereits Include-Dateien für andere Asciidoc-Dateien, aber auch für jedes beliebige Format unterstützt. Sie können sogar Dateien, die auf Zeilennummern oder Tags basieren, teilweise in die enthaltenen Dateien aufnehmen.

Das Einbeziehen anderer Dateien ist eine echte Lebensrettung, wenn Sie Dokumente schreiben.

Sie können beispielsweise eine ASCII-Datei mit folgendem Inhalt haben:

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

und pflegen Sie Ihre Probe in script.pl

Und ich bin sicher, Sie werden sich fragen, ja, Github unterstützt auch Asciidoc.

3
Wilfried Kopp

Multimarkdown hat dies nativ. Es nennt sich file transclusion :

{{some_other_file.txt}}

ist alles was es braucht. Komischer Name, aber alle Felder werden angekreuzt.

2
eff

Ich bin tatsächlich überrascht, dass niemand auf dieser Seite HTML-Lösungen angeboten hat. Soweit ich verstanden habe, können MarkDown-Dateien einen großen Teil (wenn nicht alle) von HTML-Tags enthalten. Also folge diesen Schritten:

  1. Von hier : Fügen Sie Ihre MarkDown-Dateien in <span style="display:block"> ... </span>-Tags ein, um sicherzustellen, dass sie als Markdown gerendert werden. Sie haben eine ganze Reihe weiterer Stileigenschaften, die Sie hinzufügen können. Der, den ich mag, ist der text-align:justify.

  2. Von hier : Fügen Sie die Dateien mit dem <iframe src="/path/to/file.md" seamless></iframe> in Ihre Hauptdatei ein.

P.S.1. Diese Lösung funktioniert nicht auf allen MarkDown-Engines/Renderern. Beispielsweise hat Typora die Dateien korrekt gerendert, Visual Studio Code jedoch nicht. Es wäre großartig, wenn andere ihre Erfahrungen mit anderen Plattformen teilen könnten. Insbesondere würde ich gerne etwas über GitHub und GitLab erfahren ...

P.S.2. Weitere Untersuchungen haben ergeben, dass auf vielen Plattformen, einschließlich Typora-, GitHub- und Visual Studio-Code, erhebliche Inkompatibilitätsprobleme auftreten. Bitte benutze dies nicht, bis ich sie gelöst habe. Ich werde die Antwort nicht nur zum Zwecke der Diskussion löschen und wenn Sie vielleicht Ihre Meinung teilen können.

P.S.3. Um dieses Problem weiter zu untersuchen, habe ich diese Fragen gestellt hier bei StackOverflow und hier bei Reddit .

P.S.4. Nach einigem Studium bin ich zu dem Schluss gekommen, dass AsciiDoc momentan eine bessere Option für die Dokumentation ist. Es verfügt über eine integrierte Include-Funktion, wird von GitHub gerendert und wichtige Code-Editoren wie Atom und vscode verfügen über Erweiterungen für die Live-Vorschau. Sie können Pandoc oder andere Tools verwenden, um vorhandenen MarkDown-Code mit geringfügigen Änderungen automatisch in AsciiDoc zu konvertieren.

P.S.5. Eine weitere schlanke Auszeichnungssprache mit integrierter Include-Funktion ist reStructuredText. Es wird standardmäßig mit .. include:: inclusion.txt-Syntax geliefert. Es gibt einen ReText-Editor mit Live-Vorschau.

2
Foad

Ich denke, wir sollten eine neue Datei-Einfügungssyntax übernehmen (damit werden nicht die Codeblöcke durcheinandergebracht, ich denke, die Einbeziehung im C-Stil ist völlig falsch), und ich schrieb ein kleines Werkzeug in Perl, das _ benannte cat.pl , weil wie cat funktioniert (cat a.txt b.txt c.txt führt drei -Dateien zusammen), aber es werden Dateien in der Tiefe und nicht in der Breite zusammengeführt. Wie benutzt man?

$ Perl cat.pl <your file>

Die Syntax im Detail lautet:

  • rekursive Include-Dateien: @include <-=path=
  • fügen Sie einfach einen hinzu: %include <-=path=

Es kann die Datei-Inklusion loops richtig behandeln (wenn a.txt <- b.txt, b.txt <- a.txt, was erwarten Sie dann?).

Beispiel:

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

Weitere Beispiele finden Sie unter https://github.com/district10/cat/blob/master/tutorial_cat.pl_.md .

Ich habe auch eine Java-Version geschrieben, die einen identischen Effekt hat (nicht gleich, aber nahe).

1
dvorak4tzx

Ich verwende Marked 2 unter Mac OS X. Es unterstützt die folgende Syntax für das Einschließen anderer Dateien. 

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

Leider kann man das nicht Pandoc zuführen, da es die Syntax nicht versteht. Das Erstellen eines Skripts zum Entfernen der Syntax zum Erstellen einer Pandoc-Befehlszeile ist jedoch leicht genug.

0
paxos1977