我正在编写一份很长的文档(由其他人编写)。作者使用了很多 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 仍可正常加载。