\ProvidesFile{pdftex.def}[2016/07/10 v0.06j Graphics/color for pdfTeX] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% LaTeX Colour and Graphics support for PDFTeX %% %% License %% ======= %% %% Copyright (C) 2000-2015 %% David Carlisle, Sebastian Rahtz, Hans Hagen, %% Heiko Oberdiek and Martin Schr\"oder %% %% 2016 LaTeX3 project and Heiko Oberdiek %% https://github.com/latex3/graphics-def/issues %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3c %% 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.3c or later is part of all distributions of LaTeX %% version 2005/12/01 or later. %% %% This work has the LPPL maintenance status `maintained'. %% %% The Current Maintainers of this work are %% LaTeX3 project and Heiko Oberdiek %% %% This work consists of the file pdftex.def. %% %% Usage %% ===== %% %% It may be used by specifying the pdftex option to any of the %% supported packages, for example: %% %% \usepackage[pdftex]{graphicx} %% %% * pdfTeX determines the bounding box of the images by means of %% itself. Therefore the bounding box options should not be used. %% In this cases a warning is issued and viewport is used instead. %% * Option "page" (graphicx) for selecting a page of a multipage %% PDF document. %% * \pagecolor is supported. \nopagecolor disables the page color. %% * Option "quiet" (graphicx/experimental): log messages are suppressed. %% * Option "resolution" (graphicx/experimental): this sets %% \pdfimageresolution, see pdfTeX documentation. %% * Option "print" (graphicx/experimental): specifies an alternate %% print image (bitmaps only), see PDF specification. %% * pdftex.def can be used under plain-TeX with miniltx support. %% %% "Experimental" means that these features can change or vanish %% in later versions. %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % History % ... % 2000/04/20 v0.02s: % * gray color model directly supported (HO). % 2000/05/02 v0.02t: % * \pagecolor supported (HO). % 2000/05/12 v0.02u: % * support for multipage pdf files, option `page' added (HO). % 2000/05/31 v0.02v: % * Option `page' is defined at begin document, % if package `keyval' is loaded after `pdftex.def'. % 2000/06/16 v0.03a: % * Added Heiko to author list (DPC). % 2000/08/31 v0.03b: % * support for alternate print images: option `print' added (HO). % * This feature is not supported by Ghostscript, xpdf, or AR3. % * The images should have the same dimensions/resolution. % * Two experimental options added (HO): % * `quiet': log messages are suppressed. % * `resolution': sets \pdfimageresolution. % Because these options are not supported by graphicx, % they have to be set after \usepackage{graphicx}, eg. % \setkeys{Gin}{quiet,resolution=300} % Option `quiet' (for pdftex) can be make known to graphic{s,x} % with this line in graphics.cfg: % \DeclareOption{quiet}{\let\Gin@log\@gobble} % Caution: both options are experimental and can be % change in next versions! % * \pdfpage{width,height} are only set, if \paperwidth % is defined (HO). % 2000/09/04 v0.03c % * Redefinition of `natwidth' and `natheight' \AtBeginDocument (HO). % 2000/09/14 v0.03d % * Fixes for `viewport' and `trim' (HO). % * Clip support added for viewport and trim (HO). % 2000/09/14 v0.03e % * Options `bbllx', `bblly', `bburx', `bbury' disabled, % option `bb' redirected with a warning to `viewport' (HO). % 2000/11/10 v0.03f % * Bug, that produces an error message, if package `graphics' % is used (introduced in 0.03d), fixed: If \Gin@vllx is not % defined (graphics), then clipping and the moves of options % viewport/trim are silently disabled (HO). % 2001/05/25 v0.03g % * \pdfpagewidth and \pdfpageheight are not set to zero, % if \paperwidth and \paperheight are not set (HO). % 2001/09/01 v0.03h % * Compatibilty for miniltx.tex, problems fixed: % \@ifpackageloaded, \PackageWarning, \PackageWarningNoLine, % \@currname. % 2001/11/29 v0.03i % * Problem with \if@inlabel (plain format) fixed. % 2002/06/18 v0.03j % * Contribution by P\'etiard Fran\c{c}ois : % Improvement of \Ginclude@mps (support of viewport and clip). % 2002/06/19 v0.03k % * Correction by P\'etiard Fran\c{c}ois for \GPT@DoEndClip. % 2005/06/15 v0.03l % * \usebox patch fixed (\aftergroup part removed) (HO). % 2005/06/20 v0.03m % * .tif support is removed for pdfTeX >= 1.10a (HO). % 2006/02/23 v0.03n % * Compatibility for plain-TeX: file can be loaded multiple times; % colorfix is not applied for undefined macros (HO). % 2006/02/24 v0.03o % * Catcode protections mainly because of babel's shorthands (HO). % 2006/03/02 v0.03p % * \pagecolor support for plain-TeX fixed (HO). % 2006/05/17 v0.03q % * Error message if ConTeXt's supp-pdf.tex is missing and % support of MPS files is not available (Markus Kohm = MK, HO). % 2006/06/06 v0.03r % * \nopagecolor/\no@page@color added (HO). % 2006/07/16 v0.03s (HO) % * LPPL 1.3c. % * A little usage. % * Test for \MessageBreak changed (comp.text.tex, % message id: <44baca88$0$10529$9b4e6d93@newsread4.arcor-online.net>). % 2006/08/14 v0.03t (HO) % * Extensions added: .jpeg, .JPG, .JPEG, .PNG, .PDF % No variants for .tif, because TIFF support is no longer available. % No need for uppercase variant of .mps. % 2007/01/01 v0.04a (HO) % * Support of color stack, introduced in pdfTeX 1.40.0. % * Support of transform matrix commands of pdfTeX 1.40.0. % * The argument for option `page' can be a register. % 2007/01/02 v0.04b (HO) % * Internal change: Switching of color stacks is easier by using % \@pdfcolorstack for the stack number. Thus this command % should be redefined, if someone wants to use another color stack % (e.g. for footnotes). \main@pdfcolorstack should not be changed % for this purpose. % 2007/01/06 v0.04c (HO) % * Support for JBIG2 added (pdfTeX 1.40.0). % 2007/01/08 v0.04d (HO) % * Bug fix: .mps forgotten for extension list if pdfTeX >= 1.40.0 % * .jbig2 and .jb2 are not listed in the extension list % if \pdfminorversion < 4. Thus \pdfminorversion should have % the correct value, if pdftex.def is loaded. % 2007/03/15 v0.04e (HO) % * Missing comma in \Gin@extensions added (found by Reinhard Kotucha). % 2007/04/06 v0.04f (HO) % * Fix for \pagecolor, text before page color can lead to an invalid % page stream. Therefore "page" is now used instead of "direct" % as modifier for \pdfliteral. % * Boolean option `resetcolor' added (pdfTeX >= 0.12n). % The current color is used for PDF or MPS images, unless % the images contain their own color settings. % If option `resetcolor' is set to `true', then the current color % is reset to \normalcolor during image inclusion. % 2007/04/17 v0.04g (HO) % * Small improvement of robustness of \pagecolor % and using e-TeX if available. % 2007/06/12 v0.04h (HO) % * Fix for \pagecolor: v0.04f uses keyword `page' for \pdfliteral, % but this keyword is not available before pdfTeX 1.30.0. % 2007/12/04 v0.04i (HO) % * Fatal error is avoided if image file does not exists. % 2007/12/06 v0.04j (HO) % * Option xmpfile added for adding metadata (experimental). % 2008/07/16 v0.04k (HO) % * \LoadMetaPostSpecialExtensions % loads additional support for MetaPost images (transparency) % by loading supp-mpe.tex and supp-mis.tex % (method posted in comp.text.tex by Jeremy Lea). % As side effect MetaPost images are put in separate objects % and are not inlined in the page stream. % Status: experimental. % 2008/09/08 v0.04l (HO) % * Adds an error message, if pdfTeX is called in DVI mode. % * Aborts loading of the package with an error message, % if pdfTeX is missing. % 2009/08/25 v0.04m (HO) % * Catcodes are preserved and initialized for loading of % pdftex.def and ConTeXt's support files. % * ConTeXt's support files have now the extension `.mkii' instead % of `.tex'. % 2010/02/14 v0.04n (HO) % * \GPT@catcodes extended for xmlTeX (pdftex.def loads % supp-pdf.mkii at begin document where xmlTeX's catcodes % are already active). % 2010/03/11 v0.04o (HO) % * Ensure that \undefined is undefined during loading of % ConTeXt files. % 2010/03/12 v0.04p (HO) % * \undefined is also undefined during conversion of MPS. % 2010/04/14 v0.04q (HO) % * Optimizations for rotating and scaling: % * remove unnecessary identity transformations % * numbers are normalized % 2010/04/15 v0.04r (HO) % * Fix for scale values without integer part. % 2010/09/09 v0.05a (HO) % * Option `pagebox' added for specifying the pdf page box % of the included image. Values are `mediabox', `cropbox', % `bleedbox', `trimbox' and `artbox'. Default is `cropbox'. (MS/HO) % * Option `interpolate' added for bitmaps, see PDF specification. % Values are `true' or `false', default is `false'. % * Option `decodearray' added for bitmaps, see PDF specification, % key /Decode of image dictionaries. The value for option % `decodearray' is the value for /Decode without `[' and ']'. % * Option `maskarray' added for bitmaps, see PDF specification, % key /Mask of image dictionaries with array as value. % The value of `maskarray' is the array value for /Mask % without `[' and ']'. % * Option `intent' added for the rendering intent of bitmap % images, see PDF specification, key /Intent of image % dictionaries. The value is a name without a leading slash, % the standard names of the PDF specification: % `AbsoluteColorimetric', `RelativeColorimetric', % `Saturation', `Perceptual'. % * Options `ocobjnum' and `ocobjref' are hooks for those who wants % to work with optional content. The options can be used for both % bitmap and PDF images and are unsupported for MPS. % The optional content dictionary is given by an external % object. Option `ocobjnum' expects the number of that object % (e.g. \pdflastobj). It's a positive integer (greater than zero). % Option `ocobjref' takes the full object reference % (positive integer, followed by ` 0 R' in case of pdfTeX). % Other drivers might support `ocobjref' as well, in case of % PostScript/pdfmark drivers, the object is usually referenced by % a name in curly braces. % * Tiff support removed for driver versions between 1.10a and 1.30. % 2010/09/14 v0.05b (HO) % * Fix, \pagecolor got broken accidentally (in v0.05a). % 2010/11/26 v0.05c (HO) % * \stockwidth and \stockheight of class `memoir' respected. % 2011/01/28 v0.05d (HO) % * Patching trig.sty is improved by doing it earlier in some % cases, e.g. if one of class `memoir', package `scrlfile' or % package `filehook' is loaded. % 2011/04/21 v0.06a (HO) % * The use info on the screen goes with an information % entry in the .log file that also tells the requested % width (feature request of Axel Berger). % * Use of packages `infwarerr' and `ltxcmds'. % 2011/04/25 v0.06b (HO) % * Fix in \GPT@NormalizeNumber. % * Date fixed in \ProvidesFile. % 2011/05/18 v0.06c (HO) % * The ConTeXt support files `supp-pdf.*' and `supp-mpe.*' do % not prevent reloading. Therefore `pdftex.def' only tries to load % them if \convertMPtoPDF and \assignMPStransparency are not % available. This fixes a compatibilty issue with class `combine'. % 2011/05/27 v0.06d (HO) % * Fix for v0.06a, package `ltxcmds' was not loaded in plain TeX. % 2016/01/23 v0.6e (DPC) % * Move EPS handler here from graphics.cfg % 2016/06/04 v0.6f (DPC) % * support graphcs/color option (no)setpagesize % 2016/06/15 v0.6g (DPC) % * typo % 2016/06/17 v0.6h (DPC) % * guards for contributed packages and plain TeX % 2016/07/1o v0.6j (DPC) % * don't set page size for non standard \mag % % Prefix of internal commands for this file `pdftex.def': % \GPT@ (Graphics bundle PdfTex driver) \expandafter\edef\csname GPT@AtEnd\endcsname{% \expandafter\noexpand\csname GPT@restore@\endcsname \catcode35 \the\catcode35\relax % # \catcode64 \the\catcode64\relax % @ \noexpand\endinput } \catcode35 6 % # \catcode64 11 % @ \def\GPT@catcodes#1{% \expandafter\edef\csname GPT@restore@#1\endcsname{% \let\noexpand\undefined \expandafter\noexpand\csname GPTorg@#1@undefined\endcsname \let\expandafter\noexpand\csname GPTorg@#1@undefined\endcsname \noexpand\@undefined \endlinechar \the\endlinechar \catcode9 \the\catcode9 % tab \catcode13 \the\catcode13 % ^^M \catcode32 \the\catcode32 % space \catcode33 \the\catcode33 % ! \catcode34 \the\catcode34 % " \catcode35 \the\catcode35 % # \catcode36 \the\catcode36 % $ \catcode37 \the\catcode37 % % \catcode38 \the\catcode38 % & \catcode39 \the\catcode39 % ' \catcode40 \the\catcode40 % ( \catcode41 \the\catcode41 % ) \catcode42 \the\catcode42 % * \catcode43 \the\catcode43 % + \catcode44 \the\catcode44 % , \catcode45 \the\catcode45 % - \catcode46 \the\catcode46 % . \catcode47 \the\catcode47 % / \catcode58 \the\catcode58 % : \catcode59 \the\catcode59 % ; \catcode60 \the\catcode60 % < \catcode61 \the\catcode61 % = \catcode62 \the\catcode62 % > \catcode63 \the\catcode63 % ? \catcode64 \the\catcode64 % @ \catcode91 \the\catcode91 % [ \catcode92 \the\catcode92 % \ \catcode93 \the\catcode93 % ] \catcode94 \the\catcode94 % ^ \catcode95 \the\catcode95 % _ \catcode96 \the\catcode96 % ` \catcode123 \the\catcode123 % { \catcode124 \the\catcode124 % | \catcode125 \the\catcode125 % } \catcode126 \the\catcode126 % ~ }% \endlinechar 13 % \catcode9 10 % tab \catcode13 5 % ^^M (end of line) \catcode64 11 % \catcode61 12 % = \catcode32 10 % space \catcode33 12 % ! \catcode34 12 % " \catcode35 6 % # \catcode36 3 % $ \catcode37 14 % % \catcode38 4 % & \catcode39 12 % ' \catcode40 12 % ( \catcode41 12 % ) \catcode42 12 % * \catcode43 12 % + \catcode44 12 % , \catcode45 12 % - \catcode46 12 % . \catcode47 12 % / \catcode58 12 % : \catcode59 12 % ; \catcode60 12 % < \catcode61 12 % = \catcode62 12 % > \catcode63 12 % ? \catcode64 11 % @ \catcode91 12 % [ \catcode92 0 % \ \catcode93 12 % ] \catcode94 7 % ^ \catcode95 8 % _ \catcode96 12 % ` \catcode123 1 % { \catcode124 12 % | \catcode125 2 % } \catcode126 13 % ~ \expandafter\let\csname GPTorg@#1@undefined\endcsname\undefined \let\undefined\@undefined } \GPT@catcodes{} % 1.10a: .tif support was dropped % 1.10a: keywords mediabox|cropbox|... for \pdfximage % 1.30.0: keyword `page' for \pdfliteral added. % 1.40.0: JBIG2 support added in pdfTeX 1.40.0 \ifx\pdftexversion\@undefined \def\driver@release{1}% \else \ifnum\pdftexversion<12 % \def\driver@release{2}% \else \ifnum\pdftexversion<13 % \ifnum\expandafter`\pdftexrevision<`n % \def\driver@release{3}% \else \def\driver@release{4}% \fi \else \ifnum\pdftexversion=13 % \def\driver@release{5}% \else \ifnum\pdftexversion=14 % \def\driver@release{6}% \else \ifnum\pdftexversion<110 % \def\driver@release{7}% \else \ifnum\pdftexversion<130 % \def\driver@release{8}% \else \ifnum\pdftexversion<140 % \def\driver@release{9}% \else \def\driver@release{10}% \fi \fi \fi \fi \fi \fi \fi \fi \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname RequirePackage\endcsname\relax \input infwarerr.sty\relax \input ltxcmds.sty\relax \else \RequirePackage{infwarerr}[2007/09/09]% \RequirePackage{ltxcmds}[2010/12/07]% \fi \def\GPT@error{\@PackageError{pdftex.def}}% \def\GPT@warn{\@PackageWarning{pdftex.def}}% \ifx\Gin@log\@undefined \def\Gin@log{\message}% \fi \def\GPT@info{\@PackageInfoNoLine{pdftex.def}}% % Are we running under PDFTeX? \ltx@IfUndefined{pdftexversion}{% \GPT@error{% Option `pdftex' requires pdfTeX,\MessageBreak but pdfTeX features are missing.\MessageBreak Loading of this driver file is aborted% }\@ehc \expandafter\GPT@AtEnd }{} % Ensure PDF mode \ifnum\pdfoutput<1 % \GPT@error{% PDF mode expected, but DVI mode detected!\MessageBreak If you are using `latex', then call `pdflatex'.\MessageBreak Otherwise check and correct the driver options.\MessageBreak Error recovery by switching to PDF mode% }\@ehc \pdfoutput=1 % \fi \@ifundefined{ifGin@setpagesize} {\expandafter\let\csname ifGin@setpagesize\expandafter\endcsname \csname iftrue\endcsname} {} \ifGin@setpagesize \ifx\paperwidth\@undefined\else \AtBeginDocument{% % If a package has changed \mag, assume it knows what it is doing % and leave page size alone \ifnum\mag=\@m \ltx@IfUndefined{stockwidth}{% \ltx@IfUndefined{paperwidth}{% }{% \ifdim\paperwidth>0pt\relax \ifdim\paperheight>0pt\relax \pdfpagewidth=\paperwidth \pdfpageheight=\paperheight \fi \fi }% }{% \ifdim\stockwidth>0pt\relax \ifdim\stockheight>0pt\relax \pdfpagewidth=\stockwidth \pdfpageheight=\stockheight \fi \fi }% \fi } \fi \fi % Colour Support. The following models may be used. % * cmyk supported directly. % * rgb supported directly. % * RGB converted to rgb by this file. % * gray supported directly. % * named converted to cmyk by this file. % \def\c@lor@arg#1{% \dimen@#1\p@ \ifdim\dimen@<\z@\dimen@\maxdimen\fi \ifdim\dimen@>\p@ \PackageError{color}{Argument `#1' not in range [0,1]}\@ehd \fi } \def\color@cmyk#1#2{\c@lor@@cmyk#2\@@#1} \def\c@lor@@cmyk#1,#2,#3,#4\@@#5{% \c@lor@arg{#4}% \c@lor@arg{#1}% \c@lor@arg{#2}% \c@lor@arg{#3}% \edef#5{#1 #2 #3 #4 k #1 #2 #3 #4 K}% } \def\color@gray#1#2{% \c@lor@arg{#2}% \edef#1{#2 g #2 G}% } \def\color@rgb#1#2{\c@lor@@rgb#2\@@#1} \def\c@lor@@rgb#1,#2,#3\@@#4{% \c@lor@arg{#1}% \c@lor@arg{#2}% \c@lor@arg{#3}% \edef#4{#1 #2 #3 rg #1 #2 #3 RG}% } \def\color@RGB#1#2{\c@lor@@RGB#2\@@#1} \def\c@lor@@RGB#1,#2,#3\@@#4{% \c@lor@RGB@rgb{#1}\@tempa \c@lor@RGB@rgb{#2}\@tempb \c@lor@RGB@rgb{#3}\@tempc \c@lor@@rgb\@tempa,\@tempb,\@tempc\@@#4% } \def\c@lor@RGB@rgb#1#2{% \dimen@#1\p@ \divide\dimen@\@cclv \edef#2{\strip@pt\dimen@}% } \def\color@named#1#2{\c@lor@@named#2,,\@@#1} \def\c@lor@@named#1,#2,#3\@@#4{% \ltx@IfUndefined{col@#1}{% \PackageError{color}{Undefined color `#1'}\@ehd }{% \edef#4{\csname col@#1\endcsname}% }% } \ltx@IfUndefined{pdfcolorstack}{% \def\set@color{% \pdfliteral{\current@color}% \aftergroup\reset@color }% \def\reset@color{% \pdfliteral{\current@color}% }% }{% \chardef\main@pdfcolorstack=0 % \ltx@ifundefined{@pdfcolorstack}{% \def\@pdfcolorstack{\main@pdfcolorstack}% }{}% \def\set@color{% \pdfcolorstack\@pdfcolorstack push{\current@color}% \aftergroup\reset@color }% \def\reset@color{% \pdfcolorstack\@pdfcolorstack pop\relax }% } \def\define@color@named#1#2{% \expandafter\edef\csname col@#1\endcsname{#2}% } \def\current@color{0 g 0 G} % v0.02t: support for \pagecolor % fixed in v0.02p by using a box register, see % http://tug.org/pipermail/pdftex/2005-August/005916.html % % v0.03r: \nopagecolor/\no@page@color added. \ltx@newglobalif\ifGPT@pagecolor \ltx@ifundefined{nopagecolor}{% \def\nopagecolor{\no@page@color}% }{} \def\no@page@color{% \GPT@pagecolorfalse } \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname currentgrouplevel\endcsname\relax \catcode`X=9 % ignore \catcode`E=14 % comment \else \catcode`X=14 % comment \catcode`E=9 % ignore \fi \def\set@page@color{% \GPT@pagecolortrue \global\let\current@page@color\current@color \ltx@ifundefined{GPT@outputbox}{% % \newbox is outer in plain \csname newbox\endcsname\GPT@outputbox }{}% \ltx@ifundefined{GPTorg@shipout}{% \global\let\GPTorg@shipout\shipout \gdef\shipout{% X % ensure \GPT@outputbox is really void X \begingroup X \setbox\GPT@outputbox=\box\GPT@outputbox X \endgroup E \edef\GPT@saved@grouplevel{\number\currentgrouplevel}% \afterassignment\GPT@shipout \global\setbox\GPT@outputbox=% }% \gdef\GPT@shipout{% X \ifvoid\GPT@outputbox\relax E \ifnum\GPT@saved@grouplevel=\currentgrouplevel E \else \expandafter\aftergroup \fi \GPT@@shipout }% \gdef\GPT@@shipout{% \ifvoid\GPT@outputbox\relax \GPT@warn{Ignoring void output box}% \else \setbox\GPT@outputbox=\vbox{% \GPT@pageliteral \box\GPT@outputbox }% \GPTorg@shipout\box\GPT@outputbox\relax \fi }% \gdef\GPT@pageliteral{% \ifGPT@pagecolor \pdfliteral\ifnum\driver@release>8 page\else direct\fi{% q % gsave \current@page@color\ltx@space n % newpath 0 0 \strip@pt\pdfpagewidth\ltx@space \strip@pt\pdfpageheight\ltx@space re % rectangle % there is no need to convert to bp f % fill Q% grestore }% \fi }% }{}% } \catcode`\X=11 % \catcode`\E=11 % % Need the `colorfix' modifications as no internal colour stack % is maintained %<*colorfix> \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname pdfcolorstack\endcsname\relax \AtBeginDocument{% \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname color\endcsname\relax % Without color we don't need any fixes. \else \ltx@ifundefined{@ldc@l@r}{% \let\@ldc@l@r\color \def\color{% \ltx@IfUndefined{if@inlabel}{}{% \csname if@inlabel\expandafter\endcsname \expandafter\leavevmode\csname fi\endcsname }% \@ldc@l@r }% }{}% \ltx@ifundefined{@lduseb@x}{% \ltx@IfUndefined{usebox}{}{% \let\@lduseb@x\usebox \def\usebox#1{\@lduseb@x{#1}\reset@color}% }% }{}% \fi }% \fi % % % Graphic inclusion. Currently supports .png, .jpg, .mps and .pdf inclusion; % .tif support is dropped since pdfTeX 1.10a. % .mps is MetaPost output. % .mps inclusion depends on loading a CONTEXT module by Hans Hagen; % .pdf also needs a Context module unless pdftex 0.12n or later. % % PNG bitmaps may be scaled/rotated as usual % by the graphics commands or keyword arguments. % % Note the magic in front of the file name after \pdfimage, to % prevent it fouling up with file names starting with "depth". \def\Gread@png{% \GPT@read\Gread@@png } \def\Gread@@png#1{% \setbox\@tempboxa\hbox{% \pdfimage\noexpand\noexpand\noexpand\ltx@empty#1\relax }% \def\Gin@llx{0}\let\Gin@lly\Gin@llx \Gin@defaultbp\Gin@urx{\wd\@tempboxa}% \Gin@defaultbp\Gin@ury{\ht\@tempboxa}% } % % support for % * multipage pdf images (pdfTeX v0.14+) % * alternate print image (bitmaps only) % * driver version>=5 (0.14) % * printed image can be resused, but not the base image, % because it's dictionary contains the additional key /Alternates. % * not supported by Ghostscript or xpdf. % * option quiet % * option resetcolor % * option xmpfile % % \GPT@page: page number of pdf image or \ltx@empty otherwise. \let\GPT@page\ltx@empty % \GPT@print: file name for alternate image or \ltx@empty otherwise. \let\GPT@print\ltx@empty \let\GPT@xmpfile\ltx@empty \let\GPT@pagebox\ltx@empty \let\GPT@pagebox@\ltx@empty \let\GPT@interpolate\ltx@empty \let\GPT@decodearray\ltx@empty \let\GPT@mask\ltx@empty \let\GPT@intent\ltx@empty \let\GPT@ocobjnum\ltx@empty \ltx@newif\ifGPT@ResetColor \let\GPT@ResetColorEnd\relax \def\GPT@ResetColorBegin{% \ifGPT@ResetColor \ifGPT@IsBitmap \else \begingroup \normalcolor \let\GPT@ResetColorEnd\endgroup \fi \fi } \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname pdfmatch\endcsname\relax \def\GPT@match#1#2#3#4{}% \def\GPT@pat@real/{}% \else \def\GPT@match#1#2{% \ifnum\pdfmatch{#2}{#1}=1 % \expandafter\ltx@firstoftwo \else \expandafter\ltx@secondoftwo \fi }% \def\GPT@pat@real/{% (% 0(\ltx@backslashchar.[0-9]*)?|% \ltx@backslashchar.[0-9]+|% 1(\ltx@backslashchar.0*)?% )% }% \fi \begingroup \toks@{% \define@key{Gin}{resetcolor}[true]{% \csname GPT@ResetColor% \expandafter\ifx\csname iftrue\expandafter\endcsname \csname if#1\endcsname true% \else false% \fi \endcsname }% \ifnum\driver@release>5 % \define@key{Gin}{page}{% \def\GPT@page{#1}% \ifx\GPT@page\ltx@empty \else \edef\GPT@page{\number\GPT@page}% \fi }% \define@key{Gin}{print}{% \def\GPT@print{#1}% }% \else \define@key{Gin}{page}{% \GPT@warn{% pdfTeX >= 0.14 required for option\MessageBreak `page'% }% }% \define@key{Gin}{print}{% \GPT@warn{% pdfTeX >= 0.14 required for option\MessageBreak `print'% }% }% \fi \ifnum\driver@release>7 % % option pagebox \define@key{Gin}{pagebox}{% \expandafter\let\expandafter\GPT@pagebox \csname GPT@pagebox@#1\endcsname \ifx\GPT@pagebox\relax \let\GPT@pagebox\ltx@empty \GPT@warn{% Unknown value `#1' for `pagebox'.\MessageBreak Supported values:\MessageBreak mediabox, cropbox, bleedbox, trimbox, artbox% }% \fi }% \def\GPT@pagebox@mediabox{mediabox}% \let\GPT@pagebox@cropbox\ltx@empty \def\GPT@pagebox@bleedbox{bleedbox}% \def\GPT@pagebox@trimbox{trimbox}% \def\GPT@pagebox@artbox{artbox}% % option interpolate \define@key{Gin}{interpolate}[true]{% \expandafter\let\expandafter\GPT@interpolate \csname GPT@interpolate@#1\endcsname \ifx\GPT@interpolate\relax \let\GPT@interpolate\ltx@empty \GPT@warn{% Unknown value `#1' for `interpolate'.\MessageBreak Supported values: true, false% }% \fi }% \let\GPT@interpolate@false\ltx@empty \def\GPT@interpolate@true{1}% non-empty, value does not matter % option decodearray \define@key{Gin}{decodearray}{% \def\GPT@decodearray{#1}% \ifx\GPT@decodearray\ltx@empty \else \GPT@match\GPT@decodearray{% ((^| )\GPT@pat@real/ \GPT@pat@real/)+$% }{}{% \GPT@warn{% Invalid value (\GPT@decodearray)\MessageBreak for `decodearray' is ignored% }% \let\GPT@decodearray\ltx@empty }% \fi }% % option maskarray \define@key{Gin}{maskarray}{% \def\GPT@mask{#1}% \ifx\GPT@mask\ltx@empty \else \GPT@match\GPT@mask{% ((^| )[0-9]+ [0-9]+)+$% }{}{% \GPT@warn{% Invalid value (\GPT@mask)\MessageBreak for `maskarray' is ignored% }% \let\GPT@mask\ltx@empty }% \ifx\GPT@mask\ltx@empty \else \edef\GPT@mask{[\GPT@mask]}% \fi \fi }% % option intent \define@key{Gin}{intent}{% \def\GPT@intent{#1}% \ifx\GPT@intent\ltx@empty \else \GPT@match\GPT@intent{% ^((Absolute|Relative)Colorimetric|Saturation|Perceptual)$% }{}{% \GPT@match\GPT@intent{% ^[A-Za-z0-9_]+$% }{% \GPT@warn{% Rendering intent `\GPT@intent'\MessageBreak is not a standard name of the PDF specification% }% }{% \GPT@warn{% Ignoring intent `\GPT@intent'\MessageBreak with unusual characters% }% \let\GPT@intent\ltx@empty }% }% \fi }% % option ocobjnum \define@key{Gin}{ocobjnum}{% \edef\GPT@ocobjnum{#1}% \ifx\GPT@ocobjnum\ltx@empty \else \edef\GPT@ocobjnum{\number\GPT@ocobjnum}% \GPT@match\GPT@ocobjnum{^[1-9]+[0-9]*$}{% }{% \GPT@warn{% Invalid value (\GPT@ocobjnum)\MessageBreak for `ocobjnum' is ignored% }% \let\GPT@ocobjnum\ltx@empty }% \ifx\GPT@ocobjnum\ltx@empty \else \edef\GPT@ocobjnum{\number\GPT@ocobjnum}% \fi \fi }% % option ocobjref \define@key{Gin}{ocobjref}{% \edef\GPT@ocobjnum{#1}% \ifx\GPT@ocobjnum\ltx@empty \else \edef\GPT@ocobjnum{% \expandafter\strip@prefix\meaning\GPT@ocobjnum }% \GPT@match\GPT@ocobjnum{^[1-9]+[0-9]* 0 R$}{% }{% \GPT@warn{% Invalid value (\GPT@ocobjnum)\MessageBreak for `ocobjref' is ignored% }% \let\GPT@ocobjnum\ltx@empty }% \ifx\GPT@ocobjnum\ltx@empty \else \begingroup \def\GPT@temp##1 ##2\@nil{\endgroup \def\GPT@ocobjnum{##1}% }% \expandafter\GPT@temp\GPT@ocobjnum\@nil \edef\GPT@ocobjnum{\number\GPT@ocobjnum}% \fi \fi }% \else \def\GPT@temp#1{% \define@key{Gin}{#1}{% \GPT@warn{% pdfTeX >= 1.10a required for option `#1'% }% }% }% \GPT@temp{pagebox}% \GPT@temp{interpolate}% \GPT@temp{decodearray}% \GPT@temp{maskarray}% \GPT@temp{intent}% \GPT@temp{ocobjnum}% \GPT@temp{ocobjref}% \fi \define@key{Gin}{quiet}[]{% \let\Gin@log\ltx@gobble }% \define@key{Gin}{resolution}{% \pdfimageresolution#1\relax }% \define@key{Gin}{xmpfile}[\Gin@base.xmp]{% \def\GPT@xmpfile{#1}% }% }% \ltx@IfUndefined{define@key}{% \edef\x{\endgroup \noexpand\AtBeginDocument{% \noexpand\ltx@IfUndefined{define@key}{}{\the\toks@}% }% }\x }{% \expandafter\endgroup\the\toks@ }% % redefinitions of some graphicx options: \def\GPT@disable#1{% \GPT@warn{% Option `#1' is not supported, use\MessageBreak option `viewport' instead% }% } \def\GPT@fix{% \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname define@key\endcsname\relax \else \def\KV@Gin@bb{% \GPT@warn{% Option `bb' does not make sense,\MessageBreak using `viewport' instead% }% \KV@Gin@viewport }% \define@key{Gin}{bbllx}{\GPT@disable{bbllx}}% \define@key{Gin}{bblly}{\GPT@disable{bblly}}% \define@key{Gin}{bburx}{\GPT@disable{bburx}}% \define@key{Gin}{bbury}{\GPT@disable{bbury}}% \fi } \AtBeginDocument{\GPT@fix} % % Check for image file existence % \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname pdffilesize\endcsname\relax \ifnum\driver@release>9 % \RequirePackage{pdftexcmds}\relax \fi \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname pdf@filesize\endcsname\relax \def\GPT@IfFileExists#1{% \IfFileExists{#1}% }% \else \def\GPT@IfFileExists#1{% \expandafter\expandafter\expandafter\ifx \expandafter\expandafter\expandafter\relax\pdf@filesize{#1}\relax \expandafter\ltx@secondoftwo \else \expandafter\ltx@firstoftwo \fi }% \fi \else \def\GPT@IfFileExists#1{% \expandafter\ifx\expandafter\relax\pdffilesize{#1}\relax \expandafter\ltx@secondoftwo \else \expandafter\ltx@firstoftwo \fi }% \fi % % Wrapper for \Gread@... that checks image existence first. % \def\GPT@read#1#2{% \GPT@IfFileExists{#2}% {% #1{#2}% }{% \def\Gin@llx{0}% \let\Gin@lly\Gin@llx \def\Gin@urx{72}% \let\Gin@ury\Gin@urx \ifGin@draft \else \GPT@error{File `#2' not found}{% Using draft setting for this image.\MessageBreak \@ehc }% \Gin@drafttrue \fi }% } % % mechanism for re-use of objects also % allows us to get the size by deriving it from the initial storage; % this works for all graphics types. % \ltx@ifundefined{Gread@gobject}{% \csname newcount\endcsname\Gread@gobject }{} \def\GPT@ReusedName#1{% \ifx\GPT@print\ltx@empty #1% \else \GPT@print \fi } \def\GPT@objref{ 0 R} \def\Gread@pdftex{% \GPT@read\Gread@@pdftex } \def\Gread@@pdftex#1{% % Ensure that option `print' works only on bitmap images. \let\GPT@Attr\ltx@empty \let\GPT@AttrShort\ltx@empty \ifnum\driver@release>7 % \ifx\GPT@ocobjnum\ltx@empty \else \edef\GPT@AttrShort{\GPT@AttrShort :OC\GPT@ocobjnum }% \edef\GPT@Attr{\GPT@Attr /OC \GPT@ocobjnum\GPT@objref }% \fi \fi \ifGPT@IsBitmap \let\GPT@page\ltx@empty \let\GPT@pagebox\ltx@empty \ifnum\driver@release>7 % \ifx\GPT@xmpfile\ltx@empty \else \ltx@IfUndefined{GPT@XMP@\GPT@xmpfile}{% \GPT@IfFileExists{\GPT@xmpfile}{% \begingroup \pdfcompresslevel=0 % \immediate\pdfobj stream attr{% /Type/Metadata% /Subtype/XML% }file{\GPT@xmpfile}% \expandafter\xdef\csname GPT@XMP@\GPT@xmpfile\endcsname{% \the\pdflastobj }% \endgroup }{% \GPT@warn{Missing XMP file (\GPT@xmpfile)}% }% }{}% \ltx@IfUndefined{GPT@XMP@\GPT@xmpfile}{}{% \edef\GPT@Attr{\GPT@Attr /Metadata \@nameuse{GPT@XMP@\GPT@xmpfile}\GPT@objref }% \edef\GPT@AttrShort{\GPT@AttrShort :MD\@nameuse{GPT@XMP@\GPT@xmpfile}% }% }% \fi \ifx\GPT@interpolate\ltx@empty \else \edef\GPT@Attr{\GPT@Attr /Interpolate true% }% \edef\GPT@AttrShort{\GPT@AttrShort :I% }% \fi \ifx\GPT@decodearray\ltx@empty \else \edef\GPT@Attr{\GPT@Attr /Decode[\GPT@decodearray]% }% \edef\GPT@AttrShort{\GPT@AttrShort :D[\GPT@decodearray]% }% \fi \ifx\GPT@mask\ltx@empty \else \edef\GPT@Attr{\GPT@Attr /Mask\GPT@mask }% \edef\GPT@AttrShort{\GPT@AttrShort :M\GPT@mask }% \fi \ifx\GPT@intent\ltx@empty \else \edef\GPT@AttrShort{\GPT@AttrShort :RI\GPT@intent }% \expandafter\ifx\csname pdfescapename\endcsname\relax \expandafter\ifx\csname pdf@escapename\endcsname\relax \else \edef\GPT@intent{\pdf@escapename{\GPT@intent}}% \fi \else \edef\GPT@intent{\pdfescapename{\GPT@intent}}% \fi \edef\GPT@Attr{\GPT@Attr /Intent/\GPT@intent }% \fi \fi \else \let\GPT@interpolate\ltx@empty \let\GPT@decodearray\ltx@empty \let\GPT@mask\ltx@empty \let\GPT@intent\ltx@empty \ifx\GPT@page\ltx@empty \else \edef\GPT@AttrShort{\GPT@AttrShort :P\GPT@page }% \fi \ifx\GPT@pagebox\ltx@empty \else \edef\GPT@AttrShort{% \GPT@AttrShort :\expandafter\ltx@car\GPT@pagebox{}\@nil b% }% \fi \ifx\GPT@print\ltx@empty \else \GPT@warn{% Option `print' can only be used\MessageBreak for bitmap images% }% \let\GPT@print\ltx@empty \fi \fi % Check if print image exists. \ifx\GPT@print\ltx@empty \else \GPT@IfFileExists{\GPT@print}{% }{% \GPT@error{Print image `\GPT@print' not found}{% The print version of the image is ignored.\MessageBreak \@ehc }% \let\GPT@print\ltx@empty }% \fi % If option `print' is set, the screen image object % will contain an additional /Alternate entry % and will not be reused. \ifx\GPT@print\ltx@empty \else \expandafter\expandafter\expandafter\ltx@firstoftwo\expandafter\ltx@gobbletwo \fi \ltx@ifundefined{#1 image\GPT@AttrShort}{% \ifnum\driver@release>4 % \ifnum\driver@release>5 % \ifx\GPT@print\ltx@empty \ifx\GPT@Attr\ltx@empty \let\GPT@RuleAttr\ltx@empty \else \edef\GPT@RuleAttr{attr{\GPT@Attr}}% \fi \else \ltx@ifundefined{\GPT@print\ltx@space image\GPT@AttrShort}{% \immediate\pdfximage{\GPT@print}% \setbox\@tempboxa=\hbox{\pdfrefximage\pdflastximage}% \edef\GPT@PrintObj{\the\pdflastximage}% \expandafter\xdef\csname\GPT@print\ltx@space image\GPT@AttrShort\endcsname{% \pdfrefximage\GPT@PrintObj\relax }% \immediate\pdfobj{% [<<% /Image \GPT@PrintObj\GPT@objref /DefaultForPrinting true% >>]% }% \def\GPT@RuleAttr{% width\wd\@tempboxa height\ht\@tempboxa attr{% \GPT@Attr /Alternates \the\pdflastobj\GPT@objref }% }% }{% \edef\GPT@PrintObj{% \expandafter\expandafter\expandafter\ltx@gobble \csname\GPT@print\ltx@space image\GPT@AttrShort\endcsname }% \immediate\pdfobj{% [<<% /Image \GPT@PrintObj\GPT@objref /DefaultForPrinting true% >>]% }% \def\GPT@RuleAttr{% width \csname\GPT@print\ltx@space width\GPT@AttrShort\endcsname height \csname\GPT@print\ltx@space height\GPT@AttrShort\endcsname attr{% \GPT@Attr /Alternates \the\pdflastobj\GPT@objref }% }% }% \fi \pdfximage\GPT@RuleAttr \ifx\GPT@page\ltx@empty \else page \GPT@page \fi \GPT@pagebox {#1}% \setbox\@tempboxa=\hbox{\pdfrefximage\pdflastximage}% \else \setbox\@tempboxa=\hbox{\pdfimage{#1}}% \fi \else \setbox\@tempboxa=\hbox{% \pdfimage\noexpand\noexpand\noexpand\ltx@empty#1\relax }% \fi \def\Gin@llx{0}\let\Gin@lly\Gin@llx \Gin@defaultbp\Gin@urx{\wd\@tempboxa}% \Gin@defaultbp\Gin@ury{\ht\@tempboxa}% \expandafter\xdef\csname\GPT@ReusedName{#1} width\GPT@AttrShort\endcsname{% \the\wd\@tempboxa }% \expandafter\xdef\csname\GPT@ReusedName{#1} height\GPT@AttrShort\endcsname{% \the\ht\@tempboxa }% \ifnum\driver@release>5 % \expandafter\xdef\csname #1 image\GPT@AttrShort \ifx\GPT@print\ltx@empty\else!\fi\endcsname{% \pdfrefximage\the\pdflastximage }% \else \pdfform\@tempboxa \Gread@gobject=\pdflastform \expandafter\xdef\csname#1 image\endcsname{% \pdfrefform\the\Gread@gobject }% \fi \Gin@log{% <#1, id=% \ifnum\driver@release>5 % \the\pdflastximage \ifx\GPT@page\ltx@empty\else , page=\GPT@page\fi \ifx\GPT@pagebox\ltx@empty\else, pagebox=\GPT@pagebox\fi \ifx\GPT@interpolate\ltx@empty\else, interpolate=true\fi \ifx\GPT@print\ltx@empty \else , print=\GPT@print, id=\GPT@PrintObj \fi \else \the\Gread@gobject \fi , \the\wd\@tempboxa\ltx@space x \the\ht\@tempboxa >% }% }{% \def\Gin@llx{0}\let\Gin@lly\Gin@llx \Gin@defaultbp\Gin@urx{\csname#1 width\GPT@AttrShort\endcsname}% \Gin@defaultbp\Gin@ury{\csname#1 height\GPT@AttrShort\endcsname}% }% } \def\Ginclude@pdftex#1{% \def\@tempa{!}% \ifx\Gin@scaley\@tempa \let\Gin@scaley\Gin@scalex \else \ifx\Gin@scalex\@tempa\let\Gin@scalex\Gin@scaley\fi \fi \Gin@log{% % }% \GPT@info{% #1\ifx\GPT@page\ltx@empty\else, page\GPT@page\fi \ltx@space used\on@line.\MessageBreak Requested size: % \the\Gin@req@width\ltx@space x \the\Gin@req@height }% \hbox{% \GPT@ResetColorBegin \Gscale@box{\Gin@scalex}[\Gin@scaley]{% \ltx@IfUndefined{Gin@vllx}{% \GPT@viewportfalse % without viewport/trim clipping does not make sense % for pdfTeX \Gin@clipfalse }{}% \ifGin@clip \ifnum\driver@release<6 % \GPT@warn{No clipping support in pdfTeX < 0.14}% \else \if!\Gin@vllx\Gin@vlly\Gin@vurx\Gin@vury!% \else \let\GPT@clipend\GPT@DoClipEnd \setbox\@tempboxa\hbox\bgroup \fi \fi \fi \ifGPT@viewport \ifdim\Gin@vlly\p@=\z@ \else \lower\Gin@vlly bp\hbox\bgroup \fi \ifdim\Gin@vllx\p@=\z@ \else \hskip-\Gin@vllx bp\relax \fi \fi \csname#1 image\GPT@AttrShort \ifx\GPT@print\ltx@empty\else!\fi \endcsname \ifGPT@viewport \ifdim\Gin@vlly\p@=\z@ \else \egroup \fi \GPT@clipend \fi }% \GPT@ResetColorEnd }% } \ltx@newif\ifGPT@viewport \GPT@viewporttrue \let\GPT@clipend\relax \def\GPT@DoClipEnd{% \egroup \dp\@tempboxa\z@ % \Gin@urx and \Gin@ury already contain the correct values, % so both cases viewport and trim can be handled together: \dimen@\Gin@urx\p@ % v0.03k \Gin@vllx replaced by \Gin@llx \advance\dimen@ -\Gin@llx\p@ \wd\@tempboxa\strip@pt\dimen@ bp\relax \dimen@\Gin@ury\p@ % v0.03k \Gin@vlly replaced by \Gin@lly \advance\dimen@ -\Gin@lly\p@ \ht\@tempboxa\strip@pt\dimen@ bp\relax \let\GPT@temp\ltx@empty \ifnum\driver@release>7 % \ifx\GPT@ocobjnum\ltx@empty \else \edef\GPT@temp{attr{/OC \GPT@ocobjnum\GPT@objref}}% \fi \fi \expandafter\pdfxform\GPT@temp\@tempboxa \pdfrefxform\pdflastxform } \ltx@newif\ifGPT@IsBitmap \def\Gread@pdfbitmap#1{% \GPT@IsBitmaptrue \Gread@pdftex{#1}% \GPT@IsBitmapfalse } \edef\Gread@MBox{/MediaBox} \def\Gread@pdf{% \GPT@read\Gread@@pdf } \def\Gread@@pdf#1{% \begingroup \@tempcnta\z@ \loop \ifnum\@tempcnta<\@xxxii \catcode\@tempcnta14 % \advance\@tempcnta\@ne \repeat \catcode127=14 % \let\do\@makeother\dospecials\catcode`\ 10 % \catcode\endlinechar5 % \immediate\openin\@inputcheck#1 % \ifeof\@inputcheck \@latex@error{File `#1' not found}\@ehc \else \Gread@true \let\@tempb\Gread@false \loop % v0.02e: use \. not \@tempa so the space is preserved before [ \read\@inputcheck to\.% \ifeof\@inputcheck \Gread@false \else \expandafter\Gread@find@mbox\. []\\% \fi \ifGread@ \repeat \immediate\closein\@inputcheck \fi \ifGin@bbox \else \@latex@error {Cannot determine size of graphic in #1 (no BoundingBox)}% \@ehc \gdef\@gtempa{0 0 72 72 }% \fi \endgroup \expandafter\Gread@parse@bb\@gtempa\\% } \long\def\Gread@find@mbox#1 [#2]#3\\{% hash-ok \def\@tempa{#1}% \ifx\@tempa\Gread@MBox \gdef\@gtempa{#2 }% \@tempb \Gin@bboxtrue \fi } \def\Ginclude@png#1{% \hbox{% % v0.02f add \@depth\z@ (from Sebastian) \pdfimage \@height\Gin@req@height \@width\Gin@req@width \@depth\z@ \noexpand\noexpand\noexpand\ltx@empty#1\relax }% } \def\Ginclude@mps#1{% \def\@tempa{!}% \ifx\Gin@scaley\@tempa \let\Gin@scaley\Gin@scalex \else \ifx\Gin@scalex\@tempa\let\Gin@scalex\Gin@scaley\fi \fi \hbox{% \GPT@ResetColorBegin \Gscale@box{\Gin@scalex}[\Gin@scaley]{% \ltx@IfUndefined{Gin@vllx}{% \GPT@viewportfalse % without viewport/trim clipping does not make sense % for pdfTeX \Gin@clipfalse }{}% \ifGin@clip \ifnum\driver@release<6 % \GPT@warn{No clipping support in pdfTeX < 0.14}% \else \if!\Gin@vllx\Gin@vlly\Gin@vurx\Gin@vury!% \else \let\GPT@clipend\GPT@DoClipEnd \setbox\@tempboxa\hbox\bgroup \fi \fi \fi \ifGPT@viewport \ifdim\Gin@vlly\p@=\z@ \else \lower\Gin@vlly bp\hbox\bgroup \fi \ifdim\Gin@vllx\p@=\z@ \else \hskip-\Gin@vllx bp\relax \fi \fi \GPT@catcodes{mps}% \convertMPtoPDF{#1}{1}{1}% \GPT@restore@mps \ifGPT@viewport \ifdim\Gin@vlly\p@=\z@ \else \egroup \fi \GPT@clipend \fi }% \GPT@ResetColorEnd }% } \def\Gread@mps{% \GPT@read\Gread@eps } \ifnum\driver@release>3 % \let\Ginclude@png\Ginclude@pdftex \let\Ginclude@jpg\Ginclude@pdftex \let\Ginclude@pdf\Ginclude@pdftex \let\Gread@pdf\Gread@pdftex \let\Gread@png\Gread@pdfbitmap \let\Gread@jpg\Gread@pdfbitmap \ifnum\driver@release>5 % \ifnum\driver@release<8 % \let\Gread@tif\Gread@pdfbitmap \let\Ginclude@tif\Ginclude@pdftex \else \ifnum\driver@release>9 % \expandafter\let\csname Gread@jbig2\endcsname\Gread@pdfbitmap \expandafter\let\csname Ginclude@jbig2\endcsname\Ginclude@pdftex \fi \fi \fi \else \def\Ginclude@pdf#1{% \def\@tempa{!}% \ifx\Gin@scaley\@tempa \let\Gin@scaley\Gin@scalex \else \ifx\Gin@scalex\@tempa\let\Gin@scalex\Gin@scaley\fi \fi \hbox{% \GPT@catcodes{pdf}% \convertPDFtoPDF{#1}{\Gin@scalex}{\Gin@scaley} {0bp} {0bp}% {\Gin@req@width}{\Gin@req@height}% \GPT@restore@pdf }% }% \fi % v0.02e: restrict the rules to just the types that pdftex can currently % deal with. \ifnum\driver@release>3 % \def\Gin@extensions{.png,.pdf,.jpg,.mps,.jpeg,.PNG,.PDF,.JPG,.JPEG}% \@namedef{Gin@rule@.jpg}#1{{jpg}{.jpg}{#1}}% \@namedef{Gin@rule@.jpeg}#1{{jpg}{.jpeg}{#1}}% \@namedef{Gin@rule@.JPG}#1{{jpg}{.JPG}{#1}}% \@namedef{Gin@rule@.JPEG}#1{{jpg}{.JPEG}{#1}}% \ifnum\driver@release>5 % \ifnum\driver@release<8 % \def\Gin@extensions{% .png,.pdf,.jpg,.mps,.tif,.jpeg,% .PNG,.PDF,.JPG,.JPEG% }% \@namedef{Gin@rule@.tif}#1{{tif}{.tif}{#1}}% \else \ifnum\driver@release>9 % \ifnum\pdfminorversion>3 % \def\Gin@extensions{% .png,.pdf,.jpg,.mps,.jpeg,.jbig2,.jb2,% .PNG,.PDF,.JPG,.JPEG,.JBIG2,.JB2}% \fi \@namedef{Gin@rule@.jb2}#1{{jbig2}{.jb2}{#1}}% \@namedef{Gin@rule@.jbig2}#1{{jbig2}{.jbig2}{#1}}% \fi \fi \fi \else \def\Gin@extensions{.png,.pdf,.mps,.PNG,.PDF}% \fi \@namedef{Gin@rule@.png}#1{{png}{.png}{#1}} \@namedef{Gin@rule@.PNG}#1{{png}{.PNG}{#1}} \@namedef{Gin@rule@.mps}#1{{mps}{.mps}{#1}} \@namedef{Gin@rule@.pdf}#1{{pdf}{.pdf}{#1}} \@namedef{Gin@rule@.PDF}#1{{pdf}{.PDF}{#1}} \@namedef{Gin@rule@.eps}#1{{eps}{.eps}{#1}} % Rotation % slightly hacky, but set width of box 0 to 0pt otherwise % the CTM gets restored in the wrong place. \def\GPT@MatrixIdentity{1 0 0 1} \def\GPT@Zero{0} \def\GPT@Minus{-} \def\GPT@NormalizeNumber#1{% \edef#1{#1}% \edef#1{\expandafter\ltx@zapspace\expandafter{#1}}% \edef#1{\expandafter\GPT@ZapPlus#1+\@nil}% \edef#1{\expandafter\GPT@ZapMinusMinus#1--\@nil}% \expandafter\GPT@Split#1..\@nil \ifx\GPT@frac\ltx@empty \else \edef\GPT@frac{% \expandafter\GPT@Reverse\expandafter{\expandafter}\GPT@frac\@nil }% \edef\GPT@frac{% \expandafter\GPT@ZapLeadingZeros\GPT@frac\ltx@empty }% \ifx\GPT@frac\ltx@empty \else \edef\GPT@frac{% \expandafter\GPT@Reverse\expandafter{\expandafter}\GPT@frac\@nil }% \fi \fi \edef\GPT@sign{\expandafter\ltx@car\GPT@int\ltx@empty\@nil}% \ifx\GPT@sign\GPT@Minus \edef\GPT@int{\expandafter\ltx@cdr\GPT@int\@nil}% \else \def\GPT@sign{}% \fi \edef\GPT@int{% \expandafter\GPT@ZapLeadingZeros\GPT@int\ltx@empty }% \edef\GPT@temp{\GPT@int\GPT@frac}% \ifx\GPT@temp\ltx@empty \def#1{0}% \else \edef#1{% \GPT@sign \GPT@int \ifx\GPT@frac\ltx@empty \else .\GPT@frac \fi }% \fi } \def\GPT@ZapPlus#1+#2\@nil{% #1% \ifx\ltx@empty#2\ltx@empty \expandafter\ltx@gobble \else \expandafter\@firstofone \fi {% \GPT@ZapPlus#2\@nil }% } \def\GPT@ZapMinusMinus#1--#2\@nil{% #1% \ifx\ltx@empty#2\ltx@empty \expandafter\ltx@gobble \else \expandafter\@firstofone \fi {% \GPT@ZapMinusMinus#2\@nil }% } \def\GPT@Split#1.#2.#3\@nil{% \def\GPT@int{#1}% \ifx\ltx@empty#2\ltx@empty \let\GPT@frac\ltx@empty \else \def\GPT@frac{#2}% \fi } \def\GPT@Reverse#1#2#3\@nil{% \ifx\ltx@empty#3\ltx@empty #2#1% \expandafter\ltx@gobble \else \expandafter\ltx@firstofone \fi {% \GPT@Reverse{#2#1}#3\@nil }% } \def\GPT@ZapLeadingZeros#1{% \ifx0#1% \expandafter\GPT@ZapLeadingZeros \else #1% \fi } \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname pdfsetmatrix\endcsname\relax % Patrick Daly found an error here with doubled minus signs when % \Grot@sin is negative. Fixed. \def\Grot@start{% \GPT@NormalizeNumber\Grot@sin \GPT@NormalizeNumber\Grot@cos \edef\GPT@temp{% \Grot@cos\ltx@space\Grot@sin\ltx@space \if-\GPT@sin \else % avoid negative zero \ifx\Grot@sin\GPT@Zero \GPT@Zero \else -\Grot@sin \fi \fi \ltx@space\Grot@cos }% \ifx\GPT@temp\GPT@MatrixIdentity \def\Grot@end{}% \else \pdfliteral{ q \GPT@temp\ltx@space 0 0 cm}% \wd\z@\z@ \fi \wd\z@\z@ }% \def\Grot@end{% \pdfliteral{ Q}% }% % Scaling is OK, as graphics package does it right here. \def\Gscale@start{% \GPT@NormalizeNumber\Gscale@x \GPT@NormalizeNumber\Gscale@y \edef\GPT@temp{% \Gscale@x\ltx@space0 0 \Gscale@y }% \ifx\GPT@temp\GPT@MatrixIdentity \def\Gscale@end{}% \else \pdfliteral{ q \GPT@temp\ltx@space 0 0 cm}% \fi }% \else \def\Grot@start{% \GPT@NormalizeNumber\Grot@sin \GPT@NormalizeNumber\Grot@cos \edef\GPT@temp{% \Grot@cos\ltx@space\Grot@sin\ltx@space \if-\Grot@sin \else \ifx\Grot@sin\GPT@Zero \GPT@Zero \else -\Grot@sin \fi \fi \ltx@space\Grot@cos }% \ifx\GPT@temp\GPT@MatrixIdentity \def\Grot@end{}% \else \pdfsave \pdfsetmatrix{\GPT@temp}% \wd\z@\z@ \fi }% \def\Grot@end{\pdfrestore}% \def\Gscale@start{% \GPT@NormalizeNumber\Gscale@x \GPT@NormalizeNumber\Gscale@y \edef\GPT@temp{% \Gscale@x\ltx@space0 0 \Gscale@y }% \ifx\GPT@temp\GPT@MatrixIdentity \def\Gscale@end{}% \else \pdfsave \pdfsetmatrix{\GPT@temp}% \fi }% \fi \let\Gscale@end\Grot@end % undo the trig.sty `optimization' so that these 0 1 and -1 values % get written out as digits, not unexpandable TeX primitives. % 0.04q: space added to remain consistent with trig.sty. \def\GPT@PatchTrig{% \def\GPT@temp##1(##2)=##3 {% \expandafter\def\csname ##1(##2)\endcsname{##3 }% }% \GPT@temp sin(0)=0 % \GPT@temp cos(0)=1 % \GPT@temp sin(90)=1 % \GPT@temp cos(90)=0 % \GPT@temp sin(-90)=-1 % \GPT@temp cos(-90)=0 % \GPT@temp sin(180)=0 % \GPT@temp cos(180)=-1 % % added in 0.04q \GPT@temp sin(270)=-1 % \GPT@temp cos(270)=0 % \GPT@temp sin(360)=0 % \GPT@temp cos(360)=1 % \GPT@temp sin(-180)=0 % \GPT@temp cos(-180)=-1 % \GPT@temp sin(-270)=1 % \GPT@temp cos(-270)=0 % \GPT@temp sin(-360)=0 % \GPT@temp cos(-360)=1 % \ltx@ifpackageloaded{trig}{% \let\GPT@PatchTrig\relax }{}% } \AtBeginDocument{\GPT@PatchTrig} \ltx@ifpackageloaded{trig}{\GPT@PatchTrig}{} \ltx@IfUndefined{AfterPackage}{}{% scrlfile.sty \AfterPackage{trig}{\GPT@PatchTrig}% } \ltx@IfUndefined{AtEndOfPackageFile}{}{% filehook.sty \AtEndOfPackageFile{trig}{\GPT@PatchTrig}% } \ltx@IfUndefined{AtEndPackage}{}{% memoir.cls \AtEndPackage{trig}{\GPT@PatchTrig}% } % v0.02e: Restore catcodes of context letters. % Not needed with current version of supp-pdf % but protects against older versions. % v0.03o: Catcode protection of '=' because of turkish.ldf. \def\GPT@LoadSuppPdf{% \ltx@IfUndefined{convertMPtoPDF}{% \GPT@catcodes{supp}% \InputIfFileExists{supp-pdf.mkii}{}{% \InputIfFileExists{supp-pdf}{}{}% }% \GPT@restore@supp }{% % supp-pdf is probably already loaded. }% % If supp-pdf is not available, \convertMPtoPDF generates % an error message. \providecommand inside the third argument % of \InputIfFileExists will not work: % * \InputIfFileExists has problems with parameters (#1). % * Implementation of \providecommand is insufficient in miniltx.tex \ltx@ifundefined{convertMPtoPDF}{% \newcommand{\convertMPtoPDF}[3]{% \GPT@error{% Cannot convert ##1 from MPS to PDF.\MessageBreak The support file `supp-pdf.mkii' (supp-pdf.tex) is missing% }{% The graphics driver for pdfTeX needs `supp-pdf.mkii'\MessageBreak (or `supp-pdf.tex' and/or `supp-mis.tex')\MessageBreak to convert MetaPost output files to PDF.\MessageBreak These files are part of ConTeXt and can also be found here:% \MessageBreak \ltx@space\ltx@space CTAN:macros/pdftex/graphics/\MessageBreak You'll get more errors if you'll continue now.% }% }% }{}% \let\GPT@LoadSuppPdf\relax } \AtBeginDocument{% \GPT@LoadSuppPdf } % Adds support for extended MetaPost features (transparency) \def\LoadMetaPostSpecialExtensions{% \AtBeginDocument{% \ltx@IfUndefined{assignMPStransparency}{% \GPT@catcodes{mpe}% \let\GPT@found=N% \IfFileExists{supp-pdf.mkii}{\let\GPT@found=Y}{% \IfFileExists{supp-pdf}{\let\GPT@found=Y}{}% }% \ifx Y\GPT@found \InputIfFileExists{supp-mis.mkii}{}{% \InputIfFileExists{supp-mis}{}{\let\GPT@found=N}% }% \ifx Y\GPT@found \InputIfFileExists{supp-mpe.mkii}{}{% \InputIfFileExists{supp-mpe}{}{\let\GPT@found=N}% }% \ifx Y\GPT@found \MPcmykcolorstrue \MPspotcolorstrue \chardef\makeMPintoPDFobject=1 % \else \GPT@warn{% Cannot enable MetaPost Special Extensions,\MessageBreak because `supp-mpe.mkii' (or `supp-mpe.tex')\MessageBreak is missing% }% \fi \else \GPT@warn{% Cannot enable MetaPost Special Extensions,\MessageBreak because `supp-mis.mkii' (or `supp-mis.tex')\MessageBreak is missing% }% \fi \else \GPT@warn{% Cannot enable support for MetaPost images,\MessageBreak because `supp-pdf.mkii' (or `supp-pdf.tex')\MessageBreak is missing% }% \fi \GPT@restore@mpe }{}% }% \let\LoadMetaPostSpecialExtensions\relax } \ltx@IfUndefined{@onlypreamble}{% }{% \@onlypreamble\LoadMetaPostSpecialExtensions } % Load package epstopdf if % a) LaTeX is running (plain TeX users are on their own), % b) and shell escape (\write18) is enabled (possibly restricted), % c) and \DoNotLoadEpstopdf either does not exist or is not \relax, % d) and neither pst-pdf nor pdftricks is loaded (by \begin{document}). % % In other words, by default .eps files will be automatically % converted to .pdf files when outputting pdf. This can be wrong! % If the .pdf is the source, rather than the .eps, you should put % \newcommand{\DoNotLoadEpstopdf}{} % before even the \documentclass line of your document. % % More information about the epstopdf run will be in the .log file; % see http://ctan.org/pkg/epstopdf-pkg for more info about the % epstopdf package itself. In turn, it calls the epstopdf script % (http://ctan.org/pkg/epstopdf). % % For the first discussion and background on this, see the thread on latex-l: % http://thread.gmane.org/gmane.comp.tex.latex.latex3/1465 % \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname DoNotLoadEpstopdf\endcsname\relax \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname AtEndOfPackage\endcsname\relax \else \AtEndOfPackage{% \AtBeginDocument{% \ifx\includegraphics\@undefined\else \@ifpackageloaded{pst-pdf}{}{% \@ifpackageloaded{pdftricks}{}{% \RequirePackage{pdftexcmds}[2007/11/11]% \expandafter\ifx\csname pdf@shellescape\endcsname\relax \else \@ifpackageloaded{graphics}{ \ifnum\pdf@shellescape>0 % % only add .eps to file extension list if epstopdf is loaded \edef\Gin@extensions{\Gin@extensions,.eps}% \RequirePackage{epstopdf-base}[2009/07/12]% \fi}{} \fi }% pdftricks not loaded }% pst-pdf not loaded \fi }% AtBeginDocument block }% AtEndofPackage block \fi % AtEndofPackage not defined \fi % DoNotLoadEpstopdf not defined \GPT@AtEnd