tikz externalisatie en meerdere assen met \ ref en \ label voor legendentry

Christian 10/05/2018. 1 answers, 0 views
pgfplots cross-referencing tikz-external legend

Ik heb een plot bestaande uit twee y-assen. Wanneer ik de legenda-instellingen in elke asomgeving toevoeg, zal de eerste legenda worden geplot "achter" de plot van de tweede as. Dus ik dacht dat een oplossing het \ ref \ label zou kunnen zijn om beide legendaantekeningen aan het einde van het document te plotten, dat ze vooraan in alle plots verschijnen en niet verborgen zijn. Helaas geeft het gebruik van de tikz-externalisatie de fout "undefined references ...." en de legendentries worden gegeven met "??" enkel en alleen. Ik controleerde de handleiding voor het gebruik van \ legend \ ref met externalisatie, maar het helpt niet. Ik probeerde verschillende keren te compileren.

\documentclass[fontsize=12pt,openright,oneside,DIV11,a4paper,numbers=noenddot,headsepline,parskip=half]{scrbook}
\usepackage[latin1]{inputenc}
\usepackage[cmex10]{amsmath}
\usepackage{siunitx}
\usepackage{tikz}
\usetikzlibrary[shapes.arrows]
\usepackage{pgfplots}
\pgfplotsset{compat=1.3}

% set up externalization
\usetikzlibrary{pgfplots.external}
\tikzset{external/system call={lualatex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"}}
\tikzexternalize


\begin{document}
\thispagestyle{empty}
    \begin{tikzpicture}
        \begin{axis}[
                legend cell align=left,
            bar width=7pt,
            xmin=-3, xmax=30,
            axis y line*=left,
            xlabel=Laser current / \si{\milli\ampere},
            ylabel=Tuning range / \si{\nano\metre},
            nodes near coords align=left,
            nodes near coords,]
        \addplot[ybar, ybar legend, draw=gray, fill=gray, color=gray] table[x=current,y=tuning] {Tun_SMSR.txt};

%          \addlegendentry{Abstimmbereich};
       \label{Abstimmbereich};
    \end{axis}

    \begin{axis}[
            every axis legend/.append style={fill=white, anchor=north west, at={(0.35,0.18)}},
            legend cell align=left,
            ybar=5pt,
            ybar interval=0.6,
            bar width=7pt,
            xmin=-3, xmax=30,
            ymin=30, ymax=60,
            axis y line*=right,
            axis x line=none,
            ylabel=SMSR / \si{\deci\bel},
            nodes near coords align=left,
            nodes near coords,]
        \addplot[ybar, ybar legend, draw=black, color=black] table[x=current,y=SMSR] {Tun_SMSR.txt};
       \label{SMSR};
%          \addlegendentry{SMSR};

    \end{axis}

\node [draw,fill=white] at (rel axis cs: 0.7,0.15) {\shortstack[l]{
\ref{Abstimmbereich} Abstimmbereich\\
\ref{SMSR} SMSR
}};

    \end{tikzpicture}
\end{document} 

Ik ben aan het compileren met het commando

lualatex -shell-escape "document name".tex 

De resulterende figuur toont de legendes maar zonder symbolen en "??" in plaats daarvan.

1 Answers


U verwijst naar een label dat is geëxternaliseerd naar een afzonderlijke pdf - wat een complexe taak is.

Hier betekent "complex" "te complex voor de standaard -shell-escape image externalisatie". Als u iets in een extern beeld wilt verwijzen, moet u speciale stappen nemen.

Citaat uit de handleiding pgfplots: "Voor punt a) werkt een \ref binnenkant van een externe afbeelding alleen als u de vereiste systeemaanroep handmatig of per merk uitvoert. De eerste configuratiemodus mode=convert with system call ondersteunt geen \ref . Maar u kunt de systeemoproep die is gegenereerd door mode=convert with system call copypaste en handmatig uitgeven.De reden is dat \ref informatie wordt opgeslagen in het .aux bestand, maar dit hulpbestand is niet volledig geschreven wanneer mode=convert with system call wordt aangeroepen (er is een raceconditie.) Merk op dat \pageref niet wordt ondersteund (sorry). Dus: als je \ref binnenkant van externe graphics hebt, overweeg dan het gebruik van mode=list and make of copypaste de systeemaanroep voor de afbeelding (en) ) en voer het handmatig uit. "

Als alternatief kunt u een week wachten (laten we zeggen) totdat de volgende versie van pgfplots wordt vrijgegeven. Het ondersteunt gelaagde grafische weergaven zodat de eerste legenda niet achter de tweede as verschijnt.

Een andere altivernatieve oplossing zou kunnen zijn om een ​​legenda-item voor de eerste plot in de legenda van de tweede afbeelding in te \addlegendimage{