% \iffalse meta-comment
%
% Copyright (C) 
%   2005--2008: Rolf Niepraschk <Rolf.Niepraschk@gmx.de>, Hubert Gaesslein
%   2008--      Rolf Niepraschk <Rolf.Niepraschk@gmx.de>
% --------------------------------------------------------------
%
% This file may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.2
% of this license or (at your option) any later version.
% The latest version of this license is in:
%
%    http://www.latex-project.org/lppl.txt
%
% and version 1.2 or later is part of all distributions of LaTeX
% version 1999/12/01 or later.
%
% \fi
%
% \iffalse
%<*driver>
\ProvidesFile{pst-pdf.dtx}
%</driver>
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{pst-pdf}
%<*package>
    [2020/10/10 v1.2f PS graphics for pdfLaTeX (RN,HjG)]
%</package>
%
%<*driver>
\listfiles
\documentclass[a4paper]{ltxdoc}
\usepackage[ignore]{pst-pdf}
\providecommand*\mainlang{}
\usepackage[english,\mainlang]{babel}
\usepackage{booktabs,calc,array,url}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\setlength\emergencystretch{3em}
\EnableCrossrefs
\CodelineIndex
\RecordChanges
\begin{document}
  \DocInput{pst-pdf.dtx}
  \begin{otherlanguage}{english}
    \PrintChanges \clearpage
    \PrintIndex
  \end{otherlanguage}
