我最近在 Ubuntu 18.04 LTS 上将 TexLive 2016 升级到了 2017。出现的问题是,在渲染(Latex 到 dvi 到 ps 到 pdf)后,tikz(pgf)和 pstricks 图片的不透明度在 .ps 和 .pdf 文件中不起作用。
我尝试过 Texstudio、Texmaker 和 Kile,这三个编辑器都出现了问题。我尝试过 evince 和 okular,这两个查看器都出现了问题。另一方面,在 Qtikz 和 Texstudio 的预览中,不透明度对 tikz 来说工作正常。
使用之前的所有 TexLive 版本时我都没有遇到过这个问题。
这是一个包含一张 tikz 和一张 pstricks 图像的最小示例:
\documentclass[10pt]{article}
\usepackage[english,greek]{babel}
\usepackage[iso-8859-7]{inputenc}
\usepackage{pstricks, pstricks-add}
\usepackage{graphicx, color}
\usepackage{pgf,tikz}
\begin{document}
\begin{tikzpicture}[line cap=round,line join=round,x=0.5cm,y=0.5cm]
\clip(-3.6008835336224467,-3.8322994902133702) rectangle (3.6645946388488806,2.9075908995685467);
\draw [line width=1.2pt,color=gray,fill=gray,fill opacity=0.25] (0.,0.) circle (0.75cm);
\fill[line width=1.6pt,color=blue,fill=blue,fill opacity=0.25] (0.,1.) -- (0.,-1.) -- (2.,-1.) -- (2.,1.) -- cycle;
\draw [line width=1.6pt,color=blue] (0.,1.)-- (0.,-1.);
\draw [line width=1.6pt,color=blue] (0.,-1.)-- (2.,-1.);
\draw [line width=1.6pt,color=blue] (2.,-1.)-- (2.,1.);
\draw [line width=1.6pt,color=blue] (2.,1.)-- (0.,1.);
\end{tikzpicture}
\bigskip
\psset{xunit=0.5cm,yunit=0.5cm,algebraic=true,dimen=middle,dotstyle=o,dotsize=5pt 0,linewidth=0.8pt,arrowsize=3pt 2,arrowinset=0.25}
\begin{pspicture*}(-3.6008835336224467,-3.8322994902133702)(3.6645946388488806,2.9075908995685467)
\pscircle[linewidth=1.2pt,linecolor=gray,fillcolor=gray,fillstyle=solid,opacity=0.25](0.,0.){0.75}
\pspolygon[linewidth=1.6pt,linecolor=blue,fillcolor=blue,fillstyle=solid,opacity=0.25](0.,1.)(0.,-1.)(2.,-1.)(2.,1.)
\psline[linewidth=1.6pt,linecolor=blue](0.,1.)(0.,-1.)
\psline[linewidth=1.6pt,linecolor=blue](0.,-1.)(2.,-1.)
\psline[linewidth=1.6pt,linecolor=blue](2.,-1.)(2.,1.)
\psline[linewidth=1.6pt,linecolor=blue](2.,1.)(0.,1.)
\end{pspicture*}
\end{document}
结果(两者)应该是
但我收到了
关于如何处理这个问题有什么想法吗?
PS 因为我在同一个文档中拥有 tikz 和 pstricks,所以 pfdlatex 不适合编译。
答案1
Ghostscript-9.52 引入了用于设置填充和描边不透明度的新运算符(.setconstantfillopacity
, .setconstantstrokeopacity
),从而弃用了迄今为止存在的.setopacityalpha
。从 GS 版本 9.53 开始,如果使用旧运算符,则会生成警告消息。
gs
此外,还引入了一个用于激活不透明度功能的新命令行选项:
ps2pdf -dALLOWPSTRANSPARENCY myfile.ps myfile.pdf
TikZ/pgf例子:
\documentclass[border=3pt,varwidth]{standalone}
\usepackage{tikz}
\usetikzlibrary {patterns,shapes.symbols}
\begin{document}
%\begin{preview}
\begin{tikzpicture}[thick,fill opacity=0.5]
\filldraw[fill=red] (0:1cm) circle (12mm);
\filldraw[fill=green] (120:1cm) circle (12mm);
\filldraw[fill=blue] (-120:1cm) circle (12mm);
\end{tikzpicture}
\tikz {
\begin{scope}[transparency group]
\begin{scope}[blend mode=screen]
\fill[red!90!black] ( 90:.6) circle (1);
\fill[green!80!black] (210:.6) circle (1);
\fill[blue!90!black] (330:.6) circle (1);
\end{scope}
\end{scope}
}
\begin{tikzpicture}
\shade [left color=red,right color=blue] (-2,-1) rectangle (2,1);
\begin{scope}[transparency group=knockout]
\fill [white] (-1.9,-.9) rectangle (1.9,.9);
\node [opacity=0,font=\fontencoding{T1}\fontfamily{ptm}\fontsize{45}{45}\bfseries] {Ti\emph{k}Z};
\end{scope}
\end{tikzpicture}
\begin{tikzpicture}[opacity=0.5]
\begin{scope}[transparency group]
\draw [line width=5mm] (0,0) -- (2,2);
\draw [line width=5mm] (2,0) -- (0,2);
\end{scope}
\end{tikzpicture}
%\end{preview}
\end{document}
技巧例子:
\documentclass{standalone}
\usepackage{pstricks-add}
\begin{document}
\psset{fillstyle=solid,linewidth=0.1,opacity=0.4,strokeopacity=0.7}
\begin{pspicture}(-3.48,-3.06)(3.48,3.48)
\pscircle[fillcolor=green,linecolor=green](2;135){2cm}
\pscircle[fillcolor=red,linecolor=red](2;45){2cm}
\pscircle[fillcolor=blue,linecolor=blue](1;-90){2cm}
\end{pspicture}
\end{document}
答案2
我正在使用 Kile。在 Kile 中,我使用pdflatex
带有选项的命令-shell-escape
。对于不透明度,我找到了这个解决方案。使用auto-pdf
带有此选项的包:\usepackage[pspdf={-dDELAYSAFER}]{auto-pst-pdf}