pstricks/TikZ/center 的奇怪行为

pstricks/TikZ/center 的奇怪行为

我正在编写一份很长的文档(由其他人编写)。作者使用了很多 pstricks 图片,我想使用 pdflatex 编译该文档(而不用绕道使用 dvi)。documentclass 依赖于 TikZ,我注意到以下非常奇怪的行为。

编译

\documentclass{article}

%% Works if we don't load tikz
\usepackage{tikz}
\usepackage[pdf]{pstricks}

\begin{document}

% Works if we load tikz, but don't use center
\begin{center}
\begin{pspicture*}(-3.24,-1.49)(10.23,5.7)
\psline(-1,0)(6,0)
\end{pspicture*}
\end{center}

\end{document}

auto-pst-pdf 阶段因 Ghostscript 错误而崩溃:

"-------------------------------------------------"
"auto-pst-pdf: Auxiliary LaTeX compilation"
"-------------------------------------------------"
This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014/W32TeX) (preloaded format=latex)
entering extended mode
Error: /typecheck in --div--
Operand stack:
   1   0   0.0   TeXcolorgray   65781.8
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   1932   1   3   %oparray_pop   1931   1   3   %oparray_pop   1915   1   3   %oparray_pop   1803   1   3   %oparray_pop   --nostringval--   %errorexec_pop   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   --nostringval--   5   --nostringval--   %repeat_continue   --nostringval--
Dictionary stack:
   --dict:1180/1684(ro)(G)--   --dict:0/20(G)--   --dict:118/200(L)--   --dict:173/300(L)--
Current allocation mode is local
Last OS error: No such file or directory
Current file position is 91942
PDFCROP 1.38, 2012/11/02 - Copyright (c) 2002-2012 by Heiko Oberdiek.

!!! Warning: Empty Bounding Box is returned by Ghostscript!
!!!   Page 1: 0 0 0 0
!!! Either there is a problem with the page or with Ghostscript.
!!! Recovery is tried by embedding the page in its original size.

==> 1 page written on `basic-pics.pdf'.
"-------------------------------------------------"
"auto-pst-pdf: End auxiliary LaTeX compilation"
"-------------------------------------------------"

如果我不加载 TikZ,一切都会正常。奇怪的是,如果我删除 and \begin{center}\end{center}一切也会正常。

这是在 Windows 机器上运行 TexLive14,但同样的事情发生在 Mac 机器上较新版本的 MacTex 上。

最终,center环境将不复存在,问题也会自行消失。不过,我还是想找到解决办法,或者至少知道从哪里可以找到问题。我自己很少使用 pstricks 和 auto-pst-pdf。


更新显然,center这不是完整的故事。我将center-environment 重新定义为一个不执行任何操作的虚拟环境,一切似乎都很好,直到我用真正的 documentclass 编译了完整的文档。documentclass 使用该showtrims选项基于 memoir 构建。没有 showtrims,一切都很好,但有了它,我得到了与上面相同的错误。

有没有办法配置 auto-pst-pdf 以使用不同的文档类来临时创建图形?

答案1

\leavevmode如果我之前添加,它对我有用\begin{pspicture*}

我猜这与 TikZ 对 LaTeX 内部某些部分所做的改变有关,但了解细节可能非常具有挑战性。

因为添加\leavevmode不应该是一个问题,因为在 LaTeX 中直接包含在垂直列表中是应该避免的事情,所以你可以添加

\makeatletter
\@namedef{pspicture*}{\leavevmode\pspicture*}
\makeatother

到您的文档序言中。

答案2

看来我找到了一个可行的“解决方案”。使用以下方法修补 documentclass:

\RequirePackage{ifpdf}
\ifpdf
\LoadClass[a4paper,11pt,twoside,fleqn,showtrims]{memoir}
\else
\LoadClass[a4paper,11pt,twoside,fleqn]{memoir}
\fi

以及类似的加载 TikZ 的保护

\ifpdf
\RequirePackage{tikz}
\fi

整理好一切。实际的保护是通过 documentclass 的一个选项完成的,这样当不需要解决方法时,无论我们是否编译为 pdf,TikZ 仍可正常加载。

相关内容