You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下TexLive环境中pgfplots无法运行问题求助

Windows下TeXLive中TikZ外部化+PGFPlots系统调用失败的解决办法

问题描述

在Windows系统的TeXLive环境中编译含PGFPlots的LaTeX代码时,触发TikZ外部化功能后报错:系统调用未生成可用输出文件,需启用system calls。日志显示系统调用处于受限状态,尝试以下操作后问题仍未解决:

  • 使用--shell-escape/--enable-write18参数编译
  • 添加\tikzexternalize[shell escape=-shell-escape]配置
    但相同代码在Overleaf中可正常运行。

最小复现代码

\documentclass[11pt,a4paper,oneside]{report}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{width=10cm,compat=1.9}

% 启用TikZ外部化
\usepgfplotslibrary{external}
\tikzexternalize

\setlength\parindent{0pt}

\begin{document}

\begin{tikzpicture}
    \begin{axis}
    \addplot[color=red]{exp(x)};
    \end{axis}
\end{tikzpicture}
\hskip 5pt
\begin{tikzpicture}
    \begin{axis}
    \addplot3[surf] {exp(-x^2-y^2)*x};
    \end{axis}
\end{tikzpicture}

\end{document}

解决方案

1. 修改TeXLive的shell escape全局配置

Windows下TeXLive默认启用受限模式(shell_escape=p),需改为完全允许:

  • 找到TeXLive安装目录下的texmf-dist/web2c/texmf.cnf文件(例如C:\texlive\2024\texmf-dist\web2c\texmf.cnf)
  • 找到shell_escape = p这一行,修改为shell_escape = t
  • 打开命令行,执行texhash刷新TeX数据库

2. 确保编译命令参数顺序正确

编译时需将--shell-escape参数放在文件名之前,例如:

pdflatex --shell-escape yourfile.tex
# 或用XeLaTeX
xelatex --shell-escape yourfile.tex

3. 显式指定TikZ外部化的系统调用命令

在LaTeX代码中覆盖默认的外部化调用命令,确保传递shell escape参数:

\usepgfplotslibrary{external}
\tikzexternalize
% 显式指定编译命令,强制启用shell escape
\tikzset{external/system call={pdflatex --shell-escape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"}}

4. 排除外部化以外的问题

先临时禁用TikZ外部化功能,验证PGFPlots本身能否正常编译:

% 注释掉这两行
% \usepgfplotslibrary{external}
% \tikzexternalize

若能正常生成图表,说明问题完全集中在外部化的系统调用权限上。

5. 检查系统安全软件拦截

Windows Defender或第三方杀毒软件可能拦截TeX的系统调用,导致无法生成外部文件:

  • 临时关闭杀毒软件,重新编译测试
  • 若测试通过,将TeX编译程序(如pdflatex.exe)添加到安全软件的信任列表

内容的提问来源于stack exchange,提问作者Gier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 01:21:05