% Copyright 2003 by Rolf Niepraschk (Rolf.Niepraschk@ptb.de). % This software is released under the terms of the LaTeX Project Public % License (ftp://dante.ctan.org/tex-archive/macros/latex/base/lppl.txt). % (Essentially: Free to use, copy, distribute (sell) and change, but, if % changed, the name must be changed.) \NeedsTeXFormat{LaTeX2e}[1995/12/01] \ProvidesPackage{ps4pdf}[2005/02/11 v0.6i PS code for pdfTeX (RN/HO)] \newcommand*\PfP@mode{0} \newcommand*\PfP@draft@global{false} \newcommand*\PfP@llx{-0.50001bp} \newcommand*\PfP@lly{-0.50001bp} \newcommand*\PfP@urx{0.50001bp} \newcommand*\PfP@ury{0.50001bp}% Prevents rounding errors. \newcommand*\PfP@tempa{} \newcommand*\PfP@tempb{} \newif\ifPfP@draft \newif\ifPfPinside \PfPinsidefalse \newif\ifPfP@graphics \newif\ifPfP@notightpage \PfP@notightpagefalse \DeclareOption{active}{\def\PfP@mode{0}} \DeclareOption{inactive}{\def\PfP@mode{9}} \DeclareOption{draft}{\def\PfP@draft@global{true}} \DeclareOption{final}{\def\PfP@draft@global{false}} \DeclareOption{graphics}{\PfP@graphicstrue} \DeclareOption{nographics}{\PfP@graphicsfalse} \DeclareOption{notightpage}{\PfP@notightpagetrue} \ExecuteOptions{graphics} \ProcessOptions\relax \RequirePackage{keyval,ifpdf,ifvtex} \newcounter{PSforPDF} \newcommand*\PfP@container{} \edef\PfP@container{\jobname-pics.pdf} \newcommand*\containerName[1]{\def\PfP@container{#1}} \ifnum\PfP@mode>0\relax\else \ifvtex \def\PfP@mode{9} \else \ifpdf \def\PfP@mode{1} \fi \fi \fi \ifnum\PfP@mode=0\relax\else \RequirePackage{calc} \define@key{PfP}{trim}{% \begingroup \Gread@parse@vp#1 \\% \edef\x{\endgroup% \def\noexpand\PfP@llx{\Gin@vllx bp}% \def\noexpand\PfP@lly{\Gin@vlly bp}% \def\noexpand\PfP@urx{\Gin@vurx bp}% \def\noexpand\PfP@ury{\Gin@vury bp}}\x% % Like "\xdef\PfP@llx{\Gin@vllx bp}..." but only for one group level. } \define@key{PfP}{draft}[true]{\csname PfP@draft#1\endcsname} \newcommand\PfP@adjustBox[3]{% % #1=width of the main box, #2=height of the main box, % #3=raw material \begingroup \edef\PfP@tempa{#1}\edef\PfP@tempb{#2}% \setbox\@tempboxa=\hbox{#3}% \ifdim\wd\@tempboxa>\ht\@tempboxa\relax% \setbox\@tempboxa=\hbox{\resizebox{\PfP@tempa}{!}{#3}}% \else% \setbox\@tempboxa=\hbox{\resizebox{!}{\PfP@tempb}{#3}}% \fi \box\@tempboxa% \endgroup } \newcommand\PfP@framedInfoBox[3]{% % #1=width, #2=height, #3=info text \begingroup \fboxsep=3pt\fboxrule=.4pt% \edef\PfP@tempa{#1-2\fboxsep-2\fboxrule}% \ifx#2\height% \fbox{\parbox[b]{\PfP@tempa}{\vfill\mbox{}#3\vfill}}% \else% \edef\PfP@tempb{#2-2\fboxsep-2\fboxrule}% \fbox{\parbox[b][\PfP@tempb]{\PfP@tempa}{\vfill\mbox{}#3\vfill}}% \fi \endgroup } \fi \ifcase\PfP@mode% == dvi (extraction mode) == %% "AtBeginDocument" is necessary because `preview' called `\nofiles'. %% After this call `\makeindex' is `\relax' and can't be redefined with %% `\renewcommand'. \AtBeginDocument{% \ifPfP@notightpage% \RequirePackage[active,dvips]{preview}[2003/01/20]% \else% \RequirePackage[active,dvips,tightpage]{preview}[2003/01/20]% \fi% } \define@key{PfP}{trim}{\xdef\PreviewBbAdjust{#1}}% \define@key{PfP}{draft}[true]{}% Not used in this mode. \newcommand\PSforPDF[2][]{#2} \newcommand\PfP@relax@commands{% %% To prevent tabularx from execute each \cmd{\PSforPDF} more than once. \@ifundefined{tabularx}{}{% \def\tabularx##1##2{\tabular{##2}}% \newcolumntype{X}{c}% \let\endtabularx=\endtabular}% } \AtBeginDocument{% \@ifpackageloaded{graphicx}{}{\RequirePackage{graphicx}}% \let\PfP@includegraphics=\includegraphics% \renewcommand\includegraphics[2][]{% \ifPfPinside\PfP@includegraphics[#1]{#2}\else~\fi}% % Outside of `\PSforPDF' `\includegraphics' must do nothing % because we can't handle pdfTeX graphics (.pdf, .jpg,...) % in this mode. `~' is a non-zero size dummy. \renewcommand\PSforPDF[2][]% {% \setkeys{PfP}{trim=\PfP@llx\space\PfP@lly\space% \PfP@urx\space\PfP@ury,#1}\stepcounter{PSforPDF}% \PfPinsidetrue#2\PfPinsidefalse% } \PreviewMacro[{[]{}}]{\PSforPDF}% \PfP@relax@commands% } \AtEndDocument{% \ifnum\value{PSforPDF}=0\relax \PSforPDF{\mbox{}}% % Prevents not writing a dvi file if the document contains % no \PSforPDF commands (e.g. suppressed by \includeonly) \fi} \or% == pdfTeX == \newcommand*\PfP@lastpage{\maxdimen} \newcommand\PSforPDF[2][]{}% Do nothing before `\begin{document}' % The definition for the "page" key can only be executed % at `\begin{document}' if `keyval' is present! \AtBeginDocument{% \ifPfP@graphics\else \let\PfP@Ginclude@graphics\Ginclude@graphics \def\Ginclude@graphics#1{\phantom{\PfP@Ginclude@graphics{#1}}}% \fi \IfFileExists{\PfP@container}% {% \@ifpackageloaded{graphicx}{}{\RequirePackage[pdftex]{graphicx}}% \renewcommand\PSforPDF[2][]{% \setkeys{PfP}{trim=\PfP@llx{} \PfP@lly{} \PfP@urx{} \PfP@ury}% \setkeys{PfP}{draft=\PfP@draft@global,##1}% \stepcounter{PSforPDF}% \ifnum\PfP@lastpage<\value{PSforPDF}\relax \PfP@framedInfoBox{\linewidth}{\height}{% \centering Can't show picture~\#\thePSforPDF\ because it does not exist in \texttt{\PfP@container}. Recreate \texttt{\PfP@container}!}% \else% \setbox\@tempboxa=\hbox{% \includegraphics[page=\the\value{PSforPDF},draft=false]% {\PfP@container}}% \setlength\@tempdima{\wd\@tempboxa-\PfP@urx+\PfP@llx}% \setlength\@tempdimb{\ht\@tempboxa-\PfP@ury+\PfP@lly}% % recalculate the original size. \setbox\@tempboxa=\hbox{% \PfP@adjustBox{\the\@tempdima}{\the\@tempdimb}{\box\@tempboxa}}% \ifPfP@draft% \PfP@framedInfoBox{\the\wd\@tempboxa}{\the\ht\@tempboxa}% {\rlap{~\texttt{\PfP@container~(\#\the\value{PSforPDF})}}}% \else% \mbox{\box\@tempboxa}% \fi \xdef\PfP@lastpage{\the\pdflastximagepages}% \fi } } {% \PackageWarningNoLine{ps4pdf}{% Graphic container `\PfP@container' not found}% \renewcommand\PSforPDF[2][]{% \stepcounter{PSforPDF}% \noindent\PfP@framedInfoBox{\linewidth}{\height}{% \centering Can't show picture~\#\thePSforPDF\ because \texttt{\PfP@container} not found. Create it from \texttt{\jobname.dvi} using \texttt{dvips} and \texttt{ps2pdf}!}} }% }% \AtEndDocument{% \ifnum\PfP@lastpage=\value{PSforPDF}\relax\else \PackageWarningNoLine{ps4pdf}{`\PfP@container' is no more valid}% \fi} \else% == inactive (latex/dvips, VTeX) == \RequirePackage{graphicx} \newcommand\PfP@trimmBox[7]{% % #1=width of the main box, #2=height of the main box, % #3=trim left, #4=trim right, #5=trim top, #6=trim bottom % #7=raw material \begingroup \edef\PfP@tempa{#1}\edef\PfP@tempb{#2}% \setbox\@tempboxa=\hbox{% \makebox[\width-#3][r]{% extends at left \makebox[\width+#4][l]{% extends at right \raisebox{\dp\@tempboxa-#6}% extends at top and bottom [\ht\@tempboxa+\dp\@tempboxa+#5-#6][0pt]{#7}}}}% \PfP@adjustBox{\PfP@tempa}{\PfP@tempb}{\box\@tempboxa}% \endgroup } \newcommand\PSforPDF[2][]{#2}% \AtBeginDocument{% \renewcommand\PSforPDF[2][]{% \begingroup \setkeys{PfP}{draft=\PfP@draft@global,#1}% \setbox\@tempboxa=\hbox{#2}% \@tempdima=\ht\@tempboxa\advance\@tempdima\dp\@tempboxa% \edef\PfP@tempb{\the\@tempdima}\edef\PfP@tempa{\the\wd\@tempboxa}% \setbox\@tempboxa=\hbox{% \PfP@trimmBox{\PfP@tempa}{\PfP@tempb}% {\PfP@llx}{\PfP@urx}{\PfP@ury}{\PfP@lly}{\box\@tempboxa}}% \ifPfP@draft% \PfP@framedInfoBox{\the\wd\@tempboxa}{\the\ht\@tempboxa}{}% \else% \mbox{\box\@tempboxa}% \fi \endgroup }% } \fi \InputIfFileExists{ps4pdf.cfg}{% \PackageInfo{ps4pdf}{Local config file ps4pdf.cfg used} }{} \endinput \changes{v0.3g (RN)}{2003/02/12}{First public version.} \changes{v0.3h (RN)}{2003/02/11}{Optional parameter for Trimming.} \changes{v0.4a (RN)}{2003/02/13}{key-value syntax.} \changes{v0.5 (RN)}{2003/05/17}{trim parameter: Scaling was wrong, corrected. New options draft/final. Code cleanup. Improved test file.} \changes{v0.5a (RN)}{2003/05/19}{Option "inactive" works now.} \changes{v0.5b (RN)}{2003/05/21}{Mode detection changed. Code cleanup.} \changes{v0.5c (RN)}{2003/05/26}{New Parameters "hpos" and "vpos".} \changes{v0.6 (RN)}{2003/05/30}{trim parameter and draft option can be used with the "inactive" option} \changes{v0.6a (RN)}{2003/06/03}{Size and alignment after trimming changed. Parameter "hpos" and "vpos" removed.} \changes{v0.6b (RN)}{2003/06/09}{Simplified definition for trim key.} \changes{v0.6c (RN)}{2003/06/19}{The name of the graphics container can now be changed with \cmd{\containerName}. A document without any \cmd{\PSforPDF} commands creates now an empty container file.} \changes{v0.6d (RN)}{2003/08/17}{Inputting a config file added.} \changes{v0.6e (RN)}{2003/09/03}{Works now with `tabularx'. Thanks to Herbert Voss.} \changes{v0.6f (RN)}{2003/09/05}{bug in extraction mode corrected (`graphicx' is required). Thanks to Jose Carlos Santos.} \changes{v0.6g (RN)}{2003/11/22}{New package options `graphics/nographics' similar to package `crop' (suppresses the graphics output; suggested by Markus Kohm).} \changes{v0.6h (RN)}{2004/07/15}{In dvi extraction mode the `preview' package should be loaded ``AtBeginDocument'' to prevent problems with `natbib'; bug reported from ???.} \changes{v0.6i (RN)}{2005/02/11}{Option "notightpage" added.}