我正在尝试使用此答案中的代码绘制双纽线: 如何用 TikZ 绘制双纽线
但是,如果我运行 asymptote 时收到以下错误消息:
Error: /undefined in .setopacityalpha
Operand stack:
0.5
Execution stack:
%interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push 2045 1 3 %oparray_pop 2044 1 3 %oparray_pop --nostringval-- 2025 1 3 %oparray_pop 1884 1 3 %oparray_pop --nostringval-- %errorexec_pop .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval--
Dictionary stack:
--dict:967/1684(ro)(G)-- --dict:0/20(G)-- --dict:82/200(L)--
Current allocation mode is local
Current file position is 31005
GPL Ghostscript 9.26: Unrecoverable error, exit code 1
/opt/texlive/2018/texmf-dist/asymptote/plain_shipout.asy: 87.10: runtime: shipout failed
Error: /undefined in .setopacityalpha
Operand stack:
0.2
Execution stack:
%interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push 2045 1 3 %oparray_pop 2044 1 3 %oparray_pop --nostringval-- 2025 1 3 %oparray_pop 1884 1 3 %oparray_pop --nostringval-- %errorexec_pop .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval--
Dictionary stack:
--dict:967/1684(ro)(G)-- --dict:0/20(G)-- --dict:82/200(L)--
Current allocation mode is local
Current file position is 38506
GPL Ghostscript 9.26: Unrecoverable error, exit code 1
/opt/texlive/2018/texmf-dist/asymptote/plain_shipout.asy: 87.10: runtime: shipout failed
答案1
哇。
之后很多挖掘后我发现此错误报告(这实际上不是一个错误)这表明 GhostScript(由 Asymptote 调用)在与不透明度一起使用时会遇到问题-dSAFER
。此选项可确保不会执行任何可能对系统有害的 PostScript 代码。启用此选项会导致不透明度失败。如果将行更改fpen=lightred+opacity(0.5);
为fpen=lightred;//+opacity(0.5);
并将pen fpen=lightgreen+opacity(0.2);
更改为pen fpen=lightgreen;//+opacity(0.2);
(注释掉不透明度),则会生成图片:
但这不是您所期望的。如果您启用不透明度,问题仍然存在,因为 Asymptote-dSAFER
自 2008 年以来默认使用以下代码调用 GhostScript(来自更改日志):
commit 407a627a5d18b773739a9535b486b8a177dd7c49
Author: John Bowman <[email protected]>
Date: Mon Jun 23 11:00:40 2008 -0600
By default run gs with -dSAFER.
在对代码和文档进行进一步挖掘而opacity
未果之后,我搜索了一下safe
,结果如下:
有一个-nosafe
选项你可以(当你信任你正在执行的代码时)传递给以asy
使不透明度起作用。
因此,您可以使用链接答案中的相同代码(如何用 TikZ 绘制双纽线)并使用以下命令编译文档:
pdflatex cassini.tex
asy -nosafe cassini-*asy
pdflatex cassini.tex
它会起作用:)
答案2
在 git 源代码中已经实现了针对此 ghostscript 错误的更好的解决方法(并且将在即将发布的 2.48 Asymptote 版本中实现):
答案3
如果你在使用 pstricks 时遇到此错误,我找到了一个解决方案 不同的问题。如果这对你有用,请给原作者点赞:
% GhostScript 9.53
\usepackage[pspdf={-dALLOWPSTRANSPARENCY}]{pstricks-pdf}
% GhostScript < 9.53
\usepackage[pspdf={-dNOSAFER}]{pstricks-pdf}