更新

更新

我刚刚安装了 TeX Live 2013,并尝试使用 python 包编译文件。以下是文件的相关部分

\begin{python}
print 'hi'
\end{python}

我在 Linux 机器上用 TeX Live 2013 成功编译,但在 Windows 7 机器上无法成功编译。运行时latex --shell-escape pytest.tex出现错误,开头为

pytest.py: Forbidden to open for writing
! I can't write on file `pytest.py'.
\@python ...mediate \openout \@out =\@outname .py
                                                   \newlinechar ='15 \begingr...

有人能帮我解决这个问题,以便我可以在我的 Windows 机器上使用 python.sty 编译乳胶文档吗?

更新

因此,我非常确定该问题与权限有关。如果是这样的话,如果可以运行几个简单的测试来确定为什么 \write18 无法打开文件进行写入/它试图做什么,那就太好了。我从搜索中看到了一些与 TEXMFOUTPUT 环境变量相关的问题,但我不知道 (1) 应将 TEXMFOUTPUT 的值设置为什么,以确保这些临时 python 文件是在当前工作目录中创建的,以及 (2) 设置 TEXMFOUTPUT 是否与这些 \write18 权限问题有关。

好的,有一条新信息:因此,我创建了一个最小的示例:

\documentclass[letterpaper,10pt]{article}
\usepackage{python}
\begin{document}

\begin{python}
print 'hi'
\end{python}

\end{document} 

在编译后出现 `! 我无法写入文件 pytest1.py' 时,它显示(按 Enter 重试,或按 Control-Z 退出;默认文件扩展名是“.tex” 这个错误是因为 write18 只能写入 .tex 文件吗?

在编译的第二行开始处,它只显示“ \write18 enabled”。因此它不是使用受限制的 \write18 运行的。我觉得我离解决这个问题已经很近了。

解决了

评论TeX Live 2013 上的 python.sty - 因写入错误而禁止打开完全正确。我的 PATHEXT 环境变量中列出了 .py。删除它后,文件就可以顺利编译,不会出现错误。

刚刚阅读了 meta.tex.SE,答案出来后会将功劳归于 JosephWright。

答案1

在 Windows 上,TeX 系统故意禁用可执行文件类型(基于扩展名)的写入通过 \writefoo.py操作。因此,如果.py文件设置为可执行文件,则无法创建名为的文件。此问题的常见情况是批处理 ( .bat) 文件,它们是纯文本,但无需任何附加组件即可执行,因此是“禁止的”。\write18启用后,最简单的方法是写入备用文件名,然后使用 shell 转义重命名文件,这被允许\write18“做任何你想做的事”。

相关内容