2016-10-12 2 views
0

Ich versuche, eine einzelne Markdown-Datei in verschiedene Ausgaben (HTML, EPUB und LaTeX zum Drucken per PDF) zu kompilieren. Das Dokument erfordert einige Formate, die Markdown nicht nativ sind, was bedeutet, dass das Original nicht portierbar ist. Die benötigten Funktionen sind jedoch in allen drei Ausgabeformaten möglich.Kann man Markdown-Dateien abhängig von der gewählten Ausgabe bearbeiten?

Die Lösung, die ich in Betracht ziehe, ist, ein benutzerdefiniertes Markup in der Originaldatei zu haben und es mit sed (oder einem anderen Präprozessor, den Sie mir raten) zu verarbeiten, um verschiedene Ausgaben für Pandoc zu erzeugen.

Zum Beispiel:

<sig>Placename, 2016</sig>

<div class="signature">Placename, 2016</div>

in HTML und EPUB werden würde, aber

\signature{Placename, 2016}

in LaTeX.

und

<quote>To be or not to be</quote><qaut>Shakespeare</qaut>

wäre dies in HTML und EPUB

<div class="epigraph"><quote>To be or not to be</quote>Shakespeare</div>

und einfach

\epigraph{To be or not to be}{Shakespeare}

in LaT Ex.

Obwohl die Ersetzungen nicht besonders schwierig scheinen, würde ich gerne einen Rat bekommen, wie man mit mehreren Instanzen dieser Ersetzungen vor dem Aufruf von Pandoc umgehen kann (natürlich aus einem Makefile).


möchte ich Rohr bevorzugen die bearbeitete Datei in Pandoc die RAM-Disk verwenden, aber eine tempfile auf/tmp Speichern für mich wäre das gleiche, da ich meine/tmp auf RAM.

+0

Mögliches Duplikat http://StackOverflow.com/Questions/19590980/Multiple-Replacements-with-one-sed-command – tripleee

+0

werfen Sie einen Blick auf https://randomdeterminism.wordpress.com/2012/06/01/how-i-stopped- worring-and-started-using-markdown-like-tex/ – mb21

Antwort

0

können Sie Muster Substitution verwenden mit sed:

sed -i -e 's/pattern1\(pattern_to_keep\)pattern2/text1\1text2/g' filename 

dieser Befehl die Zeile pattern1pattern_to_keeppattern2 in Dateinamen ändern und es zu text1pattern_to_keeptext2 ändern. sed Befehl (oder andere Werkzeuge mit regexp und Substitution) stellen jeweils \(...\) Teil auf nummerierte Puffer wie \1, \2

So sig und quote in LaTeX-Format zu konvertieren, wird Ihr Make-Datei wie folgt aussehen:

file.latex: file 
     sed -e 's/<sig>\(.*\)<\/sig>/\\signature{\1}/g' \ 
      -e 's/<quote>\(.*\)<\/quote>.*<qaut>\(.*\)<\/qaut>/\\epigraph{\1}{\2}/g' $< > [email protected] 

Auch Sie können alle sed Regeln in ein separates Skript einfügen.In diesem Fall sieht die Make-Datei wird wie

file.latex: file script 
     sed -f script $< > [email protected] 


script: 
     @echo 's/<sig>\(.*\)<\/sig>/\\signature{\1}/g' > [email protected] 
     @echo 's/<quote>\(.*\)<\/quote>.*<qaut>\(.*\)<\/qaut>/\\epigraph{\1}{\2}/g' >> [email protected] 

(Note, hier erstellen wir Skriptdatei nur aus Makefile. Für große Skripte es sinnvoll/Speicher-Skript zu erstellen separat um nicht zu viel Makefile)

+0

Die Verwendung von 'cp' gefolgt von' sed -i' ist verschwenderisch und in einem Makefile äußerst zu empfehlen. Sie wollen einfach 'sed -e Dinge -e mehr $ < > $ @' – tripleee

+0

im Allgemeinen ja, aber wir müssen die Anzahl der verschiedenen Ersetzungen für 1 Datei anwenden. Sicher können wir die sed-Skriptdatei verwenden, um eine Anzahl von Regeln gleichzeitig anzuwenden. Für große Veränderungen wäre es wirklich besser. Aktualisiert den Kommentar mit Skriptnutzung. –

+1

Sie machen das unnötig kompliziert. 'sed -e's% \ (. * \)% \\ Signatur {\ 1}% g '-e's% \ (. * \) . * \ (. * \)% \\ Epigraph {\ 1} {\ 2}% g '$ < > $ @ 'tut dies in einem Einzeiler. – tripleee

Verwandte Themen