Opções de cache habilitadas minted
levam tikz
a um cache inesperado e ineficiente. Para cada tikz
figura externalizada, todos minted
os blocos de código do documento principal são armazenados em cache no tikz
diretório de cache. Para documentos com, por exemplo, >50 figuras e >100 listagens de códigos, o armazenamento em cache leva muito tempo e utiliza mais espaço em disco do que seria necessário.
Para dar um exemplo, 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}
Isso leva à estrutura de diretórios:
.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
onde os *.pygtex
arquivos são redundantes. Presumo que isso se deva à forma como tikz
o sistema chama para processar as figuras individuais, ou seja, todos minted
os ambientes são considerados no pdflatex
trabalho externo.
Alguma ideia de como resolver isso? Estou faltando/configurando incorretamente alguma coisa?
Responder1
Isso se deve à forma como tikz
funciona a externalização. Se você olhar no manual PGF/TikZ, em externalização, em "Detalhes sobre o processo" (Seção 50.4.5, página 625 do manual da versão 3.0.0), verá que externalizar funciona porcompilando o arquivo inteirouma vez para cada imagem que está sendo externalizada. Durante este processo de compilação, todas as partes do documento não relacionadas à imagem atual são “jogadas fora silenciosamente”. Infelizmente, enquantominted
saídafor jogado fora, minted
ainda verificará se existe conteúdo em cache e, se não, criará-o. Devido à forma como a compilação funciona para as imagens externalizadas, minted
não será possível detectar o cache existente na execução principal e criará um novo cache.
Pode haver coisas que podem ser melhoradas lateralmente tikz
; Não conheço o suficiente sobre os detalhes técnicos do processo de externalização. Do minted
lado de fora, o problema da duplicação pode ser resolvido carregando minted
condicionalmente (isso precisa minted
de 2.0):
\ifcsname tikzexternalrealjob\endcsname
\usepackage[draft]{minted}
\else
\usepackage[cache]{minted}
\fi
Se a macro \tikzexternalrealjob
existir (se o arquivo estiver sendo compilado apenas para externalizar uma imagem), ela será carregada minted
no modo rascunho. No modo rascunho, nenhum arquivo externo é criado e Python (Pygments) nunca será chamado. (Diretórios de cache não utilizados para as imagens ainda serão criados... Verei como consertar isso e possivelmente adicionar tikz
detecção de externalização na próxima minted
versão:rastreador de problemas.) Se \tikzexternalrealjob
não existir, então esta é uma compilação normal e minted
prossegue normalmente.