2013-08-26 14 views
17

C'è un modo per incorporare un markdown (o il suo sotto-sapori - sto usando PanDoc) in un altro documento ad eccezione di usare un jQuery().load(url)?Incorporamento di un documento di markdown in un altro

Mi piacerebbe avere un documento che ha ad es. main.md, chapter1.md, chapter2.md, con main.md caricamento chapter1.md e chapter2.md automaticamente.

main.md avrà un testo tra i due capitoli, ad es.

main.md:

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

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

quindi non posso utilizzare un approccio cat *.md > final.md

risposta

8

Markdown di per sé manca una notazione per includere file, che piuttosto viti che.

pandoc ha un esempio sull'utilizzo di un filtro haskell personalizzato sui blocchi di codice per includere i file ma questo a. lascia un blocco di codice attorno al testo e (ancora più importante) b. non analizza il nuovo file come markdown, e francamente il mio haskell non è all'altezza del compito di risolverlo.

Tuttavia, è possibile eseguire eseguendo un passaggio di pre-elaborazione, utilizzando perl *. Suppongo che ogni inclusione sia su una linea di per sé del modulo mostrato sopra.

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

* Non mi piace dover ricorrere a Perl, ma sed manca la capacità di leggere da un file utilizzando un pattern match per determinare il nome.

+0

Perfetto grazie @OliverMatthews. Potrei usare python invece di perl ma un pre-processo sembra una buona idea. –

+0

Dopo decine di ore investite nella ricerca di un metodo valido e veloce per l'implementazione include in Pandoc questo è finalmente ciò che funziona. Grazie! – certainlyakey

+0

Ecco come appare la mia dichiarazione perl ora - è un po 'modificata in modo che possa abbracciare percorsi di file con spazi ed essere compatibile con i plugin ST di ricerca del percorso come AutoFileName. Inoltre è scappato per funzionare all'interno di un sistema di costruzione ST. La sintassi è '# (percorso/su/file)': 'perl -ne 's /^#\\((.+)\\).*/' cat \ "\\ $ 1 \" '/ e; stampa '$ {file_base_name} .md> result.md' – certainlyakey

2

Se non si desidera che i sottocapitoli siano incorporati, è possibile semplicemente inserire collegamenti nel capitolo principale. In questo modo, non è necessario un passo di pre-elaborazione.

Come ha scritto Oliver Matthews, è possibile scrivere il proprio passo di pre-elaborazione con perl.

Oppure è possibile utilizzare un preprocessore esistente, ad esempio m4 o cpp (The PreProcessor C) che consente di includere i file. cpp probabilmente non funziona bene con le sezioni di codice C nei documenti, però. Soprattutto quando ci sono più direttive in essi.

Ci sono anche toolchain disponibili su Internet che combinano documenti separati di mardown in qualcosa di più grande. Purtroppo, attualmente ho problemi ad accedere al backup dei miei segnalibri.

Ed ecco una domanda simile, con le risposte: Markdown and including multiple files anche se le risposte non spiegano come inserire capitoli secondari tra altro testo.

+0

Grazie a @Sebastian.Un link molto utile anche. –

+0

Ho pensato di usare cpp (e usando #include), ma ho pensato che sarebbe stato un problema dato che anche le intestazioni iniziano con #s. Per quelli a cui piacciono le cose un po 'più esoterici, c'è sempre funnelweb (che è probabilmente quello che avrei usato personalmente, ma ho provato a limitarlo a cose che avresti installato). –

Problemi correlati