Ich suche nach einer Möglichkeit, meinen Computer automatisch PDF-Dateien aus einem Ordner voller Markdown-Dateien generieren und drucken zu lassen.
Jeden Morgen um 5 Uhr möchte ich, dass mein Computer in meinen /markdown-files-Ordner schaut, eine Reihe von PDFs erstellt, die in einen /PDF-Ordner gehen, und auch den Drucker laufen lässt, damit die Seiten auf mich warten.
Es gibt ein paar Anforderungen, die dies etwas schwierig machen könnten:
Früher habe ich WKPDF zum Generieren von PDFs verwendet, aber es funktioniert nicht mehr auf Yosemite.
Sie können dies mit Markdown.pl und htmldoc(1) tun, die beide mit Homebrew installiert werden können . Der grundlegende Ablauf zum Erstellen eines PDF ist:
markdown foo.markdown | htmldoc --no-toc --no-title -f foo.pdf -
Was Ihren Dateinamen pro Seite betrifft, können Sie Echo integrieren, um es als HTML-Element hinzuzufügen:
echo $(markdown foo.markdown) "<p>foo</p>" | htmldoc --no-toc --no-title -f foo.pdf -
Und zum Drucken sendet der Befehl lpr(1) eine Datei an Ihren Standarddrucker.
Zusammenfassend:
for filename in `ls *.markdown`;
do
echo $(markdown "$filename") "<p>$filename</p>" |
htmldoc --no-toc --no-title -f "${filename}.pdf" -
lpr "${filename}.pdf"
done
Hier ist eine Lösung, die LaTeX verwendet, um das PDF zu generieren. Wenn Sie Langformtext in den Markdown-Dateien haben und die typografische Lesbarkeit optimieren möchten (und ich vermute, dass Sie das tun), ist LaTeX im Vergleich zu HTML-Engines tendenziell viel besser.
Es dient pandoc
als Vermittler zwischen Markdown und LaTeX und erstellt auch das PDF für Sie.
#!/bin/bash
md-dir="MARKDOWN_DIRECTORY_HERE"
pdf-dir="PDF_DIRECTORY_HERE"
cd "${md-dir}"
for filename in *.md; do
target-pdf="${pdf-dir}/${filename}.pdf"
pandoc "${filename}" -t latex --latex-engine=xelatex -V geometry=a4paper -V fontsize=11pt -V listings -V header-includes="\usepackage{fancyhdr}\pagestyle{fancyplain}\cfoot{}\rhead{\thepage}\lhead{\texttt{\lstinline/${filename}/}}" -V header-includes="\linespread{2.0}" -o "${target-pdf}"
echo "produced ${filename}.pdf"
lpr "${target-pdf}"
done
pandoc
von Homebrew:brew install pandoc
Sie sollten in der Lage sein, in einem neuen Terminalfenster (mit Bash) auszuführen
echo "test" | pandoc -t latex --latex-engine=xelatex -o test.pdf
und erhalten Sie ein gültiges test.pdf
Dokument mit nur dem Wort "test"
Es gibt eine Menge, die Sie mit den LaTeX-Einstellungen von der Befehlszeile aus optimieren können
\linespread{2.0}
Multiplikator änderngeometry=a4paper
anpassengeometry=a4paper,left=XXmm,right=XXmm,top=XXmm,bottom=XXmm
11pt
entweder auf 10pt oder 12pt verketten, und alles sollte entsprechend skaliert werdenpandoc
: hinzufügen -V mainfont="NAME OF FONT"
. Sie können dies auch monofont
so einstellen.\input{my-template-file}
von der Befehlszeile aus.Ich habe WKPDF nicht verwendet, aber sein Autor schlägt eine Methode vor, mit der es in Yosemite funktioniert: https://github.com/plessl/wkpdf/wiki/How-to-install-on-MacOS-10.10-Yosemite
Sie könnten PhantomJS verwenden . Es ist nicht so einfach wie WKPDF für die PDF-Erzeugung, da es eine größere Auswahl an Funktionen hat, aber es funktioniert gut.
CGP-Grau
CGP-Grau
Zeichnete Stephens
CGP-Grau
ls *.md
; do echo $(markdown $filename) "<p>$filename</p>" | htmldoc --no-toc --no-title --fontspacing 3 --size a4 -f ${filename}.pdf -lpr ${filename}.pdf fertigCGP-Grau
Zeichnete Stephens
CGP-Grau
kein Hang
$filename
Setzen Sie überall dort, wo es als Argument für einen Befehl verwendet wird, doppelte Anführungszeichen, um dies zu umgehen. Es sollte dann auch mit Pipes im Namen funktionieren.andrybak
ls
die Ausgabe niemals analysieren" ? Also statt`ls *.markdown`
sollte nur sein*.markdown
(mit einem Glob *).$(command)
PS Außerdem ist es eine bessere Praxis, anstelle von Backticks zu verwenden`command`
.CGP-Grau
Zeichnete Stephens
cinfo.quantize_colors = (boolean)0;
. Dann mit a./configure && make
wird es für mich erstellt und ausgeführt (das Ausgabeprogramm ist htmldoc/htmldoc)