diff options
Diffstat (limited to 'macros/latex/contrib/graphics-def/xetex.def')
-rw-r--r-- | macros/latex/contrib/graphics-def/xetex.def | 435 |
1 files changed, 435 insertions, 0 deletions
diff --git a/macros/latex/contrib/graphics-def/xetex.def b/macros/latex/contrib/graphics-def/xetex.def new file mode 100644 index 0000000000..bb2cba80d4 --- /dev/null +++ b/macros/latex/contrib/graphics-def/xetex.def @@ -0,0 +1,435 @@ +%% xetex.def Copyright (C) 2005-2017 LaTeX3 Project, Jin-Hwan Cho, Shunsaku Hirata +%% (with contributions from many others) +%% +%% 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 Maintainer of this work is the LaTeX3 Project. +%% +%% https://github.com/latex3/graphics-def/issues +%% +\ProvidesFile{xetex.def} + [2017/06/24 v5.0h Graphics/color driver for xetex] +\def\GPT@space{ } +\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@gray#1#2{% + \c@lor@arg{#2}% + \edef#1{gray #2}% + } +\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{cmyk #1 #2 #3 #4}% + } +\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{rgb #1 #2 #3}% + } +\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@hsb#1#2{\c@lor@@hsb#2\@@#1} +\def\c@lor@@hsb#1,#2,#3\@@#4{% + \c@lor@arg{#1}% + \c@lor@arg{#2}% + \c@lor@arg{#3}% + \edef#4{hsb #1 #2 #3}% + } +\def\color@named#1#2{\c@lor@@named#2,,\@@#1} +\def\c@lor@@named#1,#2,#3\@@#4{% + \@ifundefined{col@#1}% + {\PackageError{color}{Undefined color `#1'}\@ehd}% + {\edef#4{ #1}}% + } +\def\c@lor@to@ps#1 #2\@@{\csname c@lor@ps@#1\endcsname#2 \@@} +\def\c@lor@ps@#1 #2\@@{TeXDict begin #1 end} +\def\c@lor@ps@rgb#1\@@{#1 setrgbcolor} +\def\c@lor@ps@hsb#1\@@{#1 sethsbcolor} +\def\c@lor@ps@cmyk#1\@@{#1 setcmykcolor} +\def\c@lor@ps@gray#1\@@{#1 setgray} +\def\current@color{ Black} +\def\set@color{% + \special{color push \current@color + }\aftergroup\reset@color} +\def\reset@color{\special{% + color pop}} +\def\set@page@color{\special{% + background \current@color}} +\def\define@color@named#1#2{% + \expandafter\let\csname col@#1\endcsname\@nnil} + \def\no@page@color{\special{background \string"newpath clip}} +\@ifundefined{Gin@decode} + {\let\Gin@decode\@empty} + {} +\@ifundefined{Gin@page} + {\let\Gin@page\@empty} + {} +\@ifundefined{Gin@pagebox} + {\def\Gin@pagebox{cropbox}} + {} +\@ifundefined{Gin@interpolate} + {\csname newif\endcsname\ifGin@interpolate} + {} +\def\Gread@pdf#1{% + \let\Gin@decode\@empty + \Gin@interpolatefalse + \Gread@@xetex\XeTeXpdffile +} +\def\Gread@bmp#1{% + \let\Gin@page\@empty + \let\Gin@pagebox\@empty + \Gread@@xetex\XeTeXpicfile +} +\def\Gread@@xetex#1{% + \IfFileExists{\Gin@base.bb}% + {\Gread@eps{\Gin@base.bb}}% + {\Gread@@xetex@aux#1}% +} +\def\Gread@@xetex@aux#1{% + \edef\Gin@attr@hash{% + \ifx\Gin@pagebox\@empty + \else + :\Gin@pagebox + \fi + \ifx\Gin@page\@empty + \else + :P\Gin@page + \fi + }% + \edef\Gin@@name{\Gin@base\Gin@ext}% + \@ifundefined{\Gin@@name\GPT@space height\Gin@attr@hash}% + {% + \setbox\@tempboxa=\hbox{% + #1"\Gin@@name"\GPT@space + \ifx\Gin@page\@empty\else page \Gin@page\fi + \ifx\Gin@pagebox\@empty\else\expandafter\Gread@@xetex@box\Gin@pagebox\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 \Gin@@name\GPT@space height\Gin@attr@hash\endcsname + {\the\ht\@tempboxa}% + \expandafter\xdef\csname \Gin@@name\GPT@space width\Gin@attr@hash\endcsname + {\the\wd\@tempboxa}% + }{% + \def\Gin@llx{0}\let\Gin@lly\Gin@llx + \Gin@defaultbp\Gin@urx + {\csname \Gin@@name\GPT@space width\Gin@attr@hash\endcsname}% + \Gin@defaultbp\Gin@ury + {\csname \Gin@@name\GPT@space height\Gin@attr@hash\endcsname}% + }% +} +\def\Gread@@xetex@box#1box{#1} +\def\GPT@setup@scale{% + \def\@tempa{!}% + \ifx\Gin@scaley\@tempa + \let\Gin@scaley\Gin@scalex + \else + \ifx\Gin@scalex\@tempa\let\Gin@scalex\Gin@scaley\fi + \fi +} +\def\Ginclude@pdf#1{% + \GPT@setup@scale + \Gin@log{% + <use #1% + \ifx\Gin@page\@empty\else, page \Gin@page\fi + >% + }% + \hbox{% + \Gscale@box{\Gin@scalex}[\Gin@scaley]{% + \@ifundefined{Gin@vllx}{% + \GPT@viewportfalse + % without viewport/trim clipping does not make sense + % for pdfTeX + \Gin@clipfalse + }{}% + \ifGin@clip + \if!\Gin@vllx\Gin@vlly\Gin@vurx\Gin@vury!% + \else + \let\GPT@clipend\GPT@DoClipEnd + \setbox\@tempboxa\hbox\bgroup + \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 + \XeTeXpdffile"#1" % + \ifx\Gin@page\@empty\else page \Gin@page\fi + \ifx\Gin@pagebox\@empty\else\expandafter\Gread@@xetex@box\Gin@pagebox\fi + \ifGPT@viewport + \ifdim\Gin@vlly\p@=\z@ + \else + \egroup + \fi + \GPT@clipend + \fi + }% + }% +} +\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@ + \advance\dimen@ -\Gin@llx\p@ + \wd\@tempboxa\strip@pt\dimen@ bp\relax + \dimen@\Gin@ury\p@ + \advance\dimen@ -\Gin@lly\p@ + \ht\@tempboxa\strip@pt\dimen@ bp\relax + \GPT@clipbox\@tempboxa + \box\@tempboxa +} +\def\GPT@clipbox#1{% + \setbox#1=\hbox{% + \Gin@defaultbp\WIDTH{\wd#1}% + \Gin@defaultbp\DEPTH{\dp#1}% + \@tempdima\ht#1% + \advance\@tempdima\dp#1% + \Gin@defaultbp\TOTALHEIGHT{\@tempdima}% + \special{x:gsave}% + \special{% + pdf:literal + 0 -\DEPTH\GPT@space \WIDTH\GPT@space \TOTALHEIGHT\GPT@space re W n + }% + \rlap{\box#1}% + \special{x:grestore}% + \hskip\wd#1% + }% +} +\def\Ginclude@bmp#1{% + \Gin@log{<#1>}% + \bgroup + \def\@tempa{!}% + \special{pdf:image\GPT@space + bbox\GPT@space\Gin@llx\GPT@space\Gin@lly\GPT@space\Gin@urx\GPT@space\Gin@ury\GPT@space + clip\GPT@space\ifGin@clip 1\else 0\fi\GPT@space + \ifx\Gin@scalex\@tempa\else width\GPT@space\the\Gin@req@width\GPT@space\fi + \ifx\Gin@scaley\@tempa\else height\GPT@space\the\Gin@req@height\GPT@space\fi + (#1)\GPT@space + \ifnum0% + \ifx\Gin@decode\@empty\else 1\fi + \ifGin@interpolate 1\fi + >0 % + <<% + \ifx\Gin@decode\@empty\else /Decode[\Gin@decode]\fi + \ifGin@interpolate /Interpolate true\fi + >>% + \fi + }% + \egroup +} +\newif\if@trim@vport +\def\Ginclude@eps#1{% + \Gin@log{<#1>}% + \bgroup + \ifx\Undefined\Gin@vllx\else\@trim@vporttrue\fi + \def\@tempa{!}% + \dimen@\Gin@urx\p@ + \advance\dimen@ -\Gin@llx\p@ + \if@trim@vport + \advance\dimen@ \Gin@vllx\p@ + \fi + \edef\Gin@urx{\strip@pt\dimen@}% + \dimen@\Gin@ury\p@ + \advance\dimen@ -\Gin@lly\p@ + \if@trim@vport + \advance\dimen@ \Gin@vlly\p@ + \fi + \edef\Gin@ury{\strip@pt\dimen@}% + \dimen@\Gin@req@width + \dimen@ii.1bp% + \divide\dimen@\dimen@ii + \@tempdima\Gin@req@height + \divide\@tempdima\dimen@ii + \special{PSfile="#1"\GPT@space + \if@trim@vport + llx=\Gin@vllx\GPT@space + lly=\Gin@vlly\GPT@space + \fi + urx=\Gin@urx\GPT@space + ury=\Gin@ury\GPT@space + \ifx\Gin@scalex\@tempa\else rwi=\number\dimen@\GPT@space\fi + \ifx\Gin@scaley\@tempa\else rhi=\number\@tempdima\GPT@space\fi + \ifGin@clip clip\fi}% + \egroup} +% +% In the above \Ginclude@eps, llx, lly, urx, and ury are translated to match +% the -dEPSCrop option for Ghostscript to convert eps to pdf. +% In the case of eps files created by MetaPost, the files are included +% directly without the help of Ghostscript. That is, we have to translate +% the origin accordingly if we use \Ginclude@eps for eps files created by +% MetaPost. In TeX Live 2015, the translation of the origin was the default. +% After TeX Live 2016, however, the translation of the origin is enabled only +% if the --mvorigin option is given for xdvipdfmx +% This may be a bit inconvenient, especially as +% xdvipdfmx is usually called as a pipe. Therefore we introduce a new suffix +% .mps(or .MPS) to support inclusion of eps files created by MetaPost without +% the option --mvorigin. +% +\def\Ginclude@mps#1{% + \Gin@log{<#1>}% + \bgroup + \def\@tempa{!}% + \dimen@\Gin@req@width + \dimen@ii.1bp% + \divide\dimen@\dimen@ii + \@tempdima\Gin@req@height + \divide\@tempdima\dimen@ii + \special{PSfile="#1"\GPT@space + llx=\Gin@llx\GPT@space + lly=\Gin@lly\GPT@space + urx=\Gin@urx\GPT@space + ury=\Gin@ury\GPT@space + \ifx\Gin@scalex\@tempa\else rwi=\number\dimen@\GPT@space\fi + \ifx\Gin@scaley\@tempa\else rhi=\number\@tempdima\GPT@space\fi + \ifGin@clip clip\fi}% + \egroup} +% +\def\Grot@start{% +\special{pdf:btrans rotate \Grot@angle}} +\def\Grot@end{\special{pdf:etrans}} + +% 4.13 add support for ptex vertical writing mode +% inspired by pxtatescale package (Hironobu Yamashita) +\ifx\kanjiskip\@undefined +\def\Gscale@start{% + \special{pdf:btrans}% + \special{x:scale \Gscale@x\GPT@space\Gscale@y}% +} +\else +\edef\Gscale@start{% + \special{pdf:btrans}% + \special{x:scale + \expandafter\noexpand\csname iftdir\endcsname + \noexpand\Gscale@y\noexpand\GPT@space\noexpand\Gscale@x + \expandafter\noexpand\csname else\endcsname + \noexpand\Gscale@x\noexpand\GPT@space\noexpand\Gscale@y + \expandafter\noexpand\csname fi\endcsname}} +\fi +% +\def\Gscale@end{\special{pdf:etrans}} +\def\Gin@PS@raw#1{\special{ps: #1}} +\def\Gin@PS@restored#1{\special{" #1}} +\def\Gin@PS@literal@header#1{\AtBeginDvi{\special{! #1}}} +\def\Gin@PS@file@header#1{\AtBeginDvi{\special{header=#1}}} +\def\Gin@extensions{% order here is like pdftex.def, except for PS + .pdf,.PDF,.ai,.AI,% + .png,.PNG,.jpg,.JPG,.jpeg,.JPEG,.jp2,.JP2,.jpf,.JPF,.bmp,.BMP,% + .ps,.PS,.eps,.EPS,.mps,.MPS,% + .pz,.eps.Z,.ps.Z,.ps.gz,.eps.gz} +% +\@namedef{Gin@rule@.pdf}#1{{pdf}{.xbb}{#1}} +\@namedef{Gin@rule@.PDF}#1{{pdf}{.xbb}{#1}} +% +\@namedef{Gin@rule@.ai}#1{{pdf}{.xbb}{#1}} +\@namedef{Gin@rule@.AI}#1{{pdf}{.xbb}{#1}} +% +\@namedef{Gin@rule@.jp2}#1{{bmp}{.xbb}{#1}} +\@namedef{Gin@rule@.JP2}#1{{bmp}{.xbb}{#1}} +% +\@namedef{Gin@rule@.jpf}#1{{bmp}{.xbb}{#1}} +\@namedef{Gin@rule@.JPF}#1{{bmp}{.xbb}{#1}} +% +\@namedef{Gin@rule@.png}#1{{bmp}{.xbb}{#1}} +\@namedef{Gin@rule@.PNG}#1{{bmp}{.xbb}{#1}} +% +\@namedef{Gin@rule@.jpg}#1{{bmp}{.xbb}{#1}} +\@namedef{Gin@rule@.JPG}#1{{bmp}{.xbb}{#1}} +% +\@namedef{Gin@rule@.jpeg}#1{{bmp}{.xbb}{#1}} +\@namedef{Gin@rule@.JPEG}#1{{bmp}{.xbb}{#1}} +% +\@namedef{Gin@rule@.jp2}#1{{bmp}{.xbb}{#1}} +\@namedef{Gin@rule@.JP2}#1{{bmp}{.xbb}{#1}} +% +\@namedef{Gin@rule@.jpf}#1{{bmp}{.xbb}{#1}} +\@namedef{Gin@rule@.JPF}#1{{bmp}{.xbb}{#1}} +% +\@namedef{Gin@rule@.bmp}#1{{bmp}{.xbb}{#1}} +\@namedef{Gin@rule@.BMP}#1{{bmp}{.xbb}{#1}} +% +\@namedef{Gin@rule@.ps}#1{{eps}{.ps}{#1}} +\@namedef{Gin@rule@.PS}#1{{eps}{.ps}{#1}} +% +\@namedef{Gin@rule@.eps}#1{{eps}{.eps}{#1}} +\@namedef{Gin@rule@.EPS}#1{{eps}{.eps}{#1}} +% +\@namedef{Gin@rule@.mps}#1{{mps}{.mps}{#1}} +\@namedef{Gin@rule@.MPS}#1{{mps}{.mps}{#1}} +% (don't bother with uppercase versions for these Unixish extensions) +\@namedef{Gin@rule@.pz}#1{{eps}{.xbb}{`gunzip -c #1}} +\@namedef{Gin@rule@.eps.Z}#1{{eps}{.eps.xbb}{`gunzip -c #1}} +\@namedef{Gin@rule@.ps.Z}#1{{eps}{.ps.xbb}{`gunzip -c #1}} +\@namedef{Gin@rule@.ps.gz}#1{{eps}{.ps.xbb}{`gunzip -c #1}} +\@namedef{Gin@rule@.eps.gz}#1{{eps}{.eps.xbb}{`gunzip -c #1}} +% +\@namedef{Gin@rule@*}#1{{eps}{\Gin@ext}{#1}} +\@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 +\@ifundefined{stockwidth}{% +\@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 |