pgfplots, legenda personalizada e biblioteca tikz externa

pgfplots, legenda personalizada e biblioteca tikz externa

Tento criar a figura do Tikz com várias pgfplotssubtramas. Quero ter uma lenda para eles, já que todos têm as mesmas curvas. Eu descobri deessa questãoque posso rotular e fazer referência a cada curva. Usei isso para criar uma legenda simples na parte inferior das subparcelas. E parecia ótimo quando tentei como um arquivo separado. Aí coloquei na minha tese onde utilizo a externalbiblioteca Tikz que resolve o problema de memória TeX que encontrei antes porque tenho muitos gráficos. O problema que ocorre pode ser reproduzido por este MWE:

\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary{external}
\tikzexternalize
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot coordinates { (0,0) (1,1) };\label{plot:p1}
\end{axis}
\node (A) at (1,-1) {\ref{plot:p1} Plot 1};
\end{tikzpicture}
\end{document}

que produz:

insira a descrição da imagem aqui

em vez de:

insira a descrição da imagem aqui

(Estou usando apenas um gráfico aqui em vez de subtramas para simplificar). Observe os pontos de interrogação para a referência que falta na primeira imagem. Claro, se eu comentar a 4ª linha (não use externalizar), a referência ficará ótima (a segunda imagem). Então eu me pergunto:

Como posso obter a referência e ainda usar externalizar?

PS: TexLive 2011 no Ubuntu 11.10

Responder1

Como Ignasi disse no comentário, isso não funciona de forma totalmente automática.

Demanual de pgfplots:

Existe apenas um caso especial se a \label/ \reffor desenhado como tikzpicture. Este é, por exemplo, o caso das \ref imagens de legenda ou do \pgfplotslegendfromnamerecurso. Nesses casos, você precisa proceder como no caso a), pois mode=convert with system callnão consegue lidar com essas coisas sozinho.

O caso a) sugere

considere usar mode=list and makeou copiar{colar a chamada do sistema para as imagens e emitê-la manualmente.

Seu exemplo funciona para mim se eu adicionar

\pgfkeys{
    /tikz/external/mode=list and make
}

para o arquivo e execute make -B -f <filename>.makefileapós a primeira execução de compilação.

informação relacionada