tikz外化和多轴使用\ ref和\标签进行legendentry

Christian just a moment. 1 answers, 0 views
pgfplots cross-referencing tikz-external legend

我有一个由两个y轴组成的图。 当我在每个轴环境中添加legendentries时,第一个legendentry将被绘制在第二轴的绘图“后面”。 因此,我认为解决方案可能是\ ref \ label,用于在文档末尾绘制两个legendentries,它们将出现在所有绘图的最前面而不是隐藏。 不幸的是,使用tikz外化会给出错误“undefined references ....”,并且legendentries给出“??” 只要。 我检查了手册使用\ legend \ ref与外部化,但它没有帮助。 我试过几次编译。

\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} 

我正在使用命令进行编译

lualatex -shell-escape "document name".tex 

结果图显示了传说,但没有符号和“??” 代替。

1 Answers


您指的是已经外部化为单独的pdf的标签 - 这是一项复杂的任务。

这里,“复杂”意味着“对于标准的 - 逃避图像外化而言太复杂”。 为了引用某些外部图像内部的某些内容,您必须采取特殊步骤。

引用pgfplots手册:“对于a点),只有在手动或通过make发出所需的系统调用时,外部化图形内部的\ref才有效。初始配置mode=convert with system call不支持\ref 。但是您可以通过系统调用来复制mode=convert with system call生成的mode=convert with system call并手动发出。原因是\ref信息存储在主.aux文件中但是当mode=convert with system call时,这个辅助文件没有完全写入调用(有一个竞争条件)。注意不支持\pageref (抱歉)。因此:如果你有外部图形的内部\ref ,请考虑使用mode=list and make或copypaste系统调用图像(s并手动发出。“

或者,您可以等待(比方说)一周,直到下一版本的pgfplots被释放。 它支持分层图形,因此第一个图例不会出现在第二个轴的后面。

另一个altivernative解决方案可能是使用\addlegendimage{