Geprägtes Caching im Tikz-Outsourcing-Job

Geprägtes Caching im Tikz-Outsourcing-Job

Aktivierte Caching-Optionen für mintedund tikzführen zu unerwartetem und ineffizientem Caching. Für jede tikzausgelagerte Abbildung mintedwerden alle Codeblöcke des Hauptdokuments im tikzCache-Verzeichnis zwischengespeichert. Bei Dokumenten mit z. B. >50 Abbildungen und >100 Codeauflistungen dauert das Caching lange und verbraucht mehr Speicherplatz als nötig wäre.

Als Beispiel betrachten wir dieses MWE:

\documentclass[11pt,a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[cache]{minted}
\usepackage{pgf,tikz}
\usetikzlibrary{external}
\tikzsetexternalprefix{figures/cache/}
\tikzset{external/system call={pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"}}
\tikzexternalize

\begin{document}

\begin{minted}[frame=none,fontsize=\small,linenos=true]{r}
plotdata <- data.frame(this = rnorm(20), that = rnorm(20))
\end{minted}

\begin{tikzpicture}[->,>=stealth',shorten >=1pt,auto,node distance=3cm,
  thick,main node/.style={circle,fill=blue!20,draw,font=\sffamily\Large\bfseries}]

\node[main node] (1) {1};
\node[main node] (2) [below left of=1] {2};
\node[main node] (3) [below right of=2] {3};
\node[main node] (4) [below right of=1] {4};

\path[every node/.style={font=\sffamily\small}]
(1) edge node [left] {0.6} (4)
    edge [bend right] node[left] {0.3} (2)
    edge [loop above] node {0.1} (1)
(2) edge node [right] {0.4} (1)
    edge node {0.3} (4)
    edge [loop left] node {0.4} (2)
    edge [bend right] node[left] {0.1} (3)
(3) edge node [right] {0.8} (2)
    edge [bend right] node[right] {0.2} (4)
(4) edge node [left] {0.2} (3)
    edge [loop right] node {0.6} (4)
    edge [bend right] node[right] {0.2} (1);
\end{tikzpicture}

\end{document}

Daraus ergibt sich die Verzeichnisstruktur:

.minted-mwe/
    475544BE9F571FFAF1D26ACA3A0AB8D0502F9AF18E3C3312853333EF1520885B.pygtex
    default.pygstyle
.minted-figures/
    cache/
        mwe-figure0/
            475544BE9F571FFAF1D26ACA3A0AB8D0502F9AF18E3C3312853333EF1520885B.pygtex
            default.pygstyle
figures/
    cache/
        mwe-figure0.aex
        mwe-figure0.dpth
        mwe-figure0.log
        mwe-figure0.md5
        mwe-figure0.pyg

wo die *.pygtexDateien redundant sind. Ich vermute, das liegt an der Art und Weise, tikzwie der Systemaufruf die einzelnen Zahlen verarbeitet, d. h. alle mintedUmgebungen werden im externen pdflatexJob berücksichtigt.

Irgendwelche Ideen, wie man das Problem lösen kann? Übersehe/konfiguriere ich etwas falsch?

Antwort1

Dies liegt an der Art und Weise, wie tikzExternalisierung funktioniert. Wenn Sie im PGF/TikZ-Handbuch unter Externalisierung unter „Details zum Prozess“ nachsehen (Abschnitt 50.4.5, Seite 625 im Handbuch der Version 3.0.0), werden Sie sehen, dass Externalisierung funktioniert, indemKompilieren der gesamten Dateieinmal für jedes Bild, das ausgelagert wird. Während dieses Kompilierungsprozesses werden alle Teile des Dokuments, die nicht mit dem aktuellen Bild in Zusammenhang stehen, „stillschweigend weggeworfen“. Leiderminted Ausgabewird verworfen, mintedprüft aber trotzdem, ob zwischengespeicherter Inhalt vorhanden ist, und erstellt ihn, wenn nicht. Aufgrund der Art und Weise, wie die Kompilierung für die ausgelagerten Bilder funktioniert, mintedkann der vorhandene Cache beim Hauptlauf nicht erkannt werden und erstellt einen neuen Cache.

Es gibt vielleicht Dinge, die von der Seite aus verbessert werden können tikz; ich weiß nicht genug über die technischen Details des Externalisierungsprozesses. Von der Seite aus kann das Problem der Duplizierung durch bedingtes mintedLaden gelöst werden (dafür ist 2.0 erforderlich):mintedminted

\ifcsname tikzexternalrealjob\endcsname
    \usepackage[draft]{minted}
\else
    \usepackage[cache]{minted}
\fi

Wenn das Makro \tikzexternalrealjobvorhanden ist (wenn die Datei nur kompiliert wird, um ein Bild zu externalisieren), wird es mintedim Entwurfsmodus geladen. Im Entwurfsmodus werden keine externen Dateien erstellt und Python (Pygments) wird nie aufgerufen. (Ungenutzte Cache-Verzeichnisse für die Bilder werden weiterhin erstellt... Ich werde versuchen, das tikzin der nächsten Version zu beheben und möglicherweise eine Externalisierungserkennung hinzuzufügen minted:Problemverfolgung.) Wenn \tikzexternalrealjobes nicht vorhanden ist, handelt es sich um eine normale Kompilierung, die mintednormal fortgesetzt wird.

verwandte Informationen