通过 pstricks 通过 postscript 写入文件

通过 pstricks 通过 postscript 写入文件

我想在 PostScript 中使用文件操作:现在我需要它们打印大量调试数据,否则我必须从标准输出中复制和粘贴。

更重要的是,将来我想使用文件操作来缓存大型计算的结果(例如,渲染的 3D 图形)。

但是,下面的代码不起作用。我使用我的 gs 解释器检查:当代码直接通过 gs 执行时,它会成功创建一个文件。问题是什么?如何通过 LaTeX/pstricks 获得标准 postscript 文件访问权限?谢谢!

AlexG 的回答(非常感谢!)编译

ps2pdf -dNOSAFER
pdflatex -shell-escape   

[编辑:] 在对 auto-pst-pdf 的文档进行一点点研究之后,我发现了需要打开哪些选项才能使其与 pdflatex 一起工作:)

这似乎解决了问题!尚未测试其余文件操作。该文件也需要关闭。

%Compile with: 
%    pdflatex -shell-escape   
\documentclass{article}
\usepackage{pstricks}
\usepackage[dvips={-o -Ppdf}, pspdf={-dNOSAFER -dAutoRotatePages=/None}, pdfcrop={}]{auto-pst-pdf}

\begin{document}
\begin{pspicture}
\pstVerb{ 
(./myFile.txt) (w) file 
closefile
}
\phantom{A}
\end{pspicture}
\end{document}

该问题似乎是文件访问权限之一:我收到的错误来自 postscript 解释器:

This is dvips(k) 5.993 Copyright 2013 Radical Eye Software
(www.radicaleye.com) ' TeX output 2014.10.09:1519' ->
using-files-pstricks-autopp.ps

</usr/share/texlive/texmf-dist/dvips/base/tex.pro>
</usr/share/texlive/texmf-dist/dvips/config/alt-rule.pro>
</usr/share/texlive/texmf-dist/dvips/pstricks/pstricks.pro>

</usr/share/texlive/texmf-dist/dvips/pstricks/pst-algparser.pro>
</usr/share/texlive/texmf-dist/dvips/pst-tools/pst-tools.pro>
</usr/share/texlive/texmf-dist/dvips/pstricks/pst-dots.pro>
</usr/share/texlive/texmf-dist/dvips/base/special.pro>. [1]

Error: /invalidfileaccess in --file-- Operand stack: (./myFile.txt)
(w) Execution stack: %interp_exit .runexec2 --nostringval--
--nostringval-- --nos

tringval-- 2 %stopped_push --nostringval-- --nostringval--
--nostringval-- false 1 %stopped_push 1916 1 3 %oparray_pop 1915 1 3
%oparray_pop 1899 1 3 %oparray_pop 1787 1 3 %oparray_pop
--nostringval-- %errorexec_pop .runexec2 --nostringval--
--nostringval-- --nostringval-- 2 %stopped_push --nostringval--
Dictionary stack: --dict:1176/1684(ro)(G)-- --dict:0/20(G)--
--dict:118/200(L)-- --dict:100/300(L)-- Current allocation mode is
local Last OS error: No such file or directory Current file position
is 85884 GPL Ghostscript 9.10: Unrecoverable error, exit code 1

Prozess endete normal

顺便提一下,这是我正在计算并需要缓存的图像类型。这是莫比乌斯带的示例,但我可以使用相当准确的 Z 缓冲绘制任意几何图形。我的轮廓比使用简单三角形网格得到的轮廓要精细得多(我的网格内部是直线近似,但轮廓采样得更精细)。请注意,背景上的所有轮廓线都是用虚线绘制的。

由我的代码渲染的莫比乌斯带

3d 库相当长,包含在这里: 所需的 pstricks-commands.sty 文件

对我的库进行模数,绘制条带的代码如下:

\documentclass{article}
\usepackage{pstricks}
\usepackage[dvips={-o -Ppdf}, pspdf={-dNOSAFER -dAutoRotatePages=/None}, pdfcrop={}]{auto-pst-pdf}
\usepackage{../pstricks-commands}
%file pstricks-commands to be found here:
%https://sourceforge.net/p/freecalculus/code/651/tree/trunk/lectures/pstricks-commands.sty
\pagestyle{empty}
\begin{document}
\begin{pspicture}(-1, -1)(2,2)
\fcBoundingBox{-3}{-3}{4}{4} %
\fcStartIIIdScene%
\fcSurfaceInScene[iterationsU=33, iterationsV=5]{0}{-1}{360}{1}{%
[10 dict begin
/R 2 def
/r {0.8 v mul} def
/theta u def
/phi {u 0.5 mul} def
/A {phi cos r mul R add} def
theta cos A mul theta sin A mul phi sin r mul
end %
]%
}%
\fcFinishIIIdScene % <- this operation is really expensive.
%need to cache it's output so that it's computed only once for a given input.
\end{pspicture}

\end{document}

答案1

将它与 一起使用没有任何实际意义pst-pdf。但是,您必须使用环境postscript和该环境内的虚拟字符,因为它稍后将作为图像插入。

\documentclass{minimal}
\usepackage{pstricks}
\usepackage[pspdf={-dNOSAFER -dAutoRotatePages=/None}, crop=off]{auto-pst-pdf}

\begin{document}
\begin{postscript}
\pstVerb{ 
  /DataFile (myFile.txt) (w) file def 
DataFile (foo) writestring
DataFile (bar) writestring
DataFile closefile
}
\phantom{A}
\end{postscript}

foo
\end{document}

它对我有用pdflatex --shell-escape <file>

相关内容