\end{document}
%</driver>
% \fi
%
% \CheckSum{818}
%
% \CharacterTable
%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%   Digits        \0\1\2\3\4\5\6\7\8\9
%   Exclamation   \!     Double quote  \"     Hash (number) \#
%   Dollar        \$     Percent       \%     Ampersand     \&
%   Acute accent  \'     Left paren    \(     Right paren   \)
%   Asterisk      \*     Plus          \+     Comma         \,
%   Minus         \-     Point         \.     Solidus       \/
%   Colon         \:     Semicolon     \;     Less than     \<
%   Equals        \=     Greater than  \>     Question mark \?
%   Commercial at \@     Left bracket  \[     Backslash     \\
%   Right bracket \]     Circumflex    \^     Underscore    \_
%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%   Right brace   \}     Tilde         \~}
%
% \changes{v1.0a}{2005/01/27}{Initial version.}
% \changes{v1.0b}{2005/01/28}{Some code and documentation cleaning. (RN)}
% \changes{v1.0d}{2005/01/30}{Redefinition of \cmd{\includegraphics} in
%   modes 0 und 1. Now using of eps graphics directly in pdf\LaTeX{} is
%   possible. (RN)}
% \changes{v1.0j}{2005/02/22}{Check AtBeginDocument for package
%   `pstricks' even if ``nopstricks'' is given. (RN)}
% \changes{v1.0j}{2005/02/22}{For \cmd{\includegraphics}
% \cmd{\usepicture} and \string\verb+postscript+ the new options ``frame'',
% ``framesep'', ``framerule'', ``linewidth'', and ``ignore'' added. (RN)}
% \changes{v1.0l}{2005/02/25}{Options ``framesep'', ``framerule'',
% ``linewidth'' removed, ``fname'' and ``innerframe'' added. (RN)}
% \changes{v1.0m}{2005/02/26}{New package option ``notightpage'' added. (RN)}
% \changes{v1.0n}{2005/02/27}{Some code cleaning. (RN)}
% \changes{v1.0n}{2005/02/27}{Changed marcro names (\cmd{\savepicture}
% and \cmd{\usepicture}). (RN)}
% \changes{v1.0o}{2005/03/12}{Option ``fname'' renamed to ``showname''. (RN)}
% \changes{v1.0p}{2005/03/13}{Some code and documentation cleaning. (RN)}
% \changes{v1.0s}{2005/03/28}{Scaling e.g. of PostScript pictures now only
% in extraction mode. Some code cleaning. (RN)}
% \changes{v1.1b}{2005/04/09}{Some code and documentation cleaning. (RN)}
% \changes{v1.1c}{2005/04/17}{New package option ``tightpage'' added. (RN)}
% \changes{v1.1k}{2006/02/10}{New environment pst-pdf-defs: Support for
% PSTricks environment ``psmatrix'' inside user definitions. (RN,HjG)}
% \changes{v1.1m}{2006/03/10}{Merge english and german version of the
% documentation. (RN)}
% \changes{v1.2c}{2017/04/24}{``postscript'' environment no more allowed before 
% \cmd{\begin}{\ttfamily\char`\{document\char`\}} (changed example file). }
% \GetFileInfo{pst-pdf.dtx}
%
% \DoNotIndex{\newcommand,\renewcommand,\newenvironment,\renewenvironment}
% \DoNotIndex{\providecommand,\def,\edef,\let,\gdef,\xdef,\global,\newtoks}
% \DoNotIndex{\chardef,\@namedef,\g@addto@macro,\newif,\newcounter}
% \DoNotIndex{\RequirePackage,\DeclareOption,\ProcessOptions,\ExecuteOptions}
% \DoNotIndex{\input,\endinput,\IfFileExists,\InputIfFileExists}
% \DoNotIndex{\@ifdefinable,\@ifundefined,\@percentchar}
% \DoNotIndex{\iftrue,\iffalse}
% \DoNotIndex{\the,\if,\ifx,\else,\or,\fi,\ifnum,\ifdim,\ifcase,\ifodd}
% \DoNotIndex{\AtBeginDocument,\AtEndDocument,\AtEndOfPackage}
% \DoNotIndex{\PackageError,\PackageWarning,\PackageWarningNoLine,\PackageInfo}
% \DoNotIndex{\message,\MessageBreak,\typeout,\space,\@spaces}
% \DoNotIndex{\@tempa,\@tempb,\x}
% \DoNotIndex{\z@,\z@skip,\p@,\@ne,\tw@,\thr@@,\@iv,\two@fourteen,\strip@pt}
% \DoNotIndex{\advance,\multiply,\divide}
% \DoNotIndex{\@for,\@tfor,\do,\@gobble,\@gobbletwo,\relax,\ignorespaces}
% \DoNotIndex{\csname,\endcsname,\begingroup,\endgroup,\bgroup,\egroup}
% \DoNotIndex{\expandafter,\afterassignment,\aftergroup,\noexpand}
% \DoNotIndex{\setbox,\box,\hbox,\vbox,\ht,\wd,\dp,\llap,\rlap}
% \DoNotIndex{\small,\large,\tiny,\ttfamily,\lowercase}
% \DoNotIndex{\@@,\@empty,\@firstoftwo,\@secondoftwo}
% \DoNotIndex{\@tempboxa,\@tempcnta,\@temptokena,\toks@,\@namedef,\@nameuse}
%
% \providecommand*\env[1]{\textsf{#1}}
% \providecommand*\clsname[1]{\textsf{#1}}
% \providecommand*\pkgname[1]{\textsf{\mbox{#1}}}
% \providecommand*\optname[1]{\textsf{#1}}
% \providecommand*\progname[1]{\textsf{`#1'}}
%
% \providecommand*\PS{Post\-Script}
%
% \newenvironment{optlist}%
% {\begin{description}%
%   \renewcommand\makelabel[1]{%
%     \descriptionlabel{\bfseries\optname{##1}}}%
%   \itemsep0.25\itemsep}%
% {\end{description}}
%
% \newcommand*\META[1]{\meta{\normalfont#1}}
% \newcommand*\TorF{\META{true\textbar false}}
%
% \newif\ifGERMAN  \GERMANfalse
% \newif\ifENGLISH \ENGLISHfalse
% \iflanguage{ngerman}{\GERMANtrue}{%
%   \iflanguage{german}{\GERMANtrue}{\GERMANfalse}}
% \iflanguage{english}{\ENGLISHtrue}{\ENGLISHfalse}
%
% ^^A ----------------------------------------------------------
%
% \ifGERMAN
%   \title{Das Paket \pkgname{pst-pdf}\thanks{Dieses Dokument
%     bezieht sich auf \textsf{pst-pdf}~\fileversion\ vom \filedate.}}
% \fi
% \ifENGLISH
%   \title{The \pkgname{pst-pdf} package\thanks{This document
%     corresponds to \textsf{pst-pdf}~\fileversion, dated \filedate.
%     Thanks to Peter Dyballa for the translation.}}
% \fi
%
% \author{%
%   Rolf Niepraschk\thanks{\texttt{Rolf.Niepraschk@gmx.de}}
%   \and
%   Hubert G\"a{\ss}lein}
% \date{\filedate}
%
% \maketitle
%
% \ifGERMAN
%   \section{Einleitung}
%
%   Das Paket \pkgname{pst-pdf} vereinfacht die Verwendung von
%   PSTricks-Grafiken und anderem \PS-Code in PDF-Dokumenten.
%   \"Ahnlich wie beim Erstellen des Literaturverzeichnisses mit bib\TeX{}
%   werden zus\"atzlich externe Programme aufgerufen. Sie dienen in
%   diesem Fall dazu, eine PDF-Datei, die s\"amtliche Grafiken
%   enth\"alt, zu erzeugen. Ihr Inhalt wird im endg\"ultigen Dokument
%   statt des urspr\"unglichen \PS-Codes eingef\"ugt.
% \fi
%
% \ifENGLISH
%   \section{Introduction}
%
%   The package \pkgname{pst-pdf} simplifies the use of graphics from
%   PSTricks and other \PS\ code in PDF documents. As in building a
%   bibliography with \BibTeX{} additional external programmes are being
%   invoked. In this case they are used to create a PDF file
%   (\cmd{\PDFcontainer}) that will contain all this graphics material. In the
%   final document this contents will be inserted instead of the original
%   \PS\ code.
% \fi
%
% \ifGERMAN
%   \section{Anwendung}
% \fi
%
% \ifENGLISH
%   \section{Usage}
% \fi
%
% \ifGERMAN
%   \subsection{Paketoptionen}
%
%   \begin{optlist}
%
%     \item[active] Aktiviert den Extraktionsmodus (DVI-Ausgabe).
%     Die explizite Angabe ist normalerweise unn\"otig (Standard im
%     \LaTeX-Modus).
%
%     \item[inactive] Keine besonderen Aktionen; es werden nur die
%     Pakete \pkgname{pstricks} und \pkgname{graphicx} geladen
%     (Standard bei Verwendung von V\TeX). Kann dazu benutzt werden,
%     um das Dokument mit \LaTeX\ in eine DVI-Datei zu wandeln und
%     dabei die automatische Verwendung des Extraktionsmodus' zu vermeiden.
%
%     \item[pstricks] Das Paket \pkgname{pstricks} wird geladen
%     (Standard).
%
%     \item[nopstricks] Das Paket \pkgname{pstricks} wird nicht
%     geladen. Wird sp\"ater festgestellt, dass \pkgname{pstricks} doch
%     noch anderweitig geladen wurde, wird die Umgebung |pspicture|
%     nachtr\"aglich in der Weise behandelt, als w\"are die Option
%     ``pstricks'' doch angegeben worden.
%
%     \item[draft] Im pdf\LaTeX-Modus werden aus der
%     Containerdatei eingef\"ugte Grafiken nur als Rahmen dargestellt.
%
%     \item[final] Im pdf\LaTeX-Modus werden aus der
%     Containerdatei eingef\"ugte Grafiken vollst\"andig
%     dargestellt (Standard).
%
%     \item[tightpage] Die Abmessung Grafiken in der Containerdatei
%     entsprechen denen der zugeh\"origen \TeX-Boxen (Standard).
%
%     \item[notightpage]
%     Die Abmessung der zur Grafik geh\"orenden \TeX-Box ist manchmal
%     nicht korrekt, da \PS-Anweisungen auch au{\ss}erhalb der Box
%     zeichnen k\"onnen. Die Option ``notightpage'' f\"uhrt dazu, dass die
%     Grafiken in der Containerdatei mindestens die Gr\"o{\ss}e des
%     gesamten Blattes einnehmen. Um die Grafiken
%     im sp\"ateren pdf\LaTeX-Lauf verwenden zu k\"onnen, muss die
%     Containerdatei nachbearbeitet werden, so dass die Gr\"o{\ss}e der
%     Grafiken auf die der sichtbaren Bestandteile reduziert ist. Dazu
%     kann z.\,B. das Programm |pdfcrop|\footnote{%
%     CTAN:~\url{support/pdfcrop/}} dienen. Die Anwendung dieses Verfahrens
%     kann die Angabe der Option ``trim'' er\"ubrigen (siehe
%     Abschnitt~\ref{sec:copt}).
%
%     \item[displaymath]
%     Es werden zus\"atzlich die mathematischen Umgebungen
%     \env{displaymath}, \env{eqnarray} und \env{\$\$} extrahiert und im
%     pdf-Modus
%     als Grafik eingef\"ugt. So k\"onnen zus\"atzliche PSTricks-Erg\"anzungen
%     leicht dem Inhalt dieser Umgebungen zugef\"ugt werden. (Frage: Wie
%     verhalten sich die AMS\LaTeX-Umgebungen?)
%
%     \item[\meta{other}] Alle anderen Optionen werden an das Paket
%     \pkgname{pstricks} weitergereicht.
%
%   \end{optlist}
% \fi
% \ifENGLISH
%   \subsection{Package options}
%
%     \begin{optlist}
%
%     \item[active] Activates the extraction mode (DVI output). An explicit
%       declaration usually is not necessary (default in \LaTeX\ mode).
%
%     \item[inactive] No special actions; only the packages
%       \pkgname{pstricks} and \pkgname{graphicx} are loaded (default in
%       V\TeX). Can be used to just convert the document with \LaTeX\ into a
%       DVI file while avoiding the automatic extraction mode.
%
%     \item[pstricks] The package \pkgname{pstricks} is loaded (default).
%
%     \item[nopstricks] The package \pkgname{pstricks} does not get loaded.
%       Once it is detected that \pkgname{pstricks} was loaded however in
%       some other way, the \env{pspicture} environment is treated as if the
%       option ``pstricks'' was given.
%
%     \item[draft] From the \cmd{\PDFcontainer} file included graphics is
%       displayed as frame in pdf\LaTeX\ mode.
%
%     \item[final] From the \cmd{\PDFcontainer} file included graphics is
%       correctly displayed in pdf\LaTeX\ mode (default).
%
%     \item[tightpage] The graphics' dimensions in the \cmd{\PDFcontainer}
%       file match exactly those of the corresponding \TeX\ boxes (default).
%
%     \item[notightpage] The dimensions of the \TeX\ box corresponding to its
%       graphics is not always correct, since a \PS\ statement can draw
%       outside its box. The option ``notightpage'' makes the graphics in the
%       \cmd{\PDFcontainer} file to be at least the size of the whole page.
%       To be able to make use of the graphics' in a later pdf\LaTeX\ run,
%       the \cmd{\PDFcontainer} file needs to be finished in a way that each
%       graphics gets reduced in size to its visible part. For this an
%       external programme like
%       |pdfcrop|\footnote{CTAN:~\url{support/pdfcrop/}} can be useful. Its
%       use can save declaring the option ``trim'' (see also
%       section~\ref{sec:copt}).
%
%     \item[displaymath] In PDF mode the mathematical environments
%       \env{displaymath}, \env{eqnarray}, and \env{\$\$} get also extracted
%       and included as graphics. This way additional PSTricks extensions can
%       easily be added to the contents of these environments. (Question: how
%       do AMS\LaTeX\ environments behave?)
%
%     \item[\meta{other}] All other options are passed to \pkgname{pstricks}
%       package.
%
%     \end{optlist}
% \fi
% \ifGERMAN
%   \subsection{Programmaufrufe}
%
%   Die folgende Tabelle zeigt den Ablauf, der n\"otig ist, um ein
%   PDF-Dokument mit \PS-Grafiken zu erzeugen\footnote{%
%   Die Shell-Scripte |ps4pdf| bzw. |ps4pdf.bat| f\"uhren alle angegebenen
%   Programmaufrufe automatisch aus.}. Im Vergleich dazu ist der
%   analoge Ablauf f\"ur Literaturverzeichnisse angegeben.\bigskip
%
%   \newcolumntype{P}[1]{>{\mbox{}\raggedright}p{#1}}
%   \noindent
%   \begin{tabular}[t]{@{}P{.65\linewidth}@{}P{.35\linewidth}@{}}
%     \textbf{\PS-Grafiken} & \textbf{Literaturverzeichnis} \tabularnewline
%     \toprule
%     |pdflatex document.tex| & |pdflatex document.tex|
%     \tabularnewline\midrule
%     \multicolumn{2}{@{}c@{}}{\emph{Hilfsaufrufe}} \tabularnewline
%     |latex document.tex| \tabularnewline
%     |dvips -o document-pics.ps document.dvi| \tabularnewline
%     |ps2pdf document-pics.ps|
%     &
%     |bibtex document.aux|
%     \tabularnewline\midrule
%     |pdflatex document.tex| & |pdflatex document.tex|
%   \end{tabular}\bigskip
%
%   Bei der Erzeugung wird nur
%   Code ber\"ucksichtigt, der sich innerhalb der Umgebungen |pspicture|
%   oder |postscript| befindet. Ebenfalls werden \PS-Grafiken, die
%   als Parameter von \cmd{\includegraphics} angegeben wurden, der
%   Containerdatei hinzugef\"ugt.
%   Der Name dieser Datei ist standardm\"a{\ss}ig
%   \meta{\cmd{\jobname}}|-pics.pdf|.
%   Er kann durch Umdefinieren des Makros
%   \cmd{\PDFcontainer} ge\"andert werden. \medskip
% \fi
% \ifENGLISH
%   \subsection{Program calls}
%
%   The following table shows the course necessary to create a PDF document
%   containing \PS\ graphics\footnote{The \TeX\ distribution ``te\TeX''
%     contains a UNIX shell script |ps4pdf| which executes all the necessary
%     steps. See: CTAN:~\url{macros/latex/contrib/ps4pdf/}}. As comparison
%   the analogous course for a bibliography is shown.\bigskip
%
%   \newcolumntype{P}[1]{>{\mbox{}\raggedright}p{#1}}
%   \noindent
%   \begin{tabular}[t]{@{}P{.65\linewidth}@{}P{.35\linewidth}@{}}
%     \textbf{\PS\ graphics} & \textbf{bibliography} \tabularnewline
%     \toprule
%     |pdflatex document.tex| & |pdflatex document.tex|
%     \tabularnewline\midrule
%     \multicolumn{2}{@{}c@{}}{\emph{auxiliary calls}} \tabularnewline
%     |latex document.tex| \tabularnewline
%     |dvips -o document-pics.ps document.dvi| \tabularnewline
%     |ps2pdf document-pics.ps|
%     &
%     |bibtex document.aux|
%     \tabularnewline\midrule
%     |pdflatex document.tex| & |pdflatex document.tex|
%   \end{tabular}\bigskip
%
%   While creating the output only code from inside a \env{pspicture} or
%   \env{postscript} environment is considered. \PS\ graphics files, which
%   are passed as parameter of an \cmd{\includegraphics} statement, too are
%   included into the \cmd{\PDFcontainer} file. This file's name is by
%   default \meta{\cmd{\jobname}}|-pics.pdf|. It can be changed by
%   re-defining the macro \cmd{\PDFcontainer}. \medskip
% \fi
%
% \ifGERMAN
%   \subsection{Nutzeranweisungen}
%
%   \DescribeEnv{pspicture}
%   \indent\cmd{\begin}|{pspicture}|\oarg{keys}%
%     \parg{x0,x1}\parg{y0,y1} \dots\cmd{\end}|{pspicture}|
%   \par\noindent
%   Die |pspicture|-Umgebung steht zur Verf\"ugung, wenn nicht die Option
%   ``|nopstricks|'' angegeben wurde. Sie wird so wie in PSTricks \"ublich
%   verwendet. Im pdf\LaTeX-Modus wird ihr Inhalt nur dann dargestellt,
%   wenn vorher die Containerdatei erzeugt wurde.
%   \medskip
%
%   \DescribeEnv{postscript}
%   \cmd{\begin}|{postscript}|\oarg{keys} \dots\cmd{\end}|{postscript}|
%   \par\noindent
%   Die |postscript|-Umgebung kann beliebigen Code mit Ausnahme von
%   Gleitumgebungen aufnehmen. Im pdf\LaTeX-Modus wird ihr Inhalt
%   ebenfalls der Containerdatei entnommen. Ist diese Datei nicht
%   vorhanden, wird -- anders als bei der |pspicture|-Umgebung -- der
%   sp\"ater ben\"otigte Platz m\"oglicherweise nicht korrekt frei gehalten.
%   \medskip
%
%   \DescribeMacro{\includegraphics}
%   \cmd{\includegraphics}\oarg{keys}\marg{filename}
%   \par\noindent
%   Wie in \pkgname{graphics}/\pkgname{graphicx} definiert zu verwenden.
%   Zus\"atzlich ist es nun m\"oglich, auch im pdf\LaTeX-Modus
%   EPS-Dateien als Argument anzugeben und ihren Inhalt darzustellen. Er
%   wird dazu ebenfalls der Containerdatei entnommen.
%   \medskip
%
%   \newcommand*\ooarg[1]{{\ttfamily<}\meta{#1}{\ttfamily>}}
%
%   \DescribeMacro{\includegraphicx}
%   \cmd{\includegraphicx}\oarg{keys}\parg{pfxadd}\ooarg{ovpfgd}\oarg{ovpbgd}%
%     \marg{filename}
%   \par\noindent
%   Wie im Paket \pkgname{psfragx} definiert zu verwenden.
%   \medskip
%
%   \DescribeMacro{\savepicture}
%   \cmd{\savepicture}\marg{name}
%   \par\noindent
%   Die zuletzt ausgegebene Grafik (Ergebnisse der Umgebungen |pspicture|,
%   |postscript| und der \cmd{\includegraphics}-Anweisungen mit
%   \PS-Dateien) wird unter dem als Parameter \"ubergebenen
%   Namen gespeichert.
%   \medskip
%
%   \DescribeMacro{\usepicture}
%   \cmd{\usepicture}\oarg{keys}\marg{name}
%   \par\noindent
%   Die zuvor mit \cmd{\savepicture} gespeicherte Grafik wird
%   ausgegeben. Der optionale Parameter entpricht dem bei der Anweisung
%   \cmd{\includegraphics} m\"oglichen.
%   \medskip
%
%   \DescribeEnv{pst-pdf-defs}
%   \cmd{\begin}\texttt{\{pst-pdf-defs\}} \dots
%   \cmd{\end}\texttt{\{pst-pdf-defs\}}
%   \par\noindent
%   Sollen eigene Makros oder Umgebungen definiert werden, die das Zeichen
%   \texttt{\&} (andere?) im Ersetzungstext enthalten, so m\"ussen diese
%   Definitionen von der Umgebung |pst-pdf-defs| umschlossen werden.
%   \medskip
% \fi
%
% \ifENGLISH
%   \subsection{User commands}
%
%   \DescribeEnv{pspicture}
%   \indent\cmd{\begin}|{pspicture}|\oarg{keys}%
%     \parg{x0,x1}\parg{y0,y1} \dots\cmd{\end}|{pspicture}|
%   \par\noindent
%   The \env{pspicture} environment is not available when the option
%   ``|nopstricks|'' was given. It is to be used the same way as if in
%   PSTricks. In pdf\LaTeX\ mode this environment's contents is only
%   displayed when the \cmd{\PDFcontainer} file was created before.
%   \medskip
%
%   \DescribeEnv{postscript}
%   \cmd{\begin}|{postscript}|\oarg{keys} \dots\cmd{\end}|{postscript}|
%   \par\noindent
%   The \env{postscript} environment can contain any code except floats. In
%   pdf\LaTeX\ mode its contents is take too off the \cmd{\PDFcontainer}
%   file. Other as in the \env{pspicture} environment the necessary space is
%   not always preserved when the \cmd{\PDFcontainer} file does not exist yet.
%   \medskip
%
%   \DescribeMacro{\includegraphics}
%   \cmd{\includegraphics}\oarg{keys}\marg{filename}
%   \par\noindent
%   To be used as in \pkgname{graphics}/\pkgname{graphicx} defined. In
%   pdf\LaTeX\ mode it is now additionally feasable to pass the name of an
%   EPS file. Its visible contents too is taken from the \cmd{\PDFcontainer}
%   file.
%   \medskip
%
%   \newcommand*\ooarg[1]{{\ttfamily<}\meta{#1}{\ttfamily>}}
%
%   \DescribeMacro{\includegraphicx}
%   \cmd{\includegraphicx}\oarg{keys}\parg{pfxadd}\ooarg{ovpfgd}\oarg{ovpbgd}%
%     \marg{filename}
%   \par\noindent
%   To be used like defined in package\pkgname{psfragx}.
%   \medskip
%
%   \DescribeMacro{\savepicture}
%   \cmd{\savepicture}\marg{name}
%   \par\noindent
%   The last output graphics (result of the \env{pspicture} or \env{postscript}
%   environments or the \cmd{\includegraphics} statement with an \PS\ file as
%   argument) is being saved in a file under the name as given by the parameter.
%   \medskip
%
%   \DescribeMacro{\usepicture}
%   \cmd{\usepicture}\oarg{keys}\marg{name}
%   \par\noindent
%   The graphic previously stored with \cmd{\savepicture} is outputted. The 
%   optional parameter corresponds to \cmd{\includegraphics}.
%   \medskip
%
%   \DescribeEnv{pst-pdf-defs}
%   \cmd{\begin}\texttt{\{pst-pdf-defs\}} \dots
%   \cmd{\end}\texttt{\{pst-pdf-defs\}}
%   \par\noindent
%   For defining macros or environments, which contain character \texttt{\&}
%   (others?) in the output, these defintions have to be wrapped with
%   environment |pst-pdf-defs|.
%   \medskip
% \fi
%
% \ifGERMAN
% \subsection{Command options} \label{sec:copt}
% Das Verhalten der Anweisungen \cmd{\includegraphics}, \cmd{\usepicture}
% und der  Umgebung |postscript| kann mit den folgenden optionalen
% Parametern beeinflusst werden (key-value-Syntax):
%   \begin{optlist}
%
%     \item[frame=\TorF] Es wird -- \"ahnlich wie bei der
%     Anweisung \cmd{\fbox}~-- ein Rahmen um die Grafik gezeichnet. Die
%     durch Rotation ge\"anderte Gesamtgr\"o{\ss}e wird dabei
%     ber\"ucksichtigt. Das Zeichnen geschieht im
%     pdf\LaTeX-Modus; vorher beim Erzeugen der Containerdatei wird dieser
%     Parmeter ignoriert. Standard: false.
%
%     \item[innerframe=\TorF] Wie ``|frame|'' jedoch
%     wird der Rahmen nur um die Grafik selbst, nicht aber um die
%     resultierende Box gezeichnet.
%
%     \item[ignore=\TorF] Bei ``|true|'' wird die Grafik
%     nicht ausgegeben. Bei Angabe von \cmd{\savepicture}\marg{name}
%     kann sie sp\"ater jedoch  an anderer Stelle mit
%     \cmd{\usepicture} verwendet werden. Standard: false.
%
%     \item[showname=\TorF] Gibt in kleiner
%     Schrift den tats\"achlich verwendeten Dateinamen unter der Grafik
%     aus. Standard: false.
%
%     \item[namefont=\META{font commands}] Beinflusst die Schriftart,
%     die bei ``|showname=true|'' benuzt wird. Standard:
%     \cmd{\ttfamily}\cmd{\tiny}
%
%   \end{optlist}
%
%   Alle Parameter k\"onnen auch global per
%   \cmd{\setkeys}|{Gin}|\marg{key=value} gesetzt werden.
% \fi
%
% \ifENGLISH
% \subsection{Command options} \label{sec:copt}
% The behaviour of the \cmd{\includegraphics} and \cmd{\usepicture}
% statements and the \env{postscript} environment can be modified with any
% of the following parameters (key value syntax):
%   \begin{optlist}
%
%   \item[frame=\TorF] As with the \cmd{\fbox} statement a frame is drawn
%     around the graphics. Any change of size due to rotation is taken into
%     account. Drawing happens in pdf\LaTeX\ mode; before, in creating the
%     \cmd{\PDFcontainer} file, it is ignored. Default: false.
%
%   \item[innerframe=\TorF] As in ``|frame|'', but the frame is drawn
%     around the gra\-phics, not its box.
%
%   \item[ignore=\TorF] If set to ``|true|'' no graphics are outputted. With 
%     macro \cmd{\savepicture}\marg{name} the graphics can be used later in a
%     different place via \cmd{\usepicture}. Default: false.
%
%   \item[showname=\TorF] A caption of minimal font size records the used
%     file's name. Default: false.
%
%   \item[namefont=\META{font commands}] Controls the font used when
%     ``|showname=true|'' is set. Default: \cmd{\ttfamily}\cmd{\tiny}
%
%   \end{optlist}
%
%   All parameters can be set globally as in
%   \cmd{\setkeys}|{Gin}|\marg{key=value}.
% \fi
%
%   \bigskip \pagebreak[2]
%
% \StopEventually{}
%
% \section{Implementation}
%
%    \begin{macrocode}
%<*package>
%    \end{macrocode}
% \subsection{Package options}
% \changes{v1.0c}{2005/01/29}{New options ``pstricks'', ``nopstricks'',
% ``draft'' and ``\mbox{final}''. (RN)}
% \changes{v1.1e}{2005/04/30}{New option ``displaymath'' (see preview
%   package). (HjG/RN)}
% \changes{v1.1f}{2005/04/30}{Package option ``ignore'' reimplemented.
%   Now the compilation of the dtx file in \LaTeX\ mode is possible. (RN)}
%    \begin{macrocode}
\newcommand*\ppf@TeX@mode{-1}
\newcommand*\ppf@draft{false}
\newif\if@ppf@PST@used\@ppf@PST@usedtrue
\newif\if@ppf@tightpage \@ppf@tightpagetrue
\DeclareOption{active}{\OptionNotUsed}
\DeclareOption{inactive}{\def\ppf@TeX@mode{9}}
\DeclareOption{ignore}{\def\ppf@TeX@mode{999}}
\DeclareOption{pstricks}{\@ppf@PST@usedtrue}
\DeclareOption{nopstricks}{\@ppf@PST@usedfalse}
\DeclareOption{displaymath}{%
  \PassOptionsToPackage\CurrentOption{preview}}
\DeclareOption{draft}{\def\ppf@draft{true}}
\DeclareOption{final}{\def\ppf@draft{false}%
  \PassOptionsToPackage\CurrentOption{graphicx}}
%    \end{macrocode}
% \changes{v1.1i}{2005/06/29}{Package option ``final'' also
%   for ``graphicx''. (RN)}
%    \begin{macrocode}
\DeclareOption{notightpage}{\@ppf@tightpagefalse}%
\DeclareOption{tightpage}{\@ppf@tightpagetrue}%
\DeclareOption*{%
  \PassOptionsToPackage\CurrentOption{pstricks}}
\ProcessOptions\relax
\ifnum\ppf@TeX@mode=999\relax\expandafter\endinput\fi
%    \end{macrocode}
% \ifGERMAN
% \subsection{Compilertests}
% Es wird getestet, welcher \TeX\ compiler in welchem Modus
% l\"auft (siehe `|graphics.cfg|' von te\TeX/\TeX Live). Entsprechend
% dem Ergebnis bekommen die Umgebungen |pspicture| und |postscript|
% unterschiedliche Funktionalit\"at. Der Test wird nur ausgef\"uhrt,
% wenn nicht die Paketoptionen |active| oder |inactive| angegeben wurden.
% \fi
% \ifENGLISH
% \subsection{Compiler tests}
% It is tested which \TeX\ compiler in which mode of operation is actually
% used (see `|graphics.cfg|' in te\TeX/\TeX\ Live). Accordingly the
% environments \env{pspicture} and \env{postscript} gain each a different
% range of functions. This test is only executed when the options |active|
% or |inactive| were not given.
% \fi
% \changes{v1.2a}{2016/07/11}{Engine tests changed (RN)}
% \changes{v1.2b}{2017/02/25}{Loading packages `if*' at wrong place (RN)} 
%    \begin{macrocode}
\RequirePackage{ifpdf,ifxetex,ifvtex}
\ifnum\ppf@TeX@mode=-1\relax
  \ifpdf
%    \end{macrocode}
% \quad$\Rightarrow$\,pdf\TeX{} or Lua\TeX{} are running in PDF mode
%    \begin{macrocode}
    \def\ppf@TeX@mode{1}%
    \RequirePackage{luatex85}%
  \else
    \ifvtex
%    \end{macrocode}
% \quad$\Rightarrow$\,V\TeX{} 
%    \begin{macrocode}
      \def\ppf@TeX@mode{9}%
    \else
      \ifxetex
%    \end{macrocode}
% \quad$\Rightarrow$\,Xe\TeX{} 
%    \begin{macrocode}
        \def\ppf@TeX@mode{9}%
      \else
%    \end{macrocode}
% \quad$\Rightarrow$\,DVI mode
%    \begin{macrocode}
        \def\ppf@TeX@mode{0}%
      \fi
    \fi
  \fi
\fi
%    \end{macrocode}
% \changes{v1.0g}{2005/02/12}{Definition of \cmd{\PDFcontainer}
%   now with \cmd{\edef}. (RN)}
%    \begin{macrocode}
\newcommand*\PDFcontainer{}
\edef\PDFcontainer{\jobname-pics.pdf}
\newcounter{pspicture}
\newcommand*\ppf@other@extensions[1]{}
\newcommand*\usepicture[2][]{}
\newcommand*\savepicture[1]{}
%    \end{macrocode}
%
% \begin{environment}{pst-pdf-defs}
%    \begin{macrocode}
\newenvironment*{pst-pdf-defs}{%
  \endgroup
%    ??? \@currenvline
}{%
  \begingroup
  \def\@currenvir{pst-pdf-defs}%
}
%    \end{macrocode}
% \end{environment}
%
% \changes{v1.2d}{2017/06/22}{Version parameter for `graphicx' and rename 
%   \cmd{\GPT@page} to \cmd{\Gin@page} at several places}
%    \begin{macrocode}
\RequirePackage{graphicx}[2017/06/01]%
\let\ppf@Ginclude@graphics\Ginclude@graphics
\let\ppf@Gin@extensions\Gin@extensions
\let\ppf@Gin@ii\Gin@ii
%    \end{macrocode}
%    \begin{macrocode}
\newif\if@ppf@pdftex@graphic
\newif\ifGin@frame\Gin@framefalse
\newif\ifGin@innerframe\Gin@innerframefalse
\newif\ifGin@showname\Gin@shownamefalse
\newif\ifGin@ignore\Gin@ignorefalse
%    \end{macrocode}
% \ifGERMAN
% \cmd{\ifpr@outer} wird eigentlich im Paket \pkgname{preview} definiert.
% Wir m\"ussen es aber be\-reits hier zus\"atzlich tun, da sonst \TeX\ u.\,U.
% beim Parsen der \cs\texttt{ifcase}-Struktur ``au{\ss}er Tritt'' kommt.
% \fi
% \ifENGLISH
% \cmd{\ifpr@outer} in fact is defined in package \pkgname{preview}. We
% have to do it here too since otherwise \TeX\ could ``stumble and fall''
% while parsing the \cs\texttt{ifcase} structure.
% \fi
% \changes{v1.1i}{2005/06/29}{\cmd{\ifpr@outer} must be predefined. (HjG/RN)}
%    \begin{macrocode}
\newif\ifpr@outer
%    \end{macrocode}
% \begin{macro}{\ppf@is@pdfTeX@graphic}
% \changes{v1.0i}{2005/02/18}{No more errors for given files without
%   extensions. (RN)}
% \changes{v1.0r}{2005/03/25}{Changed \cmd{\ppf@is@known@graphic} to
%   \cmd{\ppf@is@pdfTeX@graphic}. Now pdf\TeX\ graphics are prefered. (RN)}
% \changes{v1.2e}{2019/11/15}{Parameter \string\verb+#2+ is detokenized when 
%   expanded to \cmd{\pdfTeXext}}
% \ifGERMAN
% Parameter |#1| ist der Name einer Grafikdatei mit oder ohne Endung,
% Parameter |#2| enth\"alt die g\"ultigen Dateiendungen im pdf-Modus,
% Parameter |#3| enth\"alt die g\"ultigen Dateiendungen im dvi-Modus.
% Ist es m\"oglich, die Grafik im pdf-Modus zu verarbeiten, werden die
% Anweisungen in |#4| ausgef\"uhrt, sonst die in |#5|.
% \fi
% \ifENGLISH
% Parameter |#1| is the name of a graphics file with or without extension,
% parameter |#2| contains the valid extensions in PDF mode,
% parameter |#3| contains the valid extensions in DVI mode.
% If it works to process the graphics in PDF mode, then the statements
% in |#4| are executed, otherwise those in |#5|.
% \fi
%    \begin{macrocode}
\newcommand*\ppf@is@pdfTeX@graphic[5]{%
  \@ppf@pdftex@graphicfalse%
  \begingroup
    \edef\pdfTeXext{,#2,}%
    \edef\pdfTeXext{\detokenize\expandafter{\pdfTeXext}}%
%    \end{macrocode}
% \ifGERMAN
% Statt Einladen einer identifizierten Grafik nur Test der Grafikendung.
% \fi
% \ifENGLISH
% Instead of loading the found graphics, only a test on file name extension.
% \fi
%    \begin{macrocode}
    \def\Gin@setfile##1##2##3{%
      \edef\@tempa{,##2,}%
      \@expandtwoargs\in@{\detokenize\expandafter{\@tempa}}{\pdfTeXext}%
      \ifin@\global\@ppf@pdftex@graphictrue\fi}%
%    \end{macrocode}
% \ifGERMAN
% Es m\"ussen Dateitypen beider Moden gefunden werden, um
% die Fehlermeldung ``File `|#1|' not found'' zu vermeiden.
% \fi
% \ifENGLISH
% File types for both modes need to be determined to prevent a wrong
% error message ``File `|#1|' not found''.
% \fi
%    \begin{macrocode}
    \edef\Gin@extensions{#2,#3}%
%    \end{macrocode}
% \ifGERMAN
% Testaufruf. Dabei Ausgabe vollst\"andig verhindern.
% \fi
% \ifENGLISH
% Trial invocation. Output is completely inhibited.
% \fi
%    \begin{macrocode}
    \pr@outerfalse\ppf@Ginclude@graphics{#1}%
  \endgroup
  \if@ppf@pdftex@graphic#4\else#5\fi
}
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
\ifcase\ppf@TeX@mode\relax
%    \end{macrocode}
% \ifGERMAN
% \subsection{Extraction mode (dvi output)}
% Die Umgebung |pspicture| beh\"alt die Definition aus |pstricks.tex|.
% Aus\-schlie{\ss}\-lich der Code der Umgebungen |pspicture| und
% |postscript| sowie \cmd{\includegraphics} mit PS-Dateien bewirken
% Eintr\"age in die DVI-Datei. Der
% restliche Code des Dokuments wird bei der Ausgabe der DVI-Datei
% ignoriert. Nach Wandlung der DVI-Datei \"uber \PS\ (``|dvips|'')
% nach PDF (Datei \cmd{\PDFcontainer}) nimmt jede Grafik
% genau eine Seite der pdf-Datei ein.
% Der \TeX-Compiler mit DVI-Ausgabe sowie die Paketoption ``|active|''
% erzwingen diesen Modus.
% \fi
% \ifENGLISH
% \subsection{Extraction mode (DVI output)}
% The \env{pspicture} environment retains any definition from
% |pstricks.tex|. Only the code from the environments \env{pspicture} and
% \env{postscript} as well as \cmd{\includegraphics} with \PS\ files leads
% to records into the DVI file. The remainder of the document's code is
% ignored for output. After conversion of the DVI file via \PS\
% (``|dvips|'') into PDF (\cmd{\PDFcontainer} file) each graphics takes
% exactly one page in the \cmd{\PDFcontainer} file. The \TeX\ compiler with
% DVI output and the package option ``|active|'' both force this mode.
% \fi
% \changes{v1.1n}{2006/07/14}{\cmd{\nofiles} added (suggestion of Torsten
%   Bronger).}
% \changes{v1.1p}{2007/06/04}{\cmd{\nofiles} makes \cmd{\makeindex} and
%   \cmd{\makeglossary} to \cmd{\relax}. \cmd{\@empty} is better
%   because of later \cmd{\renewcommand}'s.}
% \changes{v1.2e}{2019/11/15}{gobble optional argument for \cmd{\makeindex}, 
%   \cmd{\makeglossary} and \cmd{\printindex}}
% \changes{v1.1q}{2008/02/17}{\cmd{\overfullrule} must not be > 0.}
%    \begin{macrocode}
  \PackageInfo{pst-pdf}{%
    MODE: \ppf@TeX@mode\space (dvi -- extraction mode)}%
  \nofiles
  \let\makeindex\@empty \let\makeglossary\@empty \let\printindex\@empty
  \renewcommand*\makeindex[1][]{}%
  \renewcommand*\makeglossary[1][]{}%
  \renewcommand*\printindex[1][]{}%
  \AtBeginDocument{\overfullrule=\z@}%
  \if@ppf@PST@used\RequirePackage{pstricks}\fi
  \RequirePackage[active,dvips,tightpage]{preview}[2005/01/29]%
  \newcommand*\ppf@PreviewBbAdjust{}%
  \newcommand*\ppf@RestoreBbAdjust{%
    \let\PreviewBbAdjust\ppf@PreviewBbAdjust}%
%    \end{macrocode}
% \ifGERMAN
% Es werden auch die im pdf\LaTeX-Modus erlaubten Endungen von Grafikdateien
% ben\"otigt (Argument aus `pdftex.def' -- 2020/10/05 -- kopiert).
% \fi
% \ifENGLISH
% The pdf\LaTeX\ mode compliant graphics file formats are needed too.
% (Argument copied from `pdftex.def' -- 2020/10/05).
% \fi
% \changes{v1.1u}{2008/09/16}{\cmd{\pdfoutput} must be set when
%   loading ``pdftex.def'' in DVI mode. (RN)}
% \changes{v1.1v}{2008/10/09}{Local redefinition of \cmd{\pdfoutput} to be a 
%   counter. (RN)}
% \changes{v1.2f}{2020/10/10}{No more loading of file `pdftex.def' (RN)}
%    \begin{macrocode}
  \def\ppf@other@extensions{%
    .pdf,.png,.jpg,.mps,.jpeg,.jbig2,.jb2,%
    .PDF,.PNG,.JPG,.JPEG,.JBIG2,.JB2%
  }  
%    \end{macrocode}
% \changes{v1.1c}{2005/04/17}{Supress handling of pdf\LaTeX\ graphic
%   formats in DVI mode. (RN)}
% \ifGERMAN
% F\"ur die im PDF-Modus m\"oglichen Grafikformate d\"urfen keine
% speziellen Regeln definiert sein (z.\,B. wegen
% \progname{dvips}-Erweiterungen). F\"ur sie wird die universelle
% EPS-Regel verwendet, damit sie zumindest gefunden werden.
% \fi
% \ifENGLISH
% In PDF mode no rules must be defined for its compliant (PNG, JPEG, PDF)
% graphics file formats (because of for example \progname{dvips} extensions).
% The universal EPS rule is used to at least find these files.
% \fi
%    \begin{macrocode}
  \AtBeginDocument{%
    \@ifpackageloaded{keyval}{%
      \def\KV@errx#1{\PackageInfo{keyval}{#1}}%
      }{}%
    \@ifpackageloaded{xkeyval}{%
      \def\XKV@err#1{\PackageInfo{xkeyval}{#1}}%
    }{}%
%    \end{macrocode}
% \ifGERMAN
% In diesem Modus sollten undefinierte keys keinen Fehler bewirken.
% \fi
% \ifENGLISH
% In this mode undefined keys should not be an error.
% \fi
%    \begin{macrocode}
    \@for\@tempa:=\ppf@other@extensions\do{%
      \expandafter\let\csname Gin@rule@\@tempa\endcsname\relax}%
    \DeclareGraphicsRule{*}{eps}{*}{}}%
%    \end{macrocode}
% \ifGERMAN
% In diesem Modus keine Funktion.
% \fi
% \ifENGLISH
% No function in this mode.
% \fi
% \changes{v1.1s}{2008/05/25}{Dummy definition of the page key in DVI mode.}
%    \begin{macrocode}
  \define@key{Gin}{innerframe}[true]{}%
  \define@key{Gin}{frame}[true]{}%
  \define@key{Gin}{ignore}[true]{}%
  \define@key{Gin}{showname}[true]{}%
  \define@key{Gin}{namefont}{}%
  \@ifundefined{Gin@page}{\define@key{Gin}{page}{}}{}%
%    \end{macrocode}
% \changes{v1.0o}{2005/03/12}{New code for ``notightpage''. (RN)}
% \changes{v1.1r}{2008/05/02}{Fixed values for \cmd{\PreviewBbAdjust} 
%   because \cmd{\paperwidth} is not allways defined (suggested by Will 
%   Robertson).}
%    \begin{macrocode}
  \if@ppf@tightpage\else
    \def\PreviewBbAdjust{%
      -600pt -600pt 600pt 600pt}%
    \AtEndDocument{%
      \PackageWarningNoLine{pst-pdf}{Picture container needs cropping.}}%
  \fi
%    \end{macrocode}
% \begin{environment}{postscript}
% \changes{v1.0e}{2005/02/03}{``trim'' option added. (RN)}
% \ifGERMAN
% Die Umgebung \env{postscript} wertet die trim-Option in derselben
% Weise wie \cmd{\includegraphics} aus (Angaben ohne Ma{\ss}einheit
% werden als bp interpretiert).
% \fi
% \ifENGLISH
% The \env{postscript} environment utilises the trim option in the same
% manner as does \cmd{\includegraphics} (any specification without dimension
% is interpreted as if given in bp).
% \fi
%    \begin{macrocode}
  \newenvironment{postscript}[1][]%
  {%
    \global\let\ppf@PreviewBbAdjust\PreviewBbAdjust
    \if@ppf@tightpage
      \begingroup
        \setkeys{Gin}{#1}%
        \xdef\PreviewBbAdjust{%
          -\Gin@vllx bp -\Gin@vlly bp \Gin@vurx bp \Gin@vury bp}%
      \endgroup
    \fi
    \ignorespaces
  }%
  {\aftergroup\ppf@RestoreBbAdjust}%
%    \end{macrocode}
% \end{environment}
%    \begin{macrocode}
  \PreviewEnvironment{postscript}%
  \AtBeginDocument{%
    \@ifundefined{PSTricksLoaded}{}%
    {%
%    \end{macrocode}
% \begin{environment}{pspicture}
% \ifGERMAN
% Originaldefinition \pkgname{preview} bekannt machen.
% \fi
% \ifENGLISH
% Announce \pkgname{preview} original definition.
% \fi
%    \begin{macrocode}
      \PreviewEnvironment{pspicture}%
%    \end{macrocode}
% \end{environment}
% \begin{environment}{psmatrix}
% \ifGERMAN
% Originaldefinition \pkgname{preview} bekannt machen.
% \fi
% \ifENGLISH
% Announce \pkgname{preview} original definition.
% \fi
%    \begin{macrocode}
      \@ifundefined{psmatrix}{}%
      {%
        \PreviewEnvironment{psmatrix}%
        \newcommand*\ppf@set@mode{}%
        \newcommand*\ppf@test@mmode{%
        \ifmmode
          \ifinner
            \let\ppf@set@mode=$%
          \else
            \def\ppf@set@mode{$$}%
          \fi
        \else
          \let\ppf@set@mode=\@empty
        \fi
        }%
        \let\ppf@psmatrix=\psmatrix
        \expandafter\let\expandafter\ppf@pr@psmatrix%
          \expandafter=\csname pr@\string\psmatrix\endcsname
        \let\ppf@endpsmatrix=\endpsmatrix
        \def\psmatrix{\ppf@test@mmode\ppf@psmatrix}%
        \expandafter\def\csname pr@\string\psmatrix\endcsname{%
          \ppf@set@mode\ppf@pr@psmatrix}%
        \def\endpsmatrix{\ppf@endpsmatrix\ppf@set@mode}%
      }%
%    \end{macrocode}
% \end{environment}
% \ifGERMAN
% Internes Makro \cmd{\pst@object} bekanntmachen, um manchen
% PSTricks-Code au{\ss}erhalb von pspicture-Umgebungen ebenfalls
% verwenden zu k\"onnen. Derzeit sind Aufrufe der folgenden Art
% m\"oglich:
% \begin{flushleft}
%   \cmd{\pst@object}%
%   \marg{m}\meta{\texttt{*}}\oarg{o}\marg{o}\marg{o}\parg{o}\parg{o}\parg{o} \\
%   \qquad (|m|\,$=$\,notwendig, |*|\,$=$\,optional, |o|\,$=$\,optional)
% \end{flushleft}
% Mehr als drei optionale Argumente am Ende des Aufrufs, wie
% bei\-spiels\-wei\-se bei \cmd{\psline} denkbar, sind noch nicht m\"oglich.
% \fi
% \ifENGLISH
% Announce internal macro \cmd{\pst@object} to enable the use of some
% PSTricks code outside of \env{pspicture} environments. At the moment
% invocations of the following kind are feasible:
% \begin{flushleft}
%   \cmd{\pst@object}%
%   \marg{m}\meta{\texttt{*}}\oarg{o}\marg{o}\marg{o}\parg{o}\parg{o}\parg{o} \\
%   \qquad (|m|\,$=$\,necessary, |*|\,$=$\,optional, |o|\,$=$\,optional)
% \end{flushleft}
% More than three optional arguments at the call's end, as in
% \cmd{\psline} possible, do not work yet.
% \fi
% \changes{v1.1a}{2005/04/07}{Support for the internal PSTricks macro
%   \cmd{\pst@object}. (HjG/RN)}
%    \begin{macrocode}
      \PreviewMacro[{{}*[]%
        ?\bgroup{#{#1}{{#1}}}{}%
        ?\bgroup{#{#1}{{#1}}}{}%
        ?({#{(#1)}{({#1})}}{}%
        ?({#{(#1)}{({#1})}}{}%
        ?({#{(#1)}{({#1})}}{}%
        }]{\pst@object}}%
%    \end{macrocode}
% \ifGERMAN
% Mehrfaches testweises Setzen von Tabelleninhalten durch ``tabularx''
% verhindern.
% \fi
% \ifENGLISH
% Prevent multiple test-wise setting of table contents by ``tabularx''.
% \fi
% \changes{v1.1c}{2005/04/17}{Special support for ``tabularx''. (RN)}
% \changes{v1.1q}{2008/02/17}{Problem with ``tabularx'' and
%   ``threeparttabel'' solved. (RN)}
%    \begin{macrocode}
    \@ifundefined{tabularx}{}{%
      \newcolumntype{X}{c}%
      \expandafter\let\expandafter\tabularx\csname tabular*\endcsname
      \expandafter\let\expandafter\endtabularx\csname endtabular*\endcsname
    }%
%    \end{macrocode}
% \changes{v1.1l}{2006/02/18}{Support for the package ``psfragx''. (RN)}
% \ifGERMAN
% Unterst\"utzung von \cmd{\includegraphicx} aus dem Paket \pkgname{psfragx}.
% \fi
% \ifENGLISH
% Support of \cmd{\includegraphicx} from the package \pkgname{psfragx}.
% \fi
%    \begin{macrocode}
    \@ifundefined{pfx@includegraphicx}{}{%
      \PreviewMacro[{{}{}}]{\pfx@includegraphicx}}%
  }%
%    \end{macrocode}
% \begin{macro}{\Gscale@@box}
% \ifGERMAN
% Skalieren verhindern.
% \fi
% \ifENGLISH
% Disable scaling.
% \fi
% \changes{v1.1o}{2006/08/31}{Disable scaling. (RN)}
%    \begin{macrocode}
  \def\Gscale@@box#1#2#3{%
    \toks@{\mbox}%
  }%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\Ginclude@graphics}
% \ifGERMAN
% Alle Grafiken mit bekanntem Format (z.\,B. EPS-Dateien) werden normal
% verarbeitet, was in diesem Modus bedeutet, dass sie der
% Preview-Funktionalit\"at unterliegen. Andere Grafiken (z.\,B. PDF-Dateien)
% werden ignoriert.
% \fi
% \ifENGLISH
% All graphics content of well known format (for instance EPS files) is
% treated in a regular way, which in this mode denotes that it is subject
% to \pkgname{preview} functions. Other graphics content (for instance PDF
% files) is ignored.
% \fi
% \changes{v1.0k}{2005/02/23}{Prevent division by zero. (RN)}
% \changes{v1.1h}{2005/06/26}{Check if inside of a PS-related
%   environment (correct graphic inclusion). (RN)}
% \changes{v1.1i}{2005/06/29}{Correction of the inside check. (RN/HjG)}
%    \begin{macrocode}
  \def\Ginclude@graphics#1{%
    \ifpr@outer
%    \end{macrocode}
% \ifGERMAN
% Im allgemeinen Fall sollen pdf\TeX-Grafiken bevorzugt werden (Einf\"ugen
% erst im pdf\TeX-Modus). Ist nur eine DVIPS-Graphik vorhanden, dann
% wirkt wieder die Originaldefintion und Registrierung beim
% preview-Paket muss erfolgen.
% \fi
% \ifENGLISH
% Generally pdf\TeX\ supported graphics formats are intended to be preferred
% (inclusion in final pdf\TeX\ run). If it's a \PS\ type graphics, then the
% original definition is in function again and registration for the
% \pkgname{preview} package is necessary in order to convert this \PS\ type
% graphics into PDF.
% \fi
%    \begin{macrocode}
      \ppf@is@pdfTeX@graphic{#1}{\ppf@other@extensions}{\Gin@extensions}%
%    \end{macrocode}
% \ifGERMAN
% Dummy-Box, um Division durch Null bei Skalierung/Rotation zu
% vermeiden. Wird ansonsten ignoriert.
% \fi
% \ifENGLISH
% Dummy box to prevent a division by zero while scaling or rotating.
% Otherwise ignored.
% \fi
%    \begin{macrocode}
      {\rule{10pt}{10pt}}%
      {\ppf@Ginclude@graphics{#1}}%
    \else
%    \end{macrocode}
% \ifGERMAN
% Innerhalb von PS-Umgebungen (\texttt{pspicture} usw.) muss sich
% \cmd{\includegraphics} wie die Originaldefinition verhalten (nur die
% DVIPS-Graphik-Typen sind g\"ultig).
% \fi
% \ifENGLISH
% Inside a \PS\ environment (\env{pspicture} etc.) \cmd{\includegraphics} has
% to behave as in its original definition (only DVIPS supported graphics
% formats are allowed).
% \fi
%    \begin{macrocode}
      \ppf@Ginclude@graphics{#1}%
    \fi
  }%
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
  \PreviewMacro[{{}}]{\ppf@Ginclude@graphics}%
  \let\pdfliteral\@gobble%
\or
%    \end{macrocode}
% \ifGERMAN
% \subsection{pdf\LaTeX\ mode (pdf output)}
% Ist die Datei \cmd{\PDFcontainer} (default: \meta{\cmd{\jobname}}|-pics.pdf|)
% vorhanden, so wird der Inhalt der Umgebungen |pspicture| und
% |postscript| ignoriert.
% Stattdessen wird die zugeh\"orige Grafik aus der Datei \cmd{\PDFcontainer}
% eingebunden.
% \fi
% \ifENGLISH
% \subsection{pdf\LaTeX\ mode (PDF output)}
% When the \cmd{\PDFcontainer} file (default:
% \meta{\cmd{\jobname}}|-pics.pdf|) exists, the contents of the
% environments \env{pspicture} and \env{postscript} is ignored. Instead the
% corresponding graphics from the \cmd{\PDFcontainer} file is used.
% \fi
%    \begin{macrocode}
  \PackageInfo{pst-pdf}{MODE: \ppf@TeX@mode\space (pdfTeX mode)}%
%    \end{macrocode}
% \ifGERMAN
% Verhindert pdf\TeX{}s Warnung \texttt{Non-PDF special ignored!}.
% \fi
% \ifENGLISH
% Prevent pdf\TeX's message \texttt{Non-PDF special ignored!}.
% \fi
% \changes{v1.2d}{2017/06/22}{\cmd{\c@lor@to@ps} must not be undefined before 
%   loading `PSTricks'}
%    \begin{macrocode}
  \if@ppf@PST@used
    \let\ppf@temp\AtBeginDvi\let\AtBeginDvi\@gobble
    \def\c@lor@to@ps#1 #2\@@{}%
    \RequirePackage{pstricks}\let\AtBeginDvi\ppf@temp
  \fi
%    \end{macrocode}
%    \begin{macrocode}
  \@temptokena{%
    \let\Gin@PS@file@header\@gobble\let\Gin@PS@literal@header\@gobble
    \let\Gin@PS@raw\@gobble\let\Gin@PS@restored\@gobble
    \@ifundefined{PSTricksLoaded}{}{%
%    \end{macrocode}
% \ifGERMAN
% F\"ur PSTricks $<$ 2.0 n\"otig.
% \fi
% \ifENGLISH
% Necessary if PSTricks $<$ 2.0.
% \fi
%    \begin{macrocode}
      \PSTricksOff%
      \def\c@lor@to@ps#1 #2\@@{}%
    }%
  }%
%    \end{macrocode}
% \ifGERMAN
% \PS-Ausgabe jetzt verhindern und sp\"ater noch einmal.
% \fi
% \ifENGLISH
% \PS\ output is now inhibited and later once again.
% \fi
%    \begin{macrocode}
  \the\@temptokena%
  \expandafter\AtBeginDocument\expandafter
    {\the\@temptokena\@temptokena{}}%
  \@ifundefined{PSTricksLoaded}{}{%
%    \end{macrocode}
% \ifGERMAN
% Zum Parsen der Argumente von PSTricks' \cmd{\pst@object} laden wir
% \pkgname{preview} im active-Modus, restaurieren aber die
% standardm\"a{\ss}igen Definitionen von \cmd{\output}
% und \cmd{\shipout}. \cmd{\pr@startbox} und
% \cmd{\pr@endbox} dienen hier nur dazu, um \cmd{\pst@object} wirkungslos
% zu machen und stattdessen die zugeh\"orige Grafik aus der Containerdatei
% einzuladen. Derzeit werden nur maximal 3 optionale Pa\-ra\-meter in runden
% Klammern am Ende von \cmd{\pst@object} unterst\"utzt, was f\"ur viele,
% aber nicht f\"ur alle F\"alle ausreichend ist.
% \fi
% \ifENGLISH
% To parse the arguments of PSTricks' \cmd{\pst@object} we load
% \pkgname{preview} in active mode, but restore the default definitions of
% \cmd{\output} and \cmd{\shipout}. \cmd{\pr@startbox} and \cmd{\pr@endbox}
% serve here only to disable \cmd{\pst@object} and to load the
% corresponding graphics from the \cmd{\PDFcontainer} file. At present a
% maximum of three optional parameters in round braces (parenthesis) at the
% end of \cmd{\pst@object} is supported, which is sufficient, but not
% always enough.
% \fi
% \changes{v1.1b}{2005/04/09}{Ignore the call of
%   \cmd{\nofiles} inside of \pkgname{preview}. (RN)}
% \changes{v1.1p}{2007/07/27}{\cmd{\let}\cmd{\output}\cmd{\@gobble}
%   before loading of ``preview'' added. (RN)}
% \changes{v1.1t}{2008/09/09}{Remove the line 
%   ``\cmd{\let}\cmd{\output}\cmd{\@gobble}'' because of bad side 
%   effects. (RN)}
%    \begin{macrocode}
    \newtoks\ppf@output
    \ppf@output\expandafter{\the\output}%
    \let\ppf@nofiles=\nofiles \let\nofiles=\relax
    \let\ppf@shipout=\shipout
    \RequirePackage[active]{preview}[2005/01/29]%
    \let\shipout=\ppf@shipout \let\ppf@shipout=\relax
    \let\nofiles=\ppf@nofiles \let\ppf@nofiles=\relax
    \output\expandafter{\the\ppf@output} \ppf@output{}%
%    \end{macrocode}
% \ifGERMAN
% \cmd{\pr@startbox}, \cmd{\pr@endbox}: Gegen\"uber Originaldefinition
% vereinfacht.
% \fi
% \ifENGLISH
% \cmd{\pr@startbox}, \cmd{\pr@endbox}: simpler over original definitions.
% \fi
%    \begin{macrocode}
    \long\def\pr@startbox#1#2{%
      \ifpr@outer
        \toks@{#2}%
        \edef\pr@cleanup{\the\toks@}%
        \setbox\@tempboxa\vbox\bgroup
        \everydisplay{}%
        \pr@outerfalse%
        \expandafter\@firstofone
      \else
        \expandafter\@gobble
      \fi{#1}}%
    \def\pr@endbox{%
      \egroup
      \setbox\@tempboxa\box\voidb@x
      \ppf@@getpicture
      \pr@cleanup}%
%    \end{macrocode}
% \ifGERMAN
% (Siehe auch identische Definition im DVI-Modus.)
% \fi
% \ifENGLISH
% (See also the identical definition in DVI mode.)
% \fi
%    \begin{macrocode}
    \AtBeginDocument{%
      \@ifundefined{pst@object}{}%
      {%
        \PreviewMacro[{{}*[]%
          ?\bgroup{#{#1}{{#1}}}{}%
          ?\bgroup{#{#1}{{#1}}}{}%
          ?({#{(#1)}{({#1})}}{}%
          ?({#{(#1)}{({#1})}}{}%
          ?({#{(#1)}{({#1})}}{}%
          }]{\pst@object}}%
      }%
    }%
%    \end{macrocode}
% \ifGERMAN
% Es werden auch die im DVI-Modus erlaubten Endungen von Grafikdateien
% ben\"otigt (Argument aus `dvips.def' -- 2017/06/20 -- kopiert).
% \fi
% \ifENGLISH
% Too the supported file name extensions from DVI mode are needed.
% (Argument copied from `dvips.def' -- 2017/06/20).
% \fi
% \changes{v1.2f}{2020/10/10}{No more loading of file `dvisps.def' (RN)}
%    \begin{macrocode} 
  \def\ppf@other@extensions{.eps,.ps,.eps.gz,.ps.gz,.eps.Z,.mps}%
%    \end{macrocode}
% \ifGERMAN
% Dummy-Definition f\"ur die im DVI-Modus g\"ultigen Dateitypen.
% \fi
% \ifENGLISH
% Dummy definition for in DVI mode supported file formats.
% \fi
%    \begin{macrocode}
  \DeclareGraphicsRule{*}{eps}{*}{}%
%    \end{macrocode}
%    \begin{macrocode}
  \define@key{Gin}{innerframe}[true]{%
    \lowercase{\Gin@boolkey{#1}}{innerframe}}%
  \define@key{Gin}{frame}[true]{%
    \lowercase{\Gin@boolkey{#1}}{frame}}%
  \define@key{Gin}{ignore}[true]{%
    \lowercase{\Gin@boolkey{#1}}{ignore}}%
  \define@key{Gin}{frame@@}{%
%    \end{macrocode}
% \ifGERMAN
% (Nur intern zu benutzen!)
% \fi
% \ifENGLISH
% (For internal use only!)
% \fi
%    \begin{macrocode}
    \edef\@tempa{\toks@{\noexpand\frame{\the\toks@}}}%
    \ifcase#1\relax
      \ifGin@innerframe\else\let\@tempa\relax\fi
    \or
      \ifGin@frame\else\let\@tempa\relax\fi
    \fi
    \@tempa%
  }%
  \define@key{Gin}{showname}[true]{%
    \lowercase{\Gin@boolkey{#1}}{showname}}%
  \define@key{Gin}{namefont}{%
    \begingroup
      \@temptokena\expandafter{\ppf@namefont#1}%
      \edef\x{\endgroup\def\noexpand\ppf@namefont{\the\@temptokena}}%
    \x%
  }%
  \newcommand*\ppf@filename{}%
  \newcommand*\ppf@namefont{\tiny\ttfamily}%
  \newcommand*\ppf@Gin@keys{}%
  \let\ppf@Gin@setfile\Gin@setfile
%    \end{macrocode}
% \begin{macro}{\Gin@setfile}
% \ifGERMAN
% Realen Dateinamen und ggf. Seitenzahl zur sp\"ateren Verwendung merken.
% \fi
% \ifENGLISH
% Save real file name and, if applicable, page number for later use.
% \fi
% \changes{v1.0k}{2005/02/23}{Show also the pagenumber if exists. (RN)}
%    \begin{macrocode}
  \def\Gin@setfile#1#2#3{\ppf@Gin@setfile{#1}{#2}{#3}%
    \xdef\ppf@filename{%
      #3\ifx\Gin@page\@empty\else(\Gin@page)\fi}}%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\Gin@ii}
% \ifGERMAN
%   Auswertung der Optionen ``frame'', ``ignore'' usw. sowie weiterer
%   Spezialf\"alle.
% \fi
% \ifENGLISH
%   Examine the options ``frame'', ``ignore'', etc. as soon as other
%   special cases.
% \fi
% \changes{v1.0s}{2005/03/28}{Rewritten. (RN)}
%    \begin{macrocode}
  \def\Gin@ii[#1]#2{%
    \begingroup
%    \end{macrocode}
% \ifGERMAN
% Der Wert \cmd{\ifGin@innerframe} muss bereits vor Zeichnen des
% inneren Rahmens bekannt sein. Die Werte f\"ur \cmd{\ifGin@showname} und
% \cmd{\ppf@namefont} m\"ussen auch nach Darstellung der Grafik verf\"ugbar
% sein. Daher durch eine Gruppe gesch\"utzt vorher Auswertung der Optionen.
% \fi
% \ifENGLISH
% The value of \cmd{\ifGin@innerframe} has to be known before the inner
% frame is drawn. The values for \cmd{\ifGin@showname} and
% \cmd{\ppf@namefont} need to be available after rendering the graphics
% too. Thus beforehand and protected inside a group examine the options.
% \fi
%    \begin{macrocode}
      \@temptokena{#1}\def\ppf@tempb{#2}%
%    \end{macrocode}
% \ifGERMAN
% Leerer Dateiname beim Aufruf von \cmd{\usepicture} aus.
% \fi
% \ifENGLISH
% Finds empty file name when calling \cmd{\usepicture}.
% \fi
%    \begin{macrocode}
      \ifx\ppf@tempb\@empty\else
        \ppf@is@pdfTeX@graphic{#2}{\Gin@extensions}{\ppf@other@extensions}%
%    \end{macrocode}
% \ifGERMAN
% Grafiken aus Containerdatei sind bereits skaliert usw. Nicht noch
% einmal, daher optionalen Parameter ignorieren.
% \fi
% \ifENGLISH
% Graphics out of \cmd{\PDFcontainer} are complete -- scaled, rotated, etc.
% Don't apply these things again and therefore ignore the optional parameters.
% \fi
% \changes{v1.1v}{2008/10/09}{Key settings only for pdf graphics. (RN)}
%    \begin{macrocode}
        {%
          \setkeys{Gin}{#1}%
          \ifx\ppf@tempb\PDFcontainer
            \@temptokena{page=\Gin@page}%
          \fi
        }%
        {%
          \refstepcounter{pspicture}%
          \@temptokena{page=\the\c@pspicture}\def\ppf@tempb{\PDFcontainer}%
        }%
      \fi
      \ifGin@ignore\else
%    \end{macrocode}
% \ifGERMAN
% ``|frame@@=0|''\,$=$\,innerer Rahmen, ``|frame@@=1|''\,$=$\,\"au{\ss}erer
% Rahmen.
% \fi
% \ifENGLISH
% ``|frame@@=0|''\,$=$\,inner frame, ``|frame@@=1|''\,$=$\,outer frame.
% \fi
%    \begin{macrocode}
        \edef\@tempa{\noexpand\ppf@Gin@ii[frame@@=0,\the\@temptokena,%
          frame@@=1]{\ppf@tempb}}%
        \@tempa%
        \ifGin@showname
          \ppf@namefont%
          \raisebox{-\ht\strutbox}[0pt][0pt]{\llap{\ppf@filename}}%
          \gdef\ppf@filename{}%
        \fi
      \fi
    \endgroup
  }%
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
  \IfFileExists{\PDFcontainer}%
  {%
%    \end{macrocode}
% \begin{macro}{\ppf@container@max}
% \ifGERMAN
% Die Anzahl der in der Containerdatei enthaltenen Seiten.
% \fi
% \ifENGLISH
% The number of pages as contained in \cmd{\PDFcontainer} file.
% \fi
%    \begin{macrocode}
    \pdfximage{\PDFcontainer}%
    \edef\ppf@container@max{\the\pdflastximagepages}%
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
    \AtEndDocument{%
      \ifnum\c@pspicture>\z@
%    \end{macrocode}
% \ifGERMAN
% Warnung ist nur sinnvoll, wenn \"uberhaupt Grafiken ben\"otigt
% wurden.
% \fi
% \ifENGLISH
% A warning only makes sense when a graphics is needed at all.
% \fi
%    \begin{macrocode}
        \ifnum\c@pspicture=\ppf@container@max\else
          \PackageWarningNoLine{pst-pdf}{%
            `\PDFcontainer' contains \ppf@container@max\space pages
            \MessageBreak but \the\c@pspicture\space pages are requested:
            \MessageBreak File `\PDFcontainer' is no more valid!
            \MessageBreak Recreate it
          }%
        \fi
      \fi
    }%
  }%
  {%
    \def\ppf@container@max{0}%
    \AtEndDocument{%
      \ifnum\c@pspicture>\z@
        \filename@parse{\PDFcontainer}%
        \PackageWarningNoLine{pst-pdf}{%
          File `\PDFcontainer' not found. \MessageBreak
          Use the following commands to create it: \MessageBreak
          ----------------------------------------------------
          \MessageBreak
          latex \jobname.tex\MessageBreak
          dvips -o \filename@base.ps \jobname.dvi\MessageBreak
          ps2pdf \filename@base.ps\MessageBreak
          ----------------------------------------------------
        }%
      \fi
    }%
  }%
%    \end{macrocode}
% \begin{macro}{\ppf@isnum}
% \ifGERMAN
% Ist Parameter |#1| numerisch, werden Anweisungen in |#2|
% sonst die in |#3| ausgef\"uhrt (siehe \pkgname{bibtopic.sty}).
% \fi
% \ifENGLISH
% If parameter |#1| is numeric, the instructions in |#2|,
% otherwise those in |#3| are executed (see \pkgname{bibtopic.sty}).
% \fi
%    \begin{macrocode}
  \newcommand\ppf@isnum[1]{%
    \if!\ifnum9<1#1!\else_\fi\expandafter\@firstoftwo
    \else\expandafter\@secondoftwo\fi}%
%    \end{macrocode}
% \end{macro}
% \begin{environment}{psmatrix}
% \changes{v1.0h}{2005/02/15}{Based no more on the comment environment
%   from the verbatim package. (RN)}
% \begin{environment}{pspicture}
% \changes{v1.1g}{2005/05/28}{pspicture environment
%   must still parse its arguments. (RN/HjG)}
% \ifGERMAN
% Beide Umgebungen ignorieren ihren Inhalt und laden stattdessen die
% zugeh\"orige Grafik aus der Containerdatei. Auf den Wert des dabei
% benutzten Z\"ahlers (|pspicture|)
% kann per \cmd{\label}/\cmd{\ref} zugegriffen werden.
% \fi
% \ifENGLISH
% Both environments ignore their contents and load instead the corresponding
% graphics out of the \cmd{\PDFcontainer} file. The value of the herein used
% |pspicture| counter's value can be used in \cmd{\label}/\cmd{\ref}.
% \fi
% \begin{environment}{postscript}
% \changes{v1.1d}{2005/04/19}{Support for PSTricks environment
%   ``psmatrix''. (RN)}
% \changes{v1.1g}{2005/05/28}{``psmatrix'' environment
%   (preserve math mode). (RN/HjG)}
%    \begin{macrocode}
  \newcommand*\ppf@set@mode{}%
  \newcommand*\ppf@test@mmode{%
  \ifmmode
    \ifinner
      \let\ppf@set@mode=$%
    \else
      \def\ppf@set@mode{$$}%
    \fi
  \else
    \let\ppf@set@mode=\@empty
  \fi
  }
%    \end{macrocode}
% \changes{v1.1t}{2008/09/09}{Using \pkgname{environ} the environment
% \env{postscript} is now simple and more robust. (RN)}
%    \begin{macrocode}
  \RequirePackage{environ}%
  \newenvironment{postscript}[1][]{%
    \def\@tempa{postscript}%
    \ifx\@tempa\@currenvir
      \def\ppf@Gin@keys{#1}%
    \else
      \def\ppf@Gin@keys{}%
    \fi
    \ppf@@getpicture%
    \Collect@Body\@gobble}{}%
  \AtBeginDocument{%
    \@ifundefined{PSTricksLoaded}{}{%
      \def\pst@@@picture[#1](#2,#3)(#4,#5){\postscript}%
      \def\endpspicture{\endpostscript\endgroup}%
      \@ifundefined{psmatrix}{}{%
        \let\psmatrix=\postscript
        \let\endpsmatrix=\endpostscript}%
    }%
    \@ifundefined{pfx@includegraphicx}{}{%
%    \end{macrocode}
% \ifGERMAN
% Die im pdf\TeX-Modus unn\"utze Umdefinition von
% \cmd{\includegraphics} (Paket \pkgname{psfragx}) f\"uhrt zu zweifachem
% Einf\"ugen des Ergebnisses, weshalb die Originaldefition wiederhergestellt
% wird.
% \fi
% \ifENGLISH
% The useless redefinition of \cmd{\includegraphics} in pdf\TeX\ mode
% (package \pkgname{psfragx}) is leading to double insertion of the result.
% We go back to the original meaning.
% \fi
%    \begin{macrocode}
      \let\includegraphics=\pfx@includegraphics
      \def\pfx@includegraphicx#1#2{\ppf@@getpicture}%
    }%
  }%
%    \end{macrocode}
% \end{environment}
% \end{environment}
% \end{environment}
% \begin{macro}{\savepicture}
% \changes{v1.0f}{2005/02/04}{New macro \cmd{\savepspicture}. (RN)}
% \ifGERMAN
% Speichert die Nummer der aktuellen Grafik in einem Makro mit Namen
% \cmd{\ppf@@@}|#1|.
% \fi
% \ifENGLISH
% Saves the recent graphics' number in a macro named \cmd{\ppf@@@}|#1|.
% \fi
%    \begin{macrocode}
  \def\savepicture#1{%
    \expandafter\xdef\csname ppf@@@#1\endcsname{\the\pdflastximage}}%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\usepicture}
% \changes{v1.0f}{2005/02/04}{New macro \cmd{\usepspicture}. Useful
%   for putting a PSTricks graphic in a box or something else. (RN)}
% \changes{v1.0g}{2005/02/12}{Now \cmd{\usepspicture} does accept a
%   numerical parameter. (RN)}
% \changes{v1.0q}{2005/03/20}{Now \cmd{\usepspicture} works for all
%   kind of graphics. (RN)}
% \ifGERMAN
% F\"ugt Grafik mit symbolischem Namen |#2| ein. Der Name
% muss vorher mit \cmd{\savepicture}\marg{Name} vereinbart worden
% sein. Statt des Namens kann auch eine Zahl angegeben werden, die dann
% direkt eine Grafik aus der Containerdatei adressiert.
% Der optionale Parameter |#1| entspricht dem bei \cmd{\includegraphics}.
% \fi
% \ifENGLISH
% Inserts graphics with symbolic name |#2|. This name has to be declared
% beforehand in \cmd{\savepicture}\marg{name}. Instead of a name a number
% can be used too, which directly addresses a graphics in the
% \cmd{\PDFcontainer} file. The optional parameter |#1| corresponds to the
% one in \cmd{\includegraphics}.
% \fi
%    \begin{macrocode}
  \renewcommand*\usepicture[2][]{%
    \@ifundefined{ppf@@@#2}%
    {%
      \ppf@isnum{#2}%
      {\ppf@getpicture{#1}{#2}}%
      {\@latex@error{picture `#2' undefined}\@ehc}%
    }%
    {%
      \begingroup
        \def\Ginclude@graphics##1{%
          \xdef\ppf@filename{#2}%
          \setbox\z@\hbox{\pdfrefximage\@nameuse{ppf@@@#2}}%
          \Gin@nat@height\ht\z@ \Gin@nat@width\wd\z@
          \def\Gin@llx{0}\let\Gin@lly\Gin@llx
          \Gin@defaultbp\Gin@urx{\Gin@nat@width}%
          \Gin@defaultbp\Gin@ury{\Gin@nat@height}%
          \Gin@bboxtrue\Gin@viewport@code%
          \Gin@nat@height\Gin@ury bp%
          \advance\Gin@nat@height-\Gin@lly bp%
          \Gin@nat@width\Gin@urx bp%
          \advance\Gin@nat@width-\Gin@llx bp%
          \Gin@req@sizes%
          \ht\z@\Gin@req@height \wd\z@\Gin@req@width
          \leavevmode\box\z@}%
        \define@key{Gin}{type}{}%
        \includegraphics[scale=1,#1]{}%
      \endgroup
    }}%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\ppf@getpicture}
% \ifGERMAN
% F\"ugt die Seite (Grafik) mit Nummer |#2| aus der Containerdatei
% ein. Parameter |#1|: Optionen wie bei \cmd{\includegraphics}.
% \fi
% \ifENGLISH
% Inserts the page (graphics) with number |#2| from the \cmd{\PDFcontainer}
% file. Parameter |#1|: any option as in \cmd{\includegraphics}.
% \fi
%    \begin{macrocode}
  \newcommand*\ppf@getpicture[2]{%
    \@tempcnta=#2\relax%
    \ifnum\@tempcnta>\ppf@container@max
      \PackageWarningNoLine{pst-pdf}{%
        pspicture No. \the\@tempcnta\space undefined}%
    \else
      \includegraphics[draft=\ppf@draft,#1,page=\the\@tempcnta]%
        {\PDFcontainer}%
    \fi
    \gdef\ppf@Gin@keys{}}%
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\ppf@@getpicture}
% \ifGERMAN
% F\"ugt die n\"achste Seite (Grafik) aus der Containerdatei ein.
% \fi
% \ifENGLISH
% Inserts next page (graphics) from the \cmd{\PDFcontainer} file.
% \fi
%    \begin{macrocode}
  \newcommand*\ppf@@getpicture{%
    \ifpr@outer
      \refstepcounter{pspicture}%
      \expandafter\ppf@getpicture\expandafter{\ppf@Gin@keys}%
      {\the\c@pspicture}%
    \fi}%
%    \end{macrocode}
% \end{macro}
%
% \begin{environment}{pst-pdf-defs}
% \ifGERMAN
%   Umgebung, die keine eigene Gruppe aufmacht. Innerhalb der Umgebung
%   bekommt das Zeichen |&| den Kategoriecode "`other"'. Gedacht f\"ur
%   eigene Makrodefinitionen, die z.\,B.\ eine \env{psmatrix} enthalten.
% \fi
% \ifENGLISH
%   Environment without grouping. The character |&| has the catcode 
%   ``other''. Useful for user-defined macro definitions with e.\,g.\ %
%   \env{psmatrix} inside.
% \fi
%    \begin{macrocode}
  \renewenvironment*{pst-pdf-defs}%
  {%
    \endgroup
%    ??? \@currenvline
    \chardef\ppf@temp=\catcode`\&%
    \@makeother\&%
  }{%
    \catcode`\&=\ppf@temp
    \begingroup
    \def\@currenvir{pst-pdf-defs}%
  }
%    \end{macrocode}
% \end{environment}
%
%    \begin{macrocode}
\else
%    \end{macrocode}
% \ifGERMAN
% \subsection{Inactiver Modus}
% Es werden nur die Pakete \pkgname{pstricks} und \pkgname{graphicx} geladen
% -- keine weitere Einflussnahme. Die Paketoption
% "`|inactive|"' sowie der V\TeX-Compiler erzwingen diesen Modus.
% \fi
% \ifENGLISH
% \subsection{Inactive Mode}
% Only the packages \pkgname{pstricks} and \pkgname{graphicx} are loaded
% -- no further exertion of influence. The package option
% ``|inactive|'' as soon as the V\TeX compiler force this mode.
% \fi
%    \begin{macrocode}
  \PackageInfo{pst-pdf}{MODE: \ppf@TeX@mode\space (inactive mode)}%
  \newenvironment{postscript}[1][]{\ignorespaces}{}%
  \let\ppf@is@pdfTeX@graphic\relax
\fi
%    \end{macrocode}
% \changes{v1.0f}{2005/02/04}{Config file loading added. (RN)}
%    \begin{macrocode}
\InputIfFileExists{pst-pdf.cfg}{%
  \PackageInfo{pst-pdf}{Local config file pst-pdf.cfg used}}{}%
%</package>
%    \end{macrocode}
%
% \Finale
%\endinput
%
% And here comes the example documents ...
%<*example>
%% Process this file with the scripts `ps4pdf' or `ps4pdf.bat' or call
%%
%%   latex pst-pdf-example.tex
%%   dvips -Ppdf -o pst-pdf-example-pics.ps pst-pdf-example.dvi
%%   ps2pdf -dAutoRotatePages=/None pst-pdf-example-pics.ps pst-pdf-example-pics.pdf
%%   pdflatex pst-pdf-example.tex
%%
\listfiles\errorcontextlines=100\relax
\documentclass[12pt]{article}

%% before `psfrag'!
\usepackage[displaymath,dvipsnames]{pst-pdf}
%%\usepackage[displaymath,dvipsnames,notightpage]{pst-pdf}

\usepackage{pst-node,pst-tree}

\usepackage{psfrag,tabularx}

\pagestyle{empty}

\begin{pst-pdf-defs}%

%% This definition must be within the pst-pdf-defs environment!
\newcommand*\mytree{%
  \begin{psmatrix}[rowsep=.2cm,colsep=2cm]
               &       & E   \\
               & A     &     \\
               &       & F   \\
  $\bullet$    &       &     \\
               &       & G   \\
               & B     &     \\
               &       & H   \\
  \scriptsize
  \psset{shortput=nab,arrows=->,labelsep=2pt,nodesep=2pt,nrot=:U}

  \ncline{4,1}{2,2}\ncput*{$0,2$}
  \ncline{4,1}{6,2}\ncput*{$x$}

  \ncline{2,2}{1,3}\ncput*{$0,3$}
  \ncline{2,2}{3,3}\ncput*{$y$}

  \ncline{6,2}{5,3}\ncput*{$z$}
  \ncline{6,2}{7,3}\ncput*{$0,8$}
  \end{psmatrix}%
}

\end{pst-pdf-defs}%

%% This works without the pst-pdf-defs environment!
\newcommand*\mymatrix{%
  \begin{postscript}
  \[
  \begin{array}{rcl}
   a & b & c \\
   1 & 2 & 3 \\
  \end{array}
  \]
  \end{postscript}%
}


\begin{document}

\setkeys{Gin}{showname,frame}%

\psset{unit=0.0714\textwidth}% 1/14 * \textwidth
\newpsobject{showgrid}{psgrid}{subgriddiv=1,griddots=10,gridlabels=6pt}

\newcommand*\BASEMARKER{\rule{.5em}{.4pt}}

\setlength\parindent{0pt}

\centering

\section*{\textsf{pst-pdf:}
  PSTricks and other PostScript code in pdf\LaTeX\ documents}

\vfill

\begin{pspicture}(-5.5,-5.25)(5.25,5.25)%
%%\begin{pspicture}[trim=-.5 -.25 .25 .25,frame](-5,-5)(5,5)% PSTricks2
  \pscircle*[linecolor=Apricot]{5}
  \rput(0,0.5){\includegraphics[width=8\psxunit]{elephant}}
  \Huge\sffamily\bfseries
  \rput(-4.5,4.5){A} \rput(4.5,4.5){B}
  \rput(-4.5,-4.5){C}\rput(4.5,-4.5){D}
  \rmfamily
  \rput(0,-3.8){PSTricks}
  \rput(0,3.8){\LaTeX}
  \showgrid
\end{pspicture}\savepicture{ps:A}

\vfill\null\newpage

\includegraphics[width=.475\textwidth]{insect1}

\vfill

\usepicture[width=.47\textwidth]{ps:A}

\includegraphics[width=.475\textwidth,frame=false,
  namefont={\Huge\itshape}]{knuth}
\hfill
\usepicture[angle=45,origin=bl,width=.475\textwidth,innerframe]{1}%

\vfill

\includegraphics[width=.47\textwidth]{psf-demo}
\hfill
\begin{psfrags}
  \psfragscanon
  \psfrag{x1}[br][  ]{\LaTeX} \psfrag{x2}[br][br]{\LaTeX}
  \psfrag{x3}[br][tl]{\LaTeX} \psfrag{x4}[br][Br]{\LaTeX}
  \psfrag{x5}[Br][ r][1.15][45]{\Huge\LaTeX}
  \psfrag{x6}[tl][ l][1.15][45]{\Huge\LaTeX}
  \includegraphics[width=.47\textwidth]{psf-demo}
\end{psfrags}

\includegraphics[width=\textwidth,showname=false,frame=false]{insect15}

\bigskip

\Large

\begin{equation}
  \sigma(t)=\frac{1}{\sqrt{2\pi}}
  \int^t_0 e^{-x^2/2} dx
\end{equation}

\clearpage

\setkeys{Gin}{showname=false,frame=false}%

{ \Huge \renewcommand*\arraystretch{1.5}

  \noindent
  \begin{tabularx}{\textwidth}{|@{}>{\centering}X@{}|} \hline

  \psframebox*[fillcolor=green,framearc=.6]{HUGO}\BASEMARKER
  \fbox{\BASEMARKER GUSTAV}  \tabularnewline

  \begin{postscript}
  \psframebox*[fillcolor=green,framearc=.6]{HUGO}\BASEMARKER
  \fbox{\BASEMARKER GUSTAV}
  \end{postscript}           \tabularnewline \hline

  \end{tabularx}

}

\bigskip

\definecolor{pink}{rgb}{1, .75, .8}
\renewcommand\psedge{\nccurve}
\newcommand{\Female}[2][]{{\psset{linecolor=pink}\TR[#1]{\emph{#2}}}}
\newcommand{\Male}[2][]{{\psset{linecolor=blue}\TR[#1]{#2}}}

\psset{nodesep=2pt,angleA=90,angleB=-90}

{ \footnotesize

   %% From: The \LaTeX\ Graphics Companion; first release.
   \pstree[treemode=U]{\Female{{\bfseries Matilde}}}{%
     \pstree{\Male{Sebastian}}{%
       \pstree{\Male[name=P]{Philip}}{\Male{Frederick}\Female{Ethel}}
       \pstree{\Female[name=W]{Mary}}{\Male{Lionel}\Female{Agnes}}}
     \pstree{\Female{Leonor}}{%
       \pstree{\Male[name=R]{Ra\'ul}}{\Male{Joaquim}\Female{J\'ulia}}
       \pstree{\Female[name=A]{Am\'elia}}{\Male{\'Alvaro}\Female{Augusta}}}
   }

  \iffalse  % --> Cannot work outside of a special environment!
  \psset{linecolor=green,doubleline=true,linestyle=dotted}
  \ncline{P}{W}\nbput{1940}
  \ncline{R}{A}\nbput{1954}
  \fi
}

\bigskip

\psset{arrows=->,fillcolor=white,fillstyle=solid}

\footnotesize

\newcommand{\Show}[1]{\psshadowbox{#1}}

\begin{psmatrix}[mnode=r,ref=t,unit=.3]
  \psframebox[linestyle=none,framesep=.75]{%
    \begin{psmatrix}[name=A,ref=c]
      \Show{Stakeholder}
    \end{psmatrix}} &
  \psframebox[fillstyle=solid,fillcolor=pink,framesep=.95]{%
    \rule{1cm}{0pt}
    \begin{psmatrix}[ref=c]
      [name=B]\Show{Goal} & \Show{Criteria}\\
              \Show{Sub-goal} & \Show{Justification}
      \ncline{1,1}{1,2}
      \ncline{1,1}{2,2}
      \ncline{1,1}{2,1}\tlput{Strategy}
      \ncline{2,1}{2,2}
    \end{psmatrix}}
  \ncline[angleB=180]{A}{B}\naput[npos=.7]{Model}
\end{psmatrix}

\begin{postscript}[angle=90,height=\textheight,frame=false]

\pstree[treemode=U]{\Female{{\bfseries Matilde}}}{%
  \pstree{\Male{Sebastian}}{%
    \pstree{\Male[name=P]{Philip}}{\Male{Frederick}\Female{Ethel}}
    \pstree{\Female[name=W]{Mary}}{\Male{Lionel}\Female{Agnes}}}
  \pstree{\Female{Leonor}}{
  \pstree{\Male[name=R]{Ra\'ul}}{\Male{Joaquim}\Female{J\'ulia}}
  \pstree{\Female[name=A]{Am\'elia}}{\Male{\'Alvaro}\Female{Augusta}}}
}

\psset{linecolor=green,doubleline=true,linestyle=dotted}
\ncline{P}{W}\nbput{1940}
\ncline{R}{A}\nbput{1954}

\end{postscript}

\bigskip

\psset{arrows=-}

\begin{displaymath}
  \bordermatrix{%
  & A            & B & C\cr
  & \rnode{D}{D} & E & \rnode{F}{F}\cr
  & G            & H & I\cr
  & \rnode{J}{J} & K & M
  }
  \ncline[nodesep=-1em,linecolor=red]{D}{F}
  \ncline[nodesep=-1em,linecolor=red]{D}{J}
\end{displaymath}

\bigskip

\mytree

\bigskip

\mymatrix

\end{document}
%</example>
