宏 psGTriangle 导致 pdfLatex 忽略图形

宏 psGTriangle 导致 pdfLatex 忽略图形

我注意到 pstricks 宏 psGTriangle(用于绘制具有 Gouraud 着色的三角形)无法与 auto-pst-pdf/pdflatex 结合使用。没有错误消息,只是忽略了 pspicture 环境。下面是一个最小示例来说明问题:

\documentclass{minimal}

\usepackage{pstricks,pstricks-add}
\usepackage{auto-pst-pdf}

\begin{document}

\psset{unit=0.5cm}

\begin{pspicture}[showgrid=true](-5,-5)(5,5)
  \psGTriangle(-2,-2)(3,-1)(-0.5,3){red}{white}{blue}
\end{pspicture}

\begin{pspicture}[showgrid=true](-5,-5)(5,5)
  \psline(-3,-2)(4,3)
\end{pspicture}

\end{document}

使用 latex -> dvips -> ps2pdf 编译此示例会给出具有 pspictures 环境的 pdf。

latex pdfmini.tex && dvips pdfmini.dvi && ps2pdf pdfmini.ps pdfmini_latex.pdf

使用 pdflatex 编译相同的示例会得到一个包含 2 个空白页的 pdf 和第三页上的第二个 pspicture 环境。

pdflatex -shell-escape pdfmini.tex 

查看生成的pdfmini-图片.pdf文件,可以看出包含 psGTriangle 的图形有问题,即使它被显示了。似乎不知何故裁剪工作不太好。

在我研究解决这个问题的过程中,我发现使用 xelatex 编译可以生成一个好的 pdf 文件。但是我在更大的文档中使用 psGTriangle 宏,我宁愿继续使用 pdflatex(因为我对 xelatex 真的不熟悉)。

这个问题是已知的、可以解决的,还是我必须忍受它?

感谢您的帮助。

编辑:@percusse:我正在使用 Ubuntu 12.04

  • texlive 版本 2012.20120611-3~ubuntu12.04.1。

  • pdfTeX 3.1415926-2.4-1.40.13(TeX Live 2012/Debian)

  • XeTeX 3.1415926-2.4-0.9998(TeX Live 2012/Debian)

答案1

这只是一条建议。将您的绘图代码放入单独的可编译输入文件中,如下所示。

% figure.tex
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pstricks-add}
\psset{unit=0.5cm}

\begin{document}
% figure-1
\begin{pspicture}[showgrid=true](-5,-5)(5,5)
  \psGTriangle(-2,-2)(3,-1)(-0.5,3){red}{white}{blue}
\end{pspicture}
% figure-2
\begin{pspicture}[showgrid=true](-5,-5)(5,5)
  \psline(-3,-2)(4,3)
\end{pspicture}
\end{document}

figure.tex按顺序编译latex-dvips-ps2pdf以获得包含一些页面的 PDF。每页代表一个图表。

从主输入文件中,使用\includegraphics(来自graphicx包)导入 PDF 图像,如下所示。

% main.tex
\documentclass{article}
\usepackage{graphicx}

\newcommand\Insert[2][1]{\includegraphics[scale=#1,page=#2]{figure}}

\begin{document}
\Insert{1}

\Insert{2}
\end{document}

main.tex用编译pdflatex

模拟

以下代码在单个文件中模拟了上述场景。使用 进行编译pdflatex -shell-escape simulation.tex

% simulation.tex
\documentclass{article}

\usepackage{filecontents}
\begin{filecontents*}{figure.tex}
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pstricks-add}
\psset{unit=0.5cm}

\begin{document}
% figure-1
\begin{pspicture}[showgrid=true](-5,-5)(5,5)
  \psGTriangle(-2,-2)(3,-1)(-0.5,3){red}{white}{blue}
\end{pspicture}
% figure-2
\begin{pspicture}[showgrid=true](-5,-5)(5,5)
  \psline(-3,-2)(4,3)
\end{pspicture}
\end{document}
\end{filecontents*}

\usepackage{graphicx}
\usepackage{pgffor}

\foreach \compiler/\ext in {latex/tex,dvips/dvi,{ps2pdf -dAutoRotatePages=/None}/ps}{\immediate\write18{\compiler\space figure.\ext}}


\newcommand\Insert[2][1]{\includegraphics[scale=#1,page=#2]{figure}}
\begin{document}
\Insert{1}

\Insert{2}
\end{document}

笔记

ps2pdf -dAutoRotatePages=/None figure.ps用于防止自动改变页面方向。下面给出ps2pdf模拟自动旋转页面的简单示例。ps2pdf

\begin{pspicture}[showgrid=false](4,4)% grid must be disabled
    \rput{90}(2,2){PSTricks}% the text should be rotated by 90 ccw
\end{pspicture}

答案2

使用

\documentclass{minimal}    
\usepackage{pstricks-add}
\usepackage[crop=off]{auto-pst-pdf}%%%%%%%

\begin{document}    
\psset{unit=0.5cm}
\begin{pspicture}[showgrid](-5,-5)(5,5)
  \psGTriangle(-2,-2)(3,-1)(-0.5,3){red}{white}{blue}
\end{pspicture}

\begin{pspicture}[showgrid](-5,-5)(5,5)
  \psline(-3,-2)(4,3)
\end{pspicture}

\end{document}

在某些特殊情况下,pdfcrop命令会失败。

相关内容