我正在 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 文件会出现一些问题。例如,在标题区域中,我看不到标记及其行,只有“??”符号。