![Almacenamiento en caché acuñado en el trabajo de externalización de tikz](https://rvso.com/image/309866/Almacenamiento%20en%20cach%C3%A9%20acu%C3%B1ado%20en%20el%20trabajo%20de%20externalizaci%C3%B3n%20de%20tikz.png)
Opciones de almacenamiento en caché habilitadas minted
y tikz
conducen a un almacenamiento en caché inesperado e ineficiente. Por cada tikz
figura que se externaliza, todos minted
los bloques de código del documento principal se almacenan en caché dentro del tikz
directorio de caché. Para documentos con, por ejemplo, >50 cifras y >100 listados de códigos, el almacenamiento en caché lleva mucho tiempo y utiliza más espacio en disco del que sería necesario.
Para dar un ejemplo, considere este 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}
Esto lleva a la estructura del directorio:
.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
donde los *.pygtex
archivos son redundantes. Supongo que esto se debe a la forma en tikz
que el sistema llama para procesar las figuras individuales, es decir, todos minted
los entornos se consideran en el pdflatex
trabajo externo.
¿Alguna idea de como resolver esto? ¿Me falta o estoy configurando mal algo?
Respuesta1
Esto se debe a la forma en que tikz
funciona la externalización. Si busca en el manual de PGF/TikZ, en externalización, en "Detalles sobre el proceso" (Sección 50.4.5, página 625 en el manual de la versión 3.0.0), verá que externalizar funciona mediantecompilando el archivo completouna vez por cada imagen que se exterioriza. Durante este proceso de compilación, todas las partes del documento que no están relacionadas con la imagen actual se "desechan silenciosamente". Desafortunadamente, mientrasminted
producciónse desecha, minted
seguirá comprobando si existe contenido en caché y, si no, lo creará. Debido a la forma en que funciona la compilación para las imágenes externalizadas, minted
no se puede detectar el caché existente desde la ejecución principal y se creará un nuevo caché.
Puede haber cosas que se puedan mejorar desde el tikz
exterior; No sé lo suficiente sobre los detalles técnicos del proceso de externalización. Desde un minted
lado, el problema de la duplicación se puede resolver cargando minted
condicionalmente (esto necesita minted
2.0):
\ifcsname tikzexternalrealjob\endcsname
\usepackage[draft]{minted}
\else
\usepackage[cache]{minted}
\fi
Si la macro \tikzexternalrealjob
existe (si el archivo se está compilando únicamente para externalizar una imagen), se cargará minted
en modo borrador. En el modo borrador, no se crean archivos externos y nunca se llamará a Python (Pygments). (Se seguirán creando directorios de caché no utilizados para las imágenes... Veré cómo solucionarlo y posiblemente agregar tikz
detección de externalización en la próxima minted
versión:rastreador de problemas.) Si \tikzexternalrealjob
no existe, entonces se trata de una compilación normal y minted
continúa normalmente.