![Abrufen eines gültigen Makefiles von tikz-externalize bei Verwendung von „-output-directory“ und Eingabe](https://rvso.com/image/400384/Abrufen%20eines%20g%C3%BCltigen%20Makefiles%20von%20tikz-externalize%20bei%20Verwendung%20von%20%E2%80%9E-output-directory%E2%80%9C%20und%20Eingabe.png)
Das folgende mwe erzeugt ein ungültiges Makefile, wenn es mit latexmk
der -output-directory
Option verwendet wird. (Das Beispiel stammt aus dem pgfplots
Handbuch)
latexmk mwe.tex -output-directory=build
\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\usepgfplotslibrary{external}
\tikzexternalize[mode=list and make]
\begin{document}
\input{tikz/figure.tikz}
\end{document}
und eine Datei untertikz/figure.tikz
\begin{figure}
\begin{tikzpicture}
\begin{axis}
\addplot {x^2};
\end{axis}
\end{tikzpicture}
\caption{Our first external graphics example}
\end{figure}
mit dem Makefile unterbuild/mwe.makefile
ALL_FIGURE_NAMES=$(shell cat mwe.figlist)
ALL_FIGURES=$(ALL_FIGURE_NAMES:%=%.pdf)
allimages: $(ALL_FIGURES)
@echo All images exist now. Use make -B to re-generate them.
FORCEREMAKE:
include $(ALL_FIGURE_NAMES:%=%.dep)
%.dep:
mkdir -p "$(dir $@)"
touch "$@" # will be filled later.
mwe-figure0.pdf:
pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "mwe-figure0" "\def\tikzexternalrealjob{mwe}\input{mwe}"
mwe-figure0.pdf: mwe-figure0.md5
Da sich die mwe.tex
Datei nicht im build
Verzeichnis befindet, funktioniert die Ausführung des make
Befehls aus dem build
Verzeichnis nicht. Auch die Ausführung aus dem Stammverzeichnis des Projekts funktioniert nicht, da sich mwe.figlist
dort keine Datei befindet.
Antwort1
Bei dieser Lösung handelt es sich um einen schmutzigen Hack, daher werde ich sie nicht akzeptieren und hoffe, dass mir jemand eine bessere Antwort gibt.
Ein aktueller Workaround, den ich habe, ist die Änderung der Befehle, die zum Erstellen des Makefiles verwendet werden. Diese Idee stammt vonHierund ändern Sie die Befehle, einschließlich des Verschiebens in ein Verzeichniscd .. &&
und Festlegen des Ausgabeverzeichnisses--output-directory=./build
wie folgt:
\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\usepgfplotslibrary{external}
\tikzexternalize[mode=list and make]
\tikzset{%
external/system call={cd .. && pdflatex \tikzexternalcheckshellescape --halt-on-error --interaction=batchmode --output-directory=./build --jobname "\image" "\texsource"},
/pgf/images/include external/.code={%
\includegraphics{build/#1}%
},
}
\begin{document}
\input{tikz/figure.tikz}
\end{document}
Generieren des neuen Makefiles
ALL_FIGURE_NAMES=$(shell cat mwe.figlist)
ALL_FIGURES=$(ALL_FIGURE_NAMES:%=%.pdf)
allimages: $(ALL_FIGURES)
@echo All images exist now. Use make -B to re-generate them.
FORCEREMAKE:
include $(ALL_FIGURE_NAMES:%=%.dep)
%.dep:
mkdir -p "$(dir $@)"
touch "$@" # will be filled later.
mwe-figure0.pdf:
cd .. && pdflatex -shell-escape --halt-on-error --interaction=batchmode --output-directory=./build --jobname "mwe-figure0" "\def\tikzexternalrealjob{mwe}\input{mwe}"
mwe-figure0.pdf: mwe-figure0.md5
build
welches nun aus dem Verzeichnis mit erstellt werden kann make -f mwe.makefile
.