使用 upacity 绘制双纽线时出现渐近线错误

使用 upacity 绘制双纽线时出现渐近线错误

我正在尝试使用此答案中的代码绘制双纽线: 如何用 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 版本中实现):

https://github.com/vectorgraphics/asymptote/issues/77

答案3

如果你在使用 pstricks 时遇到此错误,我找到了一个解决方案 不同的问题。如果这对你有用,请给原作者点赞:

% GhostScript 9.53
\usepackage[pspdf={-dALLOWPSTRANSPARENCY}]{pstricks-pdf}
% GhostScript < 9.53
\usepackage[pspdf={-dNOSAFER}]{pstricks-pdf}

相关内容