# How to use PSTricks in pdfLaTeX?

I thought that PSTricks package was not possible to use in pdfLaTeX but the user Dima claims otherwise.

How can I force pdfLaTeX to use PSTricks then?

-

The easiest way is running xelatex instead of pdflatex. It detects itself PostScript code or eps images in the document and does the conversion on the fly. If you do not want to use xelatex then there are other solutions:

If you have an up-to-date TeX distribution use

\usepackage[pdf]{pstricks}


and then run your document with pdflatex -shell-escape <file>. Then the PSTricks images are created on-the-fly as stand alone pdf images and saved in <file>-pics.pdf. If you have an older system use

\usepackage{auto-pst-pdf}
\usepackage{pst-...}


For Windows you have to install a Perl version, if you want to use the full power of the auto-pst-pdf package. However, if you do not want or cannot install Perl then use

\usepackage[crop=off]{auto-pst-pdf}


There is also a Perl script pst2pdf which can create the document with pdflatex and also the PSTricks images as pdf|png|whatever images. It takes the preamble of the main document and creates stand-alone-documents for all PostScript specific code.

-
I'd not seen this new option: worth knowing about. –  Joseph Wright Jan 6 '11 at 19:43
I see one shortcoming with pstricks and tikz (mentioned several times by other users): this is the fact that we have to compile over and over the same figures when working on a report. With the shell escape, it becomes problematic because the compilation takes longer. Would it be difficult to implement a test so that if the <file>-pics.pdf already exists, latex skips the compilation of the associated pstricks code? Equivalently, it may be more relevant to compile the pstricks figures separately (separate files) and then, input the pic.pdf only in the main file. Any thoughts? –  pluton Jan 6 '11 at 19:58
@pluton: \usepackage[off]{auto-pst-pdf} –  Herbert Jan 6 '11 at 20:18
@pluton: for TikZ/pgf you can use the externalise library to do this. I've just been using it on a very picture-intensive document (116 separate pictures) and it saved a lot of hanging around waiting for the thing to compile. –  Andrew Stacey Jan 6 '11 at 20:20
run texdoc pst-news10 –  Herbert Feb 23 '11 at 17:12

While I was not aware of the solution provided by Herbert, let me also introduce another solution.

You can easily use pstricks with pdflatex following this procedure:

1. Include the pstricks package in your .tex file (the second is necessary only in case that you want to use the pstricks extensions):

\usepackage{pst-all}


Now, when processing your files to generate the final pdf file go through these steps (in the following it is assumed that main.tex is your main tex file):

1. Create the dvi file:

latex main.tex

2. Create the postscript file:

dvips -Ppdf -G0 main.dvi

3. Finally, generate the pdf file:

ps2pdf main.ps


Fortunately, all these steps can be automated in a makefile (I wish there would be a way to attach a file to these answers but I have found none in the advanced help, sorry about that):

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"


If you copy and paste this makefile to one of yours make sure to put the tabs at the right locations.

An advantage of this approach is that it works smoothly, just typing make after editing your LaTeX files will make all the hard work for you with no other intermediate steps for you to take care of. If you have to process bib references then type: make, then bibtex and make again.

-
that are the steps which nearly all GUIs are able to do by default. –  Herbert Aug 18 '11 at 11:13
Certainly, but users using emacs (such as me) and a linux/mac os terminal might hopefully find it useful. –  Carlos Linares López Aug 18 '11 at 15:24
How about if you are not using a command line or for that much linux at all? –  night owl Dec 11 '11 at 8:07
I use winedt 7/8. But i don´t know i have to do for make (LATEX + DVI + PS + PDF). I don´t see that option in WinEdt. I don´t know where y must COPY & PASTE the previous text of Carlos Linares. –  Mika Ike Jun 9 '13 at 12:41

Just another way:

% TeX it with pdflatex --shell-escape
\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}
\begin{document}
\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}%
\immediate\write18{dvips circle}%
\immediate\write18{ps2pdf circle.ps}%
}

\begin{figure}
\centering
\includegraphics[scale=2]{circle}
\caption{Red Circle}
\label{fig:RedCircle}
\end{figure}
\end{document}

-
Make sure you compile it with pdflatex --shell-escape filename.tex as I already mentioned at the first comment in the given code. –  Weirdstress Function Mar 10 '13 at 14:15