Abrufen eines gültigen Makefiles von tikz-externalize bei Verwendung von „-output-directory“ und Eingabe

Abrufen eines gültigen Makefiles von tikz-externalize bei Verwendung von „-output-directory“ und Eingabe

Das folgende mwe erzeugt ein ungültiges Makefile, wenn es mit latexmkder -output-directoryOption verwendet wird. (Das Beispiel stammt aus dem pgfplotsHandbuch)

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.texDatei nicht im buildVerzeichnis befindet, funktioniert die Ausführung des makeBefehls aus dem buildVerzeichnis nicht. Auch die Ausführung aus dem Stammverzeichnis des Projekts funktioniert nicht, da sich mwe.figlistdort 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=./buildwie 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

buildwelches nun aus dem Verzeichnis mit erstellt werden kann make -f mwe.makefile.

verwandte Informationen