2017 年 6 月 12 日更新后,PStricks 停止工作

2017 年 6 月 12 日更新后,PStricks 停止工作

PStricks 在最新更新(2017 年 6 月 12 日)后停止工作。我使用 XeLaTeX。这是一个非常简单的例子。

\documentclass[12pt]{article}
\usepackage{pstricks}
\begin{document}
\begin{center}
\psset{yunit=1cm,xunit=1cm}
\begin{pspicture}(-2,-2)(3,3)
\psline[linewidth=0.5pt,linestyle=solid](-2,2)(3,2)
\end{pspicture}
\end{center}
\end{document}

使用 XeLateX 编译文件后出现以下错误(以前从未出现过):

MiKTeX GPL Ghostscript 9.19:无法恢复的错误,退出代码 1

我使用 PStricks 在文档中绘制了许多图片,但使用 XeLaTex 编译后这些图片都无法显示。如能得到任何帮助,我将不胜感激。

答案1

LaTeX 团队一直在努力更新(合理化)不同引擎中图形/颜色的各种支持文件。在此过程中出现了一些小问题,不幸的是,这是其中之一。修复程序已发送给 CTAN,应该会在今天出现在 TeX Live 中:对于 MiKTeX,我不确定,但会在几天内出现。如果您紧急需要修复它然后您可以在序言中粘贴更新后的代码:

\documentclass[12pt]{article}
\usepackage{graphicx}
\makeatletter
\def\c@lor@arg#1{%
  \dimen@#1\p@
  \ifdim\dimen@<\z@\dimen@\maxdimen\fi
  \ifdim\dimen@>\p@
    \PackageError{color}{Argument `#1' not in range [0,1]}\@ehd
  \fi}
\def\color@gray#1#2{%
  \c@lor@arg{#2}%
  \edef#1{gray #2}%
  }
\def\color@cmyk#1#2{\c@lor@@cmyk#2\@@#1}
\def\c@lor@@cmyk#1,#2,#3,#4\@@#5{%
  \c@lor@arg{#4}%
  \c@lor@arg{#1}%
  \c@lor@arg{#2}%
  \c@lor@arg{#3}%
  \edef#5{cmyk #1 #2 #3 #4}%
  }
\def\color@rgb#1#2{\c@lor@@rgb#2\@@#1}
\def\c@lor@@rgb#1,#2,#3\@@#4{%
  \c@lor@arg{#1}%
  \c@lor@arg{#2}%
  \c@lor@arg{#3}%
  \edef#4{rgb #1 #2 #3}%
  }
\def\color@RGB#1#2{\c@lor@@RGB#2\@@#1}
\def\c@lor@@RGB#1,#2,#3\@@#4{%
 \c@lor@RGB@rgb{#1}\@tempa
 \c@lor@RGB@rgb{#2}\@tempb
 \c@lor@RGB@rgb{#3}\@tempc
 \c@lor@@rgb\@tempa,\@tempb,\@tempc\@@#4%
  }
\def\c@lor@RGB@rgb#1#2{%
  \dimen@#1\p@
  \divide\dimen@\@cclv
  \edef#2{\strip@pt\dimen@}}
\def\color@hsb#1#2{\c@lor@@hsb#2\@@#1}
\def\c@lor@@hsb#1,#2,#3\@@#4{%
  \c@lor@arg{#1}%
  \c@lor@arg{#2}%
  \c@lor@arg{#3}%
  \edef#4{hsb #1 #2 #3}%
  }
\def\color@named#1#2{\c@lor@@named#2,,\@@#1}
\def\c@lor@@named#1,#2,#3\@@#4{%
  \@ifundefined{col@#1}%
    {\PackageError{color}{Undefined color `#1'}\@ehd}%
  {\edef#4{ #1}}%
  }
\def\c@lor@to@ps#1 #2\@@{\csname c@lor@ps@#1\endcsname#2 \@@}
\def\c@lor@ps@#1 #2\@@{TeXDict begin #1 end}
\def\c@lor@ps@rgb#1\@@{#1 setrgbcolor}
\def\c@lor@ps@hsb#1\@@{#1 sethsbcolor}
\def\c@lor@ps@cmyk#1\@@{#1 setcmykcolor}
\def\c@lor@ps@gray#1\@@{#1 setgray}
\def\current@color{ Black}
\def\set@color{%
 \special{color push  \current@color
                          }\aftergroup\reset@color}
\def\reset@color{\special{%
        color pop}}
\def\set@page@color{\special{%
        background \current@color}}
\def\define@color@named#1#2{%
  \expandafter\let\csname col@#1\endcsname\@nnil}
      \def\no@page@color{\special{background \string"newpath clip}}
\makeatother
\usepackage{pstricks}
\begin{document}


\begin{center}
\psset{yunit=1cm,xunit=1cm}
\begin{pspicture}(-2,-2)(3,3)
\psline[linewidth=0.5pt,linestyle=solid](-2,2)(3,2)
\end{pspicture}
\end{center}
\end{document}

请注意,我加载graphicx 然后修复然后加载 PStricks:您必须在加载 PStricks 之前修复。


问题的详细信息如下(供专家参考)。dvips驱动程序使用 PSTricks 可以理解的颜色符号,其中“相互转换”由名为 的宏执行\c@lor@to@ps。使用 XeTeX 时,有两种描述颜色的方法: 方式dvips和“本机”dvipdfmx方式。

在早期版本中,dvipdfmx驱动程序使用自己的方法,而xetex使用dvips-like 方法。但是,由于xetexdvipdfmx几乎是相同的驱动程序,因此将它们统一起来是有意义的。“自然”的方式似乎是采用本机方法,因此我将代码从复制dvipdfmx.defxetex.def。但是,事实证明\c@lor@to@psin的定义dvipdfmx.def是错误的,因此失败了。

提出了两种可能的解决方案:修复\c@lor@to@ps两者xetex.defdvipdfmx.def以便使用“原生”颜色特效,或者简单地将它们全部切换为dvips类似代码。后一种方法避免了需要两组单独的宏,所以这就是我们所做的。因此,xetex.def过时2017-06-13或更晚的版本不会出现此问题。

相关内容