Makefile basics, multiple PDFs und Knitr/R

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Makefile basics, multiple PDFs und Knitr/R

von MoonKid » Mo 12. Dez 2016, 22:54

Sorry, ich hatte in der gleichen Gruppe einen älteren Make-Eintrag gesehen und dann nicht weiter nachgedacht. :)

von Gast » Mo 12. Dez 2016, 14:09

  1. Das ist hier das ganz falsche Forum! Make-Aufrufe für TeX-Dokumente mögen im Tools-Forum gerade noch toleriert werden, aber eine Frage zu (La)TeX-Strukturen ist das ganz sicher nicht!
  2. make interessiert es nicht, ob das PDF erzeugt wurde. make interessiert sich nur für die Rückgabe der aufgerufenen Programme. Gibt eines einen von 0 abweichenden Wert zurück, dann bricht es die Regel ab und betrachtet sie als gescheitert.

Makefile basics, multiple PDFs und Knitr/R

von MoonKid » Mo 12. Dez 2016, 10:38

Meine aktuelle Projektstruktur ist zugegeben etwas komplex für den Makefile-Einstieg. Aber vorher (bei den simpleren Projekten) gab es eben die Notwendigkeit nicht. Und da steh ich nun.

Erstmal zur vollständigen Verwirrung das Makefile.
BASENAME=table

all: $(BASENAME)1.pdf $(BASENAME)2.pdf 


$(BASENAME)1.pdf: $(BASENAME)1.tex
	texout '$(BASENAME)1.tex' & sleep 1s && xelatex -shell-escape -interaction=nonstopmode '$(BASENAME)1.tex'

$(BASENAME)2.pdf: $(BASENAME)2.tex
	texout '$(BASENAME)2.tex' & sleep 1s && xelatex -shell-escape -interaction=nonstopmode '$(BASENAME)2.tex'

$(BASENAME)1.tex: $(BASENAME)1.Rnw
	Rscript -e "library(knitr);knit('$(BASENAME)1.Rnw')"

$(BASENAME)2.tex: $(BASENAME)2.Rnw
	Rscript -e "library(knitr);knit('$(BASENAME)2.Rnw')"

clean:
	rm -frv .out
	rm -fv $(BASENAME)1.tex
	rm -fv $(BASENAME)1.pdf
	rm -fv $(BASENAME)1.aux
	rm -fv $(BASENAME)1.log
	rm -fv $(BASENAME)2.tex
	rm -fv $(BASENAME)2.pdf
	rm -fv $(BASENAME)2.aux
	rm -fv $(BASENAME)2.log

# this targets are not files
.PHONY: clean all pdf
Es exitieren zwei Quelldateien, die ich selbst editiere: table1.Rnw und table2.Rnw. Das sind tex-Dokumente in dennen R-Code eingebettet ist. Diese files werden zuerst durch Rscript geschickt, wo am Ende je eine tex-Datei bei rauskommt. Der eigentliche tex-zu-pdf-Lauf wird von texout erledigt. Ein kleines Script, das ich schon lange verwende, um beim TeX-Lauf erzeugten Nebendateien in ein verstecktes Unterverzeichnis (.out) zu schieben und bei Bedarf wieder rauszuholen.

Kernproblem hier ist, dass ich jetzt zwei PDF-Dateien am Ende haben will. Das läuft irgendwie nicht.

Make behauptet die PDF-Regel wäre gescheitert, obwohl das PDF erzeugt wurde.
Output written on table1.pdf (2 pages).
Transcript written on table1.log.
Makefile:7: die Regel für Ziel „table1.pdf“ scheiterte
make: *** [table1.pdf] Fehler 1
Nebenbei wäre die Frage, ob sich das Makefile auch vereinfachen ließe.

Nach oben