From 208543ff201eaa2c17be3467fa1031bd122f81a8 Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Thu, 12 Jan 2006 23:56:33 +0000
Subject: grfpaste

git-svn-id: svn://tug.org/texlive/trunk@962 c570f23f-e606-0410-a88d-b1316a301751
---
 Master/texmf-dist/tex/latex/grfpaste/grfpaste.sty | 238 ++++++++++++++++++++++
 1 file changed, 238 insertions(+)
 create mode 100644 Master/texmf-dist/tex/latex/grfpaste/grfpaste.sty

(limited to 'Master/texmf-dist/tex/latex/grfpaste/grfpaste.sty')

diff --git a/Master/texmf-dist/tex/latex/grfpaste/grfpaste.sty b/Master/texmf-dist/tex/latex/grfpaste/grfpaste.sty
new file mode 100644
index 00000000000..76a116b3e65
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/grfpaste/grfpaste.sty
@@ -0,0 +1,238 @@
+
+
+%%% LaTeX support for TeXplorators / M. Spivak dvipaste program
+%%% Copyright 1997 David Carlisle
+
+
+% This program can redistributed and/or modified under the terms
+% of the LaTeX Project Public License Distributed from CTAN
+% archives in directory macros/latex/base/lppl.txt; either
+% version 1 of the License, or (at your option) any later version.
+
+%%% Usage notes in the file dvipaste.txt
+
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{grfpaste}
+          [1997/07/18 v0.2 dvipaste LaTeX graphics style (DPC)]
+
+% 1997/07/17 v0.1
+% 1997/07/18 v0.2  add ref system.
+
+% To include previously prepared dvi fragments, use
+% \usepackage{grfpaste}
+% and include the graphics with \includegraphics{file.dvi}
+% or \includegraphics[num=5]{file.dvi}
+%
+% To make a file that produces suitable fragments, use
+% \usepackage[write]{grfpaste}
+% and mark each fragment with \sendout{....}
+% 
+\DeclareOption{write}{\let\sendout\relax}
+\DeclareOption{writepages}{\let\sendout\relax\let\GP@sendout\@empty}
+\DeclareOption{include}{%
+  \def\sendout#1{\PackageError{grfpaste}{Use write option}{}}}
+\DeclareOption{defpaste}{\def\paste#1#2{\includegraphics[num=#2]{#1}}}
+\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{graphicx}}
+\ExecuteOptions{include}
+\ProcessOptions
+\RequirePackage{graphicx}
+
+\ifx\sendout\relax
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Marking DVI Sections For Inclusion In Other Files
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Size information will be written in to a file filename.dat
+% which is opened now and closed at the end of the run.
+
+\newwrite\writedata@
+\immediate\openout\writedata@=\jobname.dat
+%\AtEndDocument{\immediate\closeout\writedata@}
+
+% The format of the .dat file is identical to that written by
+% dvipaste.tex, the format of the dvi file is compatible.
+% dvipaste uses a more complicated scheme that uses a custom output
+% routine and then \eject each section, however I can't see why
+% \sendout can not just \shipout the box directly, so that is what
+% this version does.
+
+\def\sendout{\@testopt\GP@sendout{}}
+
+\ifx\GP@sendout\@empty
+
+\def\GP@sendout[#1]#2{\PackageError{grfpaste}{write pages
+    only}{}}
+
+\let\GP@shipout\shipout
+\def\shipout{\global\setbox\xxx}
+\newbox\xxx
+\let\GP@outputpage\@outputpage
+\def\@outputpage{%
+  \GP@outputpage
+  \immediate\write\writedata@
+      {\the\ht\xxx\space\the\dp\xxx\space\the\wd\xxx}%
+  {\let\protect\noexpand
+  \advance\c@page\m@ne
+  \GP@shipout\hbox{%
+    \special{beginpaste:}%
+    \wd\xxx\z@
+    \box\xxx
+    \special{endpaste:}%
+    }%
+  }}
+
+\else
+
+\long\def\GP@sendout[#1]#2{%
+  \sbox\z@{#2}%
+  \immediate\write\writedata@
+      {\the\ht\z@\space\the\dp\z@\space\the\wd\z@
+        \ifx\box#1\box\else\space\@percentchar#1\fi}%
+  \shipout\vbox{%
+    \vskip\ht\z@
+    \special{beginpaste:}%
+    \ht\z@\z@\dp\z@\z@\wd\z@\z@
+    \noindent\box\z@
+    \special{endpaste:}%
+% the original had this rule, but seems not to be needed.
+%    \smash{\vrule \@height1sp\@width1sp\@depth\z@}%
+    \@@par
+    \vskip2pc%
+    \hbox{\normalfont File [\jobname], \#\number\c@page}}%
+  \stepcounter{page}}
+
+\fi
+
+\else
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Including DVI Sections Into The Current File
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Graphics will be able to include dvi file segments, reading size
+% info from .dat files (compatible with dvipast.tex for plain tex)
+
+\DeclareGraphicsRule{.dvi}{dvi}{.dat}{}
+
+% Add .dvi to the default list of extensions.
+
+\g@addto@macro\Gin@extensions{,.dvi}
+
+
+% dvipaste allows multiple dvi fragments to be included from the
+% same file. Add a new key num= (defaulting to 1) which says
+% which bit to include. Maintaining numbers if you have a lot of
+% fragments is inconvenient so may use symbolic references
+% instead of number.
+% ref=xxx refers to a fragment marked with the label xxx by use
+% of an optional argument \sendout[xxx]{......} to \sendout.
+% If \sendout is used with such an optional argument
+% the fragment may be included either by number or by label.
+% (The numeric form must be used if the fragment is included using
+% dvipaste.tex's \paste command.)
+
+
+\define@key{Gin}{num}{\def\Gin@num{#1}}
+\define@key{Gin}{ref}{\def\Gin@ref{#1 }}
+\setkeys{Gin}{num=1,ref=}
+
+% Unlike other graphics formats, which only have natural height and
+% width, dvipaste fragments are TeX boxes, with depth as well.
+% add a new key to set the depth (for cases where you don't want to
+% use a .dat file).
+
+\define@key{Gin}{natdepth}{%
+  \Gin@defaultbp\@tempaa{#1}%
+  \Gin@nat@depth\@tempaa bp\relax}
+
+% Ah. Don't look too carefully. The internal command \Gin@setfile
+% in the kernel of the graphics package was not expecting this, and
+% explicitly sets the depth of the graphic box to zero, so patch that
+% to make it set it to the new \Gin@req@depth macro.
+%
+% pulls apart the macro at \dp\z@\z@ and then puts it all back together
+% again.
+
+\def\@tempa#1\dp\z@\z@#2!{%
+  \def\Gin@setfile##1##2##3{%
+    #1%
+    \dp\z@\Gin@req@depth
+    #2}}
+\expandafter\@tempa\Gin@setfile{#1}{#2}{#3}!
+
+% Scaling is not currently supported, so natural depth and
+% required depth are the same.
+
+\def\Gin@req@depth{\Gin@nat@depth}
+
+\newdimen\Gin@nat@depth
+
+
+% For each new file type the graphics package needs two functions.
+% \Gread@<type> defines how to read the size information.
+% \Ginclude@type defines how to set the actual box and specials.
+% These functions are pretty similar to the code in dvipaste.tex
+
+% as in the dvipaste.tex version, the size information for
+% all the fragments in a single dvi file is saved in a macro
+% so the file only needs to be read once.
+
+\def\Gread@dvi#1{%
+  \expandafter\let\expandafter\@tempb\csname Gread@#1\endcsname
+  \ifx\@tempb\relax
+  \let\@tempb\@empty
+  \let\do\relax
+  \immediate\openin\@inputcheck#1 %
+  \catcode`\%9\relax
+  \ifeof\@inputcheck
+    \@latex@error{File `#1' not found}\@ehc
+  \else
+     \Gread@true
+     \loop
+       \read\@inputcheck to\@tempa
+       \ifeof\@inputcheck
+         \Gread@false
+       \else
+         \xdef\@tempb{\@tempb\do\@tempa\relax}%
+       \fi
+     \ifGread@
+     \repeat
+    \immediate\closein\@inputcheck
+  \fi
+  \global\expandafter\let\csname Gread@#1\endcsname\@tempb
+  \fi
+%
+% Temporarily set \do to count up to the required fragment number
+% and then grab the size info. Then execute the list (in \@tempb).
+  \count@\z@
+  \Gread@false
+  \def\do##1 ##2 ##3 ##4\relax{%
+    \advance\count@\@ne
+    \def\@tempa{##4}%
+    \ifx\@tempa\Gin@ref
+      \edef\Gin@num{\the\count@}%
+    \fi
+    \ifnum\Gin@num=\count@
+      \Gread@true
+  \def\Gin@llx{0}%
+  \let\Gin@lly\Gin@llx
+  \Gin@defaultbp\Gin@urx{##3}%
+  \Gin@defaultbp\Gin@ury{##1}%
+       \Gin@nat@depth##2\relax
+    \fi}%
+  \@tempb
+  \let\do\noexpand}
+
+\def\Ginclude@dvi#1{%
+  \ifGread@
+    \dimen@\Gin@nat@height
+    \advance\dimen@\Gin@nat@depth
+    \hbox{\special{dvipaste: \Gin@base\space\Gin@num}% 
+    \lower\Gin@nat@depth\vbox to\dimen@{\hbox to\Gin@nat@width{}\vfil}}%
+  \else
+    \Gin@nosize{\Gin@base[\Gin@num]}%
+  \fi}
+
+
+\fi
+
-- 
cgit v1.2.3

