2013-08-26 14 views
17

Gibt es eine Möglichkeit, ein Abschriften-Dokument (oder dessen Unteraromen - Ich benutze PanDoc) in ein anderes Dokument einzubetten, außer für die Verwendung eines jQuery().load(url)?Ein Abschriften-Dokument in ein anderes einbetten

Ich hätte gerne ein Dokument, das z. main.md, chapter1.md, chapter2.md, mit main.md laden chapter1.md und chapter2.md automatisch.

main.md wird Text zwischen den beiden Kapiteln haben, z.B.

main.md:

Some opening text... 
... 
[chapter1.md] 

Some additional text... 
... 
[chapter2.md] 
... 
something else. 

So kann ich kein cat *.md > final.md Ansatz

Antwort

8

Markdown verwenden, indem Sie sich eine Notation für einschließlich der Dateien fehlt, die eher, dass die Schrauben.

pandoc hat ein Beispiel für die Verwendung eines benutzerdefinierten Haskell-Filters auf Code-Blöcke, um Dateien einzuschließen, aber dies a. hinterlässt einen Codeblock um den Text und (wichtiger) b. analysiert die neue Datei nicht als Markdown, und ehrlich gesagt ist meine Haskell nicht in der Lage, das zu beheben.

Sie können jedoch dies erreichen, indem Sie einen Vor-Prozess-Durchlauf mit *. Ich gehe davon aus, dass jedes Include auf einer Zeile des oben gezeigten Formulars steht.

perl -ne 's/^\[(.+)\].*/`cat $1`/e;print' main.md > final.md 

* I Perl greift nicht gern haben, aber sed fehlt die Fähigkeit, aus einer Datei zu lesen, ein Übereinstimmungsmuster um den Namen zu bestimmen, verwendet wird.

+0

Perfekt dank @OliverMatthews. Ich kann Python anstelle von Perl verwenden, aber ein Vorlauf klingt nach einer guten Idee. –

+0

Nach zehn Stunden investiert, um eine praktikable und schnelle Methode für die Implementierung in Pandoc zu suchen, ist dies endlich was funktioniert. Vielen Dank! – certainlyakey

+0

So sieht meine Perl-Anweisung jetzt aus - sie ist ein wenig modifiziert, so dass sie Dateipfade mit Leerzeichen enthalten kann und kompatibel mit ST-Plugins für die Pfadsuche wie AutoFileName ist. Es ist auch möglich, in einem ST-Build-System zu arbeiten. Die Syntax ist '# (Pfad/zu/Datei)': 'perl -ne '/^#\\((.+)\\).*/' cat \ "$ 1 \" '/ e; print '$ {file_base_name} .md> result.md' – certainlyakey

2

Wenn Sie die Unterkapitel nicht inline möchten, können Sie einfach Links in das Hauptkapitel einfügen. Auf diese Weise benötigen Sie keinen Vorverarbeitungsschritt.

Wie Oliver Matthews geschrieben hat, können Sie Ihren eigenen Vorverarbeitungsschritt mit Perl schreiben.

Oder Sie können einen vorhandenen Präprozessor verwenden, wie m4 oder cpp (The C PreProcessor), der Dateien inkludiert. cpp geht wahrscheinlich nicht gut mit C-Code-Abschnitte in den Dokumenten, obwohl. Vor allem, wenn es mehr include-Direktiven gibt.

Im Internet gibt es auch Toolchains, die separate mardown-Dokumente zu etwas Größerem kombinieren. Leider habe ich momentan Probleme, auf die Sicherung meiner Lesezeichen zuzugreifen.

Und hier ist eine ähnliche Frage, mit Antworten: Markdown and including multiple files obwohl die Antworten nicht erklären, wie Unterkapitel zwischen anderem Text einzufügen.

+0

Danke @Sebastian.Ein sehr nützlicher Link auch. –

+0

Ich dachte über die Verwendung von cpp (und mit #include), aber dachte, es wäre ein Schmerz, wie die Header auch mit #s beginnen. Für diejenigen, die die Dinge etwas esoterischer mögen, gibt es immer funnelweb (das ist wahrscheinlich, was ich persönlich benutzt hätte, aber ich habe versucht, es auf Dinge zu beschränken, die Sie installiert hätten). –