当我尝试test.tex
在一个空文件夹中编译以下文件时:
\documentclass[]{report}
\usepackage{python}
\begin{document}
\begin{python}
print(0)
\end{python}
\end{document}
我收到以下错误消息:
! I can't write on file `test.py'.
这是什么原因呢?为什么 pdflatex 无法在该文件上写入?
我尝试过从 TeXstudio 编辑器、命令提示符和 Git Bash 进行编译,既以我自己的用户身份进行,也以管理员身份在提升模式下进行编译,但总是出现相同的错误。我使用pdflatex.exe -synctex=1 -interaction=nonstopmode -shell-escape test.tex
终端和pdflatex.exe -synctex=1 -interaction=nonstopmode -shell-escape %.tex
TeXstudion 进行编译,应该会生成相同的命令。我使用的是 MiKTeX 和 Windows 10。我的 Python 版本是 3.5.3,是 64 位的。
以下是整个日志文件test.log
:
This is pdfTeX, Version 3.14159265-2.6-1.40.18 (MiKTeX 2.9.6350 64-bit) (preloaded format=pdflatex 2017.7.26) 2 NOV 2017 17:19
entering extended mode
**./test.tex
(test.tex
LaTeX2e <2017-04-15>
Babel <3.10> and hyphenation patterns for 75 language(s) loaded.
("D:\Program Files\MiKTeX 2.9\tex\latex\base\report.cls"
Document Class: report 2014/09/29 v1.4h Standard LaTeX document class
("D:\Program Files\MiKTeX 2.9\tex\latex\base\size10.clo"
File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
)
\c@part=\count79
\c@chapter=\count80
\c@section=\count81
\c@subsection=\count82
\c@subsubsection=\count83
\c@paragraph=\count84
\c@subparagraph=\count85
\c@figure=\count86
\c@table=\count87
\abovecaptionskip=\skip41
\belowcaptionskip=\skip42
\bibindent=\dimen102
)
("D:\Program Files\MiKTeX 2.9\tex\latex\python\python.sty"
Package: python 2007/06/07 v0.21 Python in LaTeX
\@out=\write3
\@module=\write4
)
No file test.aux.
\openout1 = `test.aux'.
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 5.
LaTeX Font Info: ... okay on input line 5.
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 5.
LaTeX Font Info: ... okay on input line 5.
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 5.
LaTeX Font Info: ... okay on input line 5.
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 5.
LaTeX Font Info: ... okay on input line 5.
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 5.
LaTeX Font Info: ... okay on input line 5.
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 5.
LaTeX Font Info: ... okay on input line 5.
! I can't write on file `test.py'.
\@python ...mmediate \openout \@out =\jobname .py
\newlinechar ='15 \begingr...
l.8 p
rint(0)
Please type another output file name
! Emergency stop.
\@python ...mmediate \openout \@out =\jobname .py
\newlinechar ='15 \begingr...
l.8 p
rint(0)
*** (job aborted, file error in nonstop mode)
Here is how much of TeX's memory you used:
231 strings out of 493323
2485 string characters out of 3139054
53648 words of memory out of 3000000
3856 multiletter control sequences out of 15000+200000
3640 words of font info for 14 fonts, out of 3000000 for 9000
1141 hyphenation exceptions out of 8191
23i,0n,17p,118b,36s stack positions out of 5000i,500n,10000p,200000b,50000s
! ==> Fatal error occurred, no output PDF file produced!
除了这个日志文件之外,我还得到了一个名为 的文件test.aux
,但仅此而已。没有test.py
生成名为 的文件。
答案1
如果 pdflatex 不能写入py
文件,则最可能的原因是某些保护软件拒绝了它的权限。有报道称,例如 bitdefender 会这样做:pdflatex 无法写入某些文件夹
但这也许不是您在使用该软件包时遇到的唯一问题python
。它使用程序cat
来写入 Windows 中通常不存在的文件。我只能在 git bash 中编译您的文件。
编辑
我想我找到了为什么在某些系统上无法写入 .py 的原因。在一台电脑上,我也遇到同样的问题,.PY
原因是 PATHEXT 变量:
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY
在我删除.PY
(这需要管理员权限)后,pdflatex 再次编译并可以写入.py
文件。