我以为 PSTricks 包不能在 pdfLaTeX 中使用,但是用户 Dima 则持相反观点。
那么我该如何强制 pdfLaTeX 使用 PSTricks 呢?
答案1
最简单的方法是运行xelatex
而不是pdflatex
。它会检测文档中的 PostScript 代码或 eps 图像并即时进行转换。如果您不想使用,xelatex
还有其他解决方案:
如果你有最新的 TeX 发行版,请使用
\usepackage[pdf]{pstricks}
然后使用 运行您的文档pdflatex -shell-escape <file>
。然后 PSTricks 图像将即时创建为独立的 pdf 图像并保存在 中<file>-pics.pdf
。如果您有较旧的系统,请使用
\usepackage{auto-pst-pdf}
\usepackage{pst-...}
有关详细信息,请参阅PSTricks 网页
对于 Windows,你必须安装Perl版本,如果你想使用 auto-pst-pdf 包的全部功能。但是,如果你不想或无法安装 Perl,那么使用
\usepackage[crop=off]{auto-pst-pdf}
还有一个 Perl 脚本 pst2pdf,它可以使用 pdflatex 创建文档,也可以将 PSTricks 图像作为pdf|png|whatever
图像。它获取主文档的序言,并为所有 PostScript 特定代码创建独立文档。
答案2
虽然我不知道 Herbert 提供的解决方案,但我还是想介绍一下另一种解决方案。
您可以按照以下步骤轻松地将 pstricks 与 pdflatex 结合使用:
在您的 .tex 文件中包括 pstricks 包(仅当您想使用 pstricks 扩展时才需要第二个包):
\usepackage{pst-all} \usepackage{pstricks-add}
现在,当处理您的文件以生成最终的 pdf 文件时,请执行以下步骤(下面假设 main.tex 是您的主要 tex 文件):
创建 dvi 文件:
latex main.tex
创建 postscript 文件:
dvips -Ppdf -G0 main.dvi
最后生成pdf文件:
ps2pdf main.ps
幸运的是,所有这些步骤都可以在 makefile 中自动完成(我希望有一种方法可以将文件附加到这些答案,但我在高级帮助中没有找到,对此感到抱歉):
NAME = myfile.pdf
SRC = main.tex
OBJ = main.pdf
# Macro Definitions
LATEX = latex
DVIPS = dvips
PSPDF = ps2pdf
RM = /bin/rm -f
TAR = tar
.SUFFIXES: .tex .dvi .ps .pdf
.tex.dvi:
$(LATEX) $<
.dvi.ps:
$(DVIPS) -Ppdf -G0 $<
.ps.pdf:
$(PSPDF) $<
##############################
# Basic Compile Instructions #
##############################
all: $(NAME)
$(NAME): $(OBJ)
@mv $(OBJ) $(NAME)
: $(SRC)
clean:
@$(RM) *.aux *.log *.nav *.out *.snm *.toc *.dvi *.bbl *.blg *~
delete: clean
@$(RM) $(NAME) $(OBJ) *.ps *.tar.gz
help:
@echo "Type 'make; bibtex main; make; make' to get the pdf file"
@echo "Type 'make clean' to delete all intermediate files"
@echo "Type 'make delete' to delete all intermediate and output files"
如果你将此 makefile 复制并粘贴到你的某个文件中,请确保将标签放在正确的位置。
这种方法的优点是运行起来很顺畅,只需在编辑 LaTeX 文件后输入 make,就可以为您完成所有艰苦的工作,而无需您处理其他中间步骤。如果您必须处理 bib 引用,请输入:make
,然后bibtex
再次输入make
。
答案3
另一种方法:
% TeX it with pdflatex -shell-escape filename
% filename.tex
\documentclass{article}
\usepackage{filecontents}
%====== begin file contents ======
\begin{filecontents*}{circle.tex}
\documentclass[border=12pt,pstricks]{standalone}
\usepackage{pstricks}
\begin{document}
\begin{pspicture}[showgrid](4,4)
\pscircle*[linecolor=red](2,2){2}
\end{pspicture}
\end{document}
\end{filecontents*}
%====== end file contents ======
\usepackage{graphicx}
\IfFileExists{circle.pdf}
{% if exist do nothing
% file age should be taken under consideration but it is ignored for simplicity!
}
{% if not exist do the following
\immediate\write18{latex circle && dvips circle && ps2pdf -dNOSAFER -dAutoRotatePages=/None circle.ps}%
}
\begin{document}
\begin{figure}
\centering
\includegraphics[scale=2]{circle}
\caption{Red Circle}
\label{fig:RedCircle}
\end{figure}
\end{document}
答案4
为了完整起见,有一个脚本ps4pdf运行以下命令将使用 PSTricks 的 .tex 文件转换为 PDF。
latex $1.tex
dvips -Ppdf -o $1-pics.ps $1.dvi
ps2pdf $1-pics.ps $1-pics.pdf
pdflatex $1.tex
bibtex $1
pdflatex $1.tex