Gibt es eine Markdown-Gabel, mit der Sie auf andere Dateien verweisen können, beispielsweise auf eine Includes-Datei? Insbesondere möchte ich eine separate Markdown-Datei mit Links erstellen, die ich häufig, aber nicht immer aufrufe (nennen Sie diese B.md). Wenn ich dann in der md-Datei, die ich schreibe (A.md), durch Verweisen verlinke, würde ich Es gefällt mir, den Link aus der anderen Datei (B.md) und nicht aus dem Ende der aktuellen Datei (A.md) zu ziehen.
197
Antworten:
Die kurze Antwort lautet nein. Die lange Antwort lautet ja. :-)
Markdown wurde entwickelt, um Benutzern das Schreiben von einfachem, lesbarem Text zu ermöglichen, der leicht in ein einfaches HTML-Markup konvertiert werden kann. Das Dokumentlayout funktioniert nicht wirklich. Zum Beispiel gibt es keine echte Möglichkeit, ein Bild nach rechts oder links auszurichten. In Bezug auf Ihre Frage gibt es keinen Markdown-Befehl, um einen einzelnen Link von einer Datei zu einer anderen in eine Markdown-Version aufzunehmen (soweit ich weiß).
Am nächsten an dieser Funktionalität ist Pandoc . Mit Pandoc können Sie Dateien als Teil der Umwandlung zusammenführen, wodurch Sie problemlos mehrere Dateien in einer einzigen Ausgabe rendern können. Wenn Sie beispielsweise ein Buch erstellen, können Sie folgende Kapitel haben:
Sie können sie zusammenführen, indem Sie diesen Befehl im selben Verzeichnis ausführen:
Da pandoc alle Dateien vor der Übersetzung zusammenführt, können Sie Ihre Links wie folgt in die letzte Datei aufnehmen:
Ein Teil von Ihnen
01_preface.md
könnte also so aussehen:Und ein Teil von Ihnen
02_introduction.md
könnte so aussehen:Solange Ihre letzte Datei die Zeile enthält:
... der gleiche Befehl, der zuvor verwendet wurde, führt die Zusammenführung und Konvertierung durch, während dieser Link durchgehend eingeschlossen wird. Stellen Sie einfach sicher, dass Sie am Anfang dieser Datei ein oder zwei Leerzeilen lassen. In der Pandoc-Dokumentation heißt es, dass zwischen Dateien, die auf diese Weise zusammengeführt werden, eine Leerzeile eingefügt wird , aber ohne die Leerzeile hat dies bei mir nicht funktioniert.
quelle
pandoc *.md > markdown_book.html
führt zupandoc: *.md: openfile: invalid argument (Invalid argument)
- es scheint nicht die von Ihnen angegebene Syntax zu unterstützen.Ich möchte nur erwähnen, dass Sie den
cat
Befehl verwenden können, um die Eingabedateien zu verketten, bevor Sie sie weiterleiten. Diesmarkdown_py
hat den gleichen Effekt wiepandoc
bei mehreren eingehenden Eingabedateien.funktioniert ziemlich genau wie das obige Pandoc- Beispiel für die Python-Version von Markdown auf meinem Mac.
quelle
cat *.md
impliziert eine unflexible Dateinamenskonvention. Diese Konvention würde nicht nur rekursive Includes zwangsläufig verbieten, bei größeren Dokumentationsprojekten wäre es schmerzhaft, neue Dateien in den Mix aufzunehmen. Sie müssten viel zählen und umbenennen. Das Markdown-Projekt hat seit dem Jahr 2010 einen Präprozessor für diesen Zweck.Sie können den Markdown-Präprozessor ( MarkdownPP ) tatsächlich verwenden . Wenn Sie das hypothetische Buchbeispiel aus den anderen Antworten verwenden, erstellen Sie
.mdpp
Dateien, 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.Sie benötigen dann eine
index.mdpp
, die Folgendes enthält:Um Ihr Buch zu rendern, führen Sie einfach den Präprozessor aus auf
index.mdpp
:Vergessen Sie nicht,
readme.mdpp
im MarkdownPP- Repository nach Informationen zu Präprozessorfunktionen zu suchen, die für größere Dokumentationsprojekte geeignet sind.quelle
Meine Lösung ist die Verwendung von m4. Es wird auf den meisten Plattformen unterstützt und ist im binutils-Paket enthalten.
Fügen Sie zunächst ein Makro
changequote()
in die Datei ein, um die Anführungszeichen nach Ihren Wünschen zu ändern (Standard ist `'). Das Makro wird entfernt, wenn die Datei verarbeitet wird.Auf der Kommandozeile:
quelle
m4
ist kaum bekannt, aber in der Tat ein unglaublich leistungsfähiges Werkzeug, wenn es um solche generischen Einschlussbedürfnisse geht. Genug, um die Dokumentation erwähnen zu lassen, dass sie "ziemlich süchtig machen" kann.Erst kürzlich habe ich in Node so etwas mit dem Namen markdown-include geschrieben , mit dem Sie Markdown-Dateien mit C-Syntax einfügen können, wie folgt:
Ich glaube, das passt gut zu der Frage, die Sie stellen. Ich weiß, dass dies ein altes ist, aber ich wollte es zumindest aktualisieren.
Sie können dies in jede gewünschte Markdown-Datei aufnehmen. Diese Datei kann auch mehr Includes enthalten, und Markdown-Include stellt einen internen Link her und erledigt die gesamte Arbeit für Sie.
Sie können es über herunterladen
npm
quelle
Multimarkdown hat dies nativ. Es nennt es Datei-Transklusion :
ist alles was es braucht. Seltsamer Name, aber alle Kästchen ankreuzen.
quelle
Ich verwende eine
includes.txt
Datei mit allen meinen Dateien in der richtigen Reihenfolge, in der ich Pandoc wie folgt ausführe:pandoc -s $(cat includes.txt) --quiet -f markdown -t html5 --css pandoc.css -o index.html
Klappt wunderbar!
quelle
glob
Methoden nur durchgeführt, wenn Sie Dateien nummerieren.In der Tat können Sie
\input{filename}
und\include{filename}
das sind Latex-Befehle, direkt inPandoc
, weil es fast allehtml
undlatex
Syntax unterstützt.Beachten Sie jedoch, dass die enthaltene Datei als
latex
Datei behandelt wird. Aber Sie können Ihre kompilierenmarkdown
zulatex
mitPandox
leicht.quelle
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 Includes für andere Asciidoc-Dateien, aber auch für jedes gewünschte Format unterstützt. Sie können sogar teilweise Dateien basierend auf Zeilennummern oder Tags in Ihre enthaltenen Dateien aufnehmen.
Das Einschließen anderer Dateien ist wirklich ein Lebensretter, wenn Sie Dokumente schreiben.
Sie können beispielsweise eine Asciidoc-Datei mit folgenden Inhalten haben:
und pflegen Sie Ihre Probe in
script.pl
Und ich bin sicher, Sie werden sich fragen, ja, Github unterstützt auch Asciidoc.
quelle
Ich denke, wir sollten besser eine neue Syntax für die Aufnahme von Dateien verwenden (also nicht mit Codeblöcken durcheinander bringen, ich denke, die Aufnahme im C-Stil ist völlig falsch), und ich habe ein kleines Tool in Perl geschrieben, das benennt
cat.pl
, weil es so funktioniertcat
(cat a.txt b.txt c.txt
wird zusammengeführt) drei Dateien), aber es werden Dateien in der Tiefe und nicht in der Breite zusammengeführt . Wie benutzt man?Die Syntax im Detail lautet:
@include <-=path=
%include <-=path=
Es kann richtig File Inclusion behandeln Loops (- b.txt, b.txt <- a.txt, dann , was Sie erwarten? Wenn a.txt <).
Beispiel:
a.txt:
b.txt:
perl cat.pl a.txt > c.txt
, c.txt:Weitere Beispiele finden Sie unter https://github.com/district10/cat/blob/master/tutorial_cat.pl_.md .
Ich habe auch eine Java-Version mit identischem Effekt geschrieben (nicht gleich, aber nah).
quelle
<<[include_file.md]
(Markiert 2 unter macOS): gist.github.com/district10/d46a0e207d888d0526aef94fb8d8998c@
ist, wird für Zitate mitpandoc-citeproc
(zB "@Darwin1859
") verwendet.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. Befolgen Sie also diese Schritte:
Von hier aus : Fügen Sie Ihre MarkDown-Dateien in
<span style="display:block"> ... </span>
Tags ein, um sicherzustellen, dass sie als Markdown gerendert werden. Sie haben viele andere Stileigenschaften, die Sie hinzufügen können. Der, den ich mag, ist dertext-align:justify
.Von hier aus : Fügen Sie die Dateien mit dem in Ihre Hauptdatei ein
<iframe src="/path/to/file.md" seamless></iframe>
PS1. Diese Lösung funktioniert nicht auf allen MarkDown-Engines / Renderings. 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 hören ...
PS2. Bei weiteren Untersuchungen scheint es schwerwiegende Inkompatibilitätsprobleme zu geben, die dazu führen, dass dies auf vielen Plattformen, einschließlich Typora-, GitHub- und Visual Studio-Code, nicht ordnungsgemäß gerendert wird. Bitte verwenden Sie dies nicht, bis ich sie gelöst habe. Ich werde die Antwort nicht nur zur Diskussion löschen und wenn Sie vielleicht Ihre Meinung teilen können.
PS3. Um dieses Problem weiter zu untersuchen, habe ich diese Fragen hier auf StackOverflow und hier auf Reddit gestellt .
PS4. Nach einigen Studien kam ich zu dem Schluss, dass AsciiDoc im Moment eine bessere Option für die Dokumentation ist. Es verfügt über eine integrierte Include-Funktionalität, 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.
PS5. Eine weitere einfache Markup-Sprache mit integrierter Include-Funktionalität ist
reStructuredText
. Es kommt.. include:: inclusion.txt
standardmäßig mit Syntax. Es gibt auch einen ReText-Editor mit Live-Vorschau.quelle
Ich weiß, dass dies eine alte Frage ist, aber ich habe keine Antworten auf diesen Effekt gesehen: Wenn Sie Ihre Datei mit Markdown und Pandoc in PDF konvertieren, können Sie sie in Ihre Yaml-Daten oben auf der Seite aufnehmen etwas wie das:
Da Pandoc Latex verwendet, um alle Ihre Dokumente zu konvertieren,
header-includes
ruft der Abschnitt das Paket pdfpages auf. Wenn Sie dann einschließen\includepdf{/path/to/pdf/document.pdf}
, wird alles eingefügt, was in diesem Dokument enthalten ist. Darüber hinaus können Sie auf diese Weise mehrere PDF-Dateien einfügen.Als Spaßbonus, und das nur, weil ich oft Markdown verwende, wenn Sie andere Dateien als Markdown einschließen möchten, zum Beispiel Latexdateien. Ich habe diese Antwort etwas geändert . Angenommen, Sie haben eine Markdown-Datei markdown1.md:
Und zwei zusätzliche Latexdateien document1, die so aussehen:
Und noch eine, document2.tex, die so aussieht:
Angenommen, Sie möchten document1.tex und document2.tex in markdown1.md aufnehmen, würden Sie dies nur für markdown1.md tun
Führen Sie Pandoc darüber, z
im Terminal
pandoc markdown1.md -o markdown1.pdf
Ihr endgültiges Dokument sieht ungefähr so aus:
Etwas, das voll bedeutet
Sprechender Kopf
Sektion
Tiefe.
Sektion
Messers Schneide.
Sektion
Glah
Sektion
Balh Balh
quelle
Ich verwende Marked 2 unter Mac OS X. Es unterstützt die folgende Syntax zum Einschließen anderer Dateien.
Leider können Sie das nicht an pandoc weitergeben, da es die Syntax nicht versteht. Das Schreiben eines Skripts zum Entfernen der Syntax zum Erstellen einer Pandoc-Befehlszeile ist jedoch einfach genug.
quelle
Eine weitere HTML-basierte clientseitige Lösung mit Markdown-it und jQuery . Unten finden Sie einen kleinen HTML-Wrapper als Masterdokument, der unbegrenzte Einschlüsse von Markdown-Dateien unterstützt, jedoch keine verschachtelten Einschlüsse. Erläuterungen finden Sie in den JS-Kommentaren. Fehlerbehandlung entfällt.
quelle
IMHO, Sie können Ihr Ergebnis erhalten, indem Sie Ihre Eingabe * .md-Dateien wie folgt verketten:
quelle