pst-poker 和 asymptote 包之间可能存在冲突吗?

pst-poker 和 asymptote 包之间可能存在冲突吗?

当我尝试在同一文档中使用 LaTeX 软件包pst-poker和时,我遇到了问题。特别是,由 生成的脸部卡片的脸部图像显示在错误的位置。例如:asymptotepst-poker

\documentclass{standalone}

\usepackage{asymptote}
\usepackage{pst-poker}

\begin{document}

\crdKh

\end{document}

生产无脸红心国王然而

\documentclass{standalone}

\usepackage{pst-poker}

\begin{document}

\crdKh

\end{document}

产生预期红心国王与一张脸据我所知,数字卡的命令都能产生正确的输出。我尝试过查看文件.sty本身,但没有找到潜在的冲突。我很好奇是否有人知道这些包之间是否存在冲突。

答案1

问题是asymptote.sty重新定义了\Ginclude@eps。 中的定义xetex.def

\def\Ginclude@eps#1{%
  \Gin@log{<#1>}%
  \bgroup
  \ifx\Undefined\Gin@vllx\else\@trim@vporttrue\fi
  \def\@tempa{!}%
  \dimen@\Gin@urx\p@
  \advance\dimen@ -\Gin@llx\p@
  \if@trim@vport
  \advance\dimen@ \Gin@vllx\p@
  \fi
  \edef\Gin@urx{\strip@pt\dimen@}%
  \dimen@\Gin@ury\p@
  \advance\dimen@ -\Gin@lly\p@
  \if@trim@vport
  \advance\dimen@ \Gin@vlly\p@
  \fi
  \edef\Gin@ury{\strip@pt\dimen@}%
  \dimen@\Gin@req@width
  \[email protected]%
  \divide\dimen@\dimen@ii
  \@tempdima\Gin@req@height
  \divide\@tempdima\dimen@ii
    \special{PSfile="#1"\GPT@space
      \if@trim@vport
      llx=\Gin@vllx\GPT@space
      lly=\Gin@vlly\GPT@space
      \fi
      urx=\Gin@urx\GPT@space
      ury=\Gin@ury\GPT@space
      \ifx\Gin@scalex\@tempa\else rwi=\number\dimen@\GPT@space\fi
      \ifx\Gin@scaley\@tempa\else rhi=\number\@tempdima\GPT@space\fi
      \ifGin@clip clip\fi}%
  \egroup}

而其中一个asymptote.sty

\def\Ginclude@eps#1{%
  \message{<#1>}%
  \bgroup
  \def\@tempa{!}%
  \dimen@\Gin@req@width
  \[email protected]\relax
  \divide\dimen@\dimen@ii
  \@tempdima\Gin@req@height
  \divide\@tempdima\dimen@ii
    \special{PSfile=#1\space
      llx=\Gin@llx\space
      lly=\Gin@lly\space
      urx=\Gin@urx\space
      ury=\Gin@ury\space
      \ifx\Gin@scalex\@tempa\else rwi=\number\dimen@\space\fi
      \ifx\Gin@scaley\@tempa\else rhi=\number\@tempdima\space\fi
      \ifGin@clip clip\fi}%
  \egroup
}

如果我恢复了正确的含义(对于 XeTeX),那么运行就成功了。

\documentclass{standalone}
\usepackage{graphicx}

\makeatletter
\let\Ginclude@eps@orig\Ginclude@eps
\makeatother

\usepackage{asymptote}
\makeatletter
\let\Ginclude@eps\Ginclude@eps@orig
\makeatother

\usepackage{pst-poker}

\begin{document}

\crdKh

\end{document}

为了避免 Ghostscript 发出的警告(这些警告可能无害,但也可能不安全,具体取决于所涉及的图形类型),您应该使用

xelatex-unsafe

(其实不是不安全)。

在此处输入图片描述

另一种方法可能是将eps文件转换pst-poker为 PDF。我试过了epstopdf,成功了。

答案2

使用最新版本的 TeX Distribution 和 Ghostscript 命令

 xelatex -output-driver="xdvipdfmx -i dvipdfmx-unsafe.cfg -q -E" -file-line-error -synctex=1 file.tex

使用 xelatex 排版包含 pstricks 命令的 file.tex。

相关内容