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 方法。但是,由于xetex
和dvipdfmx
几乎是相同的驱动程序,因此将它们统一起来是有意义的。“自然”的方式似乎是采用本机方法,因此我将代码从复制dvipdfmx.def
到xetex.def
。但是,事实证明\c@lor@to@ps
in的定义dvipdfmx.def
是错误的,因此失败了。
提出了两种可能的解决方案:修复\c@lor@to@ps
两者xetex.def
,dvipdfmx.def
以便使用“原生”颜色特效,或者简单地将它们全部切换为dvips
类似代码。后一种方法避免了需要两组单独的宏,所以这就是我们所做的。因此,xetex.def
过时2017-06-13
或更晚的版本不会出现此问题。