pgfplots 中的 \label \ref 对在第二次运行 latex 命令时不起作用

pgfplots 中的 \label \ref 对在第二次运行 latex 命令时不起作用

我正在 Linux 上使用 Latex 准备一份长文档。该文档使用了大量绘图,包括 3D 绘图。如果不将绘图外部化,Latex 会向我显示内存问题消息。在论坛上搜索并阅读有关 pgfplots 文档 (http://pgfplots.sourceforge.net/pgfplots.pdf),在第 464 页,我意识到问题出在我的图中的 \label \ref 对,因为我在 pgfplot 代码中使用 \label,并在标题中使用 \ref 来引用标记线。Latex 文档在第一次运行时成功编译,并在第一次运行 latex 时创建所有必要的文件,例如 .dpth .spl .eps .dvi .log。但是当我第二次运行 latex 时,我收到此错误:

!软件包 tikz 错误:抱歉,系统调用“latex -shell-escape -halt-on-erro r -interaction=batchmode -jobname "elsarticle-template-1a-num-figure_crossref0" "\def\tikzexternalrealjob{elsarticle-template-1a-num}\input{elsarticle-templat e-1a-num}" && dvips -o "elsarticle-template-1a-num-figure_crossref0".eps "elsar ticle-template-1a-num-figure_crossref0".dvi”未产生可用的输出文件“elsarticle-template-1a-num-figure_crossref0”(预期为 .epsi:.eps: 之一)。请确认您已启用系统调用。对于 pdflatex,这是“pdflatex -shell-escape”。有时它也被命名为“write 18”或类似的名称。或者也许命令只是失败了?错误消息可以在“el sarticle-template-1a-num-figure_crossref0.log”中找到。如果你现在继续,我会尝试排版图片。

我使用了以下 Latex 命令两次:

latex -shell-escape elsarticle-template-1a-num.tex
latex -shell-escape elsarticle-template-1a-num.tex

我的文档如下所示:

    \documentclass[preprint,12pt]{elsarticle}

    \usepackage[usenames,dvipsnames]{pstricks}
    \usepackage{epsfig}
    \usepackage{pst-grad} % For gradients
    \usepackage{pst-plot} % For axes
    \usepackage{pstricks-add}
    \usepackage{amsmath}
    \usepackage{amsthm}
    \usepackage[lined,boxed,commentsnumbered]{algorithm2e}
    \usepackage{subfigure}
    \usepackage{pgfplots}
    \usetikzlibrary{patterns}
    \usepackage{tikz}
    \usepgfplotslibrary{external}
    \tikzexternalize
    \tikzset{external/system call={latex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource" && dvips -o "\image".eps "\image".dvi}}
    \begin{document}
    Lots of text content here. Also some pstricks images.
    %Plots begin here. Here I use \label \ref
    \begin{table}[!htb]
    \begin{minipage}{.5\linewidth}
    \input{alpha_0_vary_results_1.txt}
    \end{minipage}%
    \begin{minipage}{.5\linewidth}
    \input{alpha_0_vary_results_2.txt}
    \end{minipage}
    \begin{minipage}{.5\linewidth}
    \input{alpha_0_vary_results_3.txt}
    \end{minipage}%
    \begin{minipage}{.5\linewidth}
    \input{alpha_0_vary_results_4.txt}
    \end{minipage}
    \caption{Values of \(\alpha\) from [0,1] in different data. The line denoted by \ref{abc} marker is the \texttt{abc}. The line with \ref{new_one} marker is the \texttt{New One} scheme.}
    \label{alpha_0_vary_results_figure}
    \end{table}
\bibliographystyle{abbrv}
\bibliography{references.bib}

\end{document}

这是 pgfplots 文件之一。显示 alpha_0_vary_results_1.txt 文件。

\begin{tikzpicture}[scale=0.8]
\begin{axis}[title=Data 1,xlabel=\(\alpha\),ylabel=Measure]
\addplot[color=black,mark=x , mark size=4] coordinates {
        (10,100)
        (20,150)
        (40,225)
        (80,340)
        (160,510)
        (320,765)
        (640,1150)
};\label{abc}
\addplot+[color=black,mark=o , mark size=4] coordinates {
        (10,130)
        (20,110)
        (40,155)
        (80,130)
        (160,210)
        (320,735)
        (640,950)
};\label{new_one}
\end{axis}
\end{tikzpicture}

当我从文档中删除所有图表时,使用上述命令运行 latex 两次都没有出现错误。所以这意味着问题与图表有关。

答案1

经过大量的搜索和测试,我找到了问题的解决方案。这就是我现在所做的。这是文档开头的样子:

\usepgfplotslibrary{external}
\tikzexternalize
\pgfkeys{
    /tikz/external/mode=list and make
}
\tikzset{external/system call={latex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource" && dvips -o "\image".eps "\image".dvi}}

然后我对编译 latex 的方式做了一些改变。

latex -shell-escape file_name.tex

bibtex file_name.aux
bibtex file_name.aux

latex -shell-escape file_name.tex

make -j 4 -B -f *.makefile

latex -shell-escape file_name.tex
latex -shell-escape file_name.tex

bibtex file_name.aux
make -j 4 -f *.makefile
latex -shell-escape file_name.tex

我注意到,如果我不遵循上述编译顺序,最终生成的 PDF 文件会出现一些问题。例如,在标题区域中,我看不到标记及其行,只有“??”符号。

相关内容