Grfpaste PDF
Grfpaste PDF
Grfpaste PDF
David Carlisle
1997/07/18
Contents
1 Producing DVI Fragments 2
1 a Writing out boxes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1 b Writing out whole pages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
5 Compiling dvipaste.c 5
This package 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.
Dvipaste comes with a plain TEX based set of macros in a file dvipaste.tex that provide
an interface to the dvipaste program. That file works perfectly well in LATEX with only
minor modifications (specifically using \@@line instead of \line, and \c@page instead
of \pageno). A dvipaste.sty constructed by just such modifications may be found
distributed with Jean-Pierre Drucbert’s ‘export’ package on ctan. However I thought
that it would be more in the ‘LATEX spirit’ to provide an interface via the existing LATEX
graphics package.
The files produced by this grfpaste package should be fully compatible with dvi-
paste.tex or dvipaste.sty. That is, if dvi fragments are created using the plain TEX
interface they may be included using \includegraphics via this package, and conversely
if this package is used with the [write] or [writepages] options to produce a file of
dvi fragments for including in another file, then the dvi file (and it’s accompanying ‘.dat’
∗
This manual corresponds to grfpaste v0.2, dated 1997/07/18.
1
file of size information) may be included either with this package, or via the original
dvipaste.tex interface.
Currently the LATEX interface uses the graphicx package, it would be possible to also
provide an interface to the more basic graphics package, but that is not done here.
The package is used in one of two forms.
1 \documentclass{article}
2
3 \usepackage[write]{grfpaste}
4
5 \begin{document}
6
7 \sendout{\parbox[b]{2cm}{one \sf two three \tt four \it five}}
8
9 \sendout[abc]{hello}
10
11 \sendout{\parbox[t]{2cm}{one \sf two three \tt four \it five}}
12
13 \end{document}
If the package is used with the [write] option then the document should just consist of
\sendout commands, the argument of each will be marked as a ‘fragment’ that may be
pasted into another DVI file by the dvipaste program. An auxiliary file with extension
.dat will be created which contains the size of each of these fragments. Normally the
fragments will be accessed by their number, starting from 1, but you may optionally
supply a label, as in ‘abc’ above which allows fragments to be referenced more easily.
The above example forms the example document grfp1.tex in this distribution.
1 \documentclass{article}
2
3 \usepackage[writepages]{grfpaste}
4
5 \begin{document}
6 ...
7 \end{document}
If the package is used with the [writepages] option then each indivdual page will be
marked as a ‘fragment’ for later processing by dvipaste. The fragments will be numbered
consecutively, starting from 1, whatever the value of the page counter. See the example
document grfp2.tex.
2
2 Using DVI Fragments
1 \documentclass{article}
2
3 \usepackage{grfpaste}
4
5 \begin{document}
6
7 aaa\fbox{\includegraphics
8 [num=1,natheight=19,natdepth=2pt,natwidth=57]{grfp1.dvi}}bbb
9
10 xxx\fbox{\includegraphics[num=2]{grfp1.dvi}}yyy
11
12 xxx\fbox{\includegraphics[ref=abc]{grfp1.dvi}}yyy
13
14 Page 3 of grfp2.dvi:
15 aaa\fbox{\includegraphics[num=3]{grfp2}}bbb
16
17 \end{document}
To use the fragments then load the package with no option (or equivalently with the
[include] option). You may also use any options understood by the graphicx package,
these will be passed on to graphicx which is loaded by this package.
To load the first fragment of a given dvi file you just need \includegraphics{〈file-
name〉} or \includegraphics{〈filename〉.dvi} (.dvi is added as one of the default
extensions by this package)
To access later fragments then you use the new num=〈??〉 key to specify the fragment
number, as demonstrated above. If there are a lot of fragments maintaining the correct
number may be inconvenient so you may instead use the ref= key to refer to a label
previously supplied by the \sendout command. Note this label information is added to
the .dat file in the form of a comment (after %) and so the .dat file is still compatible
with dvipaste.tex, but if that is used, then the numeric form must be used. Thus the
two examples above with num=2 and ref=abc include the same fragment from the file
grfp1.dvi.
Normally the size of the graphic is read from the ‘.dat’ file which is the ‘read file’ for
the dvi graphic type, in the terminoligy of the graphics package documentation. If you
have lost the .dat file, or wish to override it with altered sizes, you may specify the
natural size using the natheight, natwidth and natdepth keys. As usual these take
a dimension but the units may be omitted in which case bp are assumed. natheight
and natwidth are standard graphicx keys, but natdepth is new, as these fragments are
TEX boxes, so have height and depth, unlike most other graphic formats that may be
included, which always have zero depth.
The \sendout command defined by the [write] option matches that used in the
plain TEX support, but the plain TEX version does not use \includegraphics to include
the fragment. It defines a command \paste to achieve this. In order to help move
3
documents between the two versions, a [defpaste] option is provided for this package
which specifies that a compatible \paste command should be defined. It is defined to be
the equivalent call to \includegraphics, \includegraphics[num=#2]{#1}.
See the example file grfp3.tex to see examples of including dvi fragments.
a) Produce one or more files of fragments using LATEX and this package with the
[write] or [writepages] options. (or plain TEX using dvipaste.tex).
b) LATEX your master document, including this package and using \includegraphics
to include the fragments at the appropriate points.
At this stage the file will have blank spaces (but if the correct size) at the points
where the dvi fragments should appear
c) Run dvipaste on the master dvi file. It will incorporate the fragments and re-write
the file.
To process the final document (grfp3.dvi) the following steps need be taken.
1 latex grfp1
2 latex grfp2
3 latex grfp2
4 latex grfp3
5 dvipaste grfp3
Note that grfp2 needs to be processed twice to generate a full table of contents. After
grfp3.tex is processed by LATEX the dvi file will show blank spaces at the points that
the fragments are to be included. These will be filled in by running dvipaste, after
which the grfp3.dvi may be processed by your driver in the normal way.
4
5 Compiling dvipaste.c
5
12 #endif
13 {
14 register char c1, c2;
15
16 for ( ; (c1 = TOLOWER(*s1)) == (c2 = TOLOWER(*s2)); s1++, s2++)
17 if (c1 == '\0')
18 return 0;
19
20 return c1 - c2;
21 }
22
23
24 #ifdef PROTOS
25 int strnicmp(register char *s1,
26 register char *s2,
27 int n)
28 #else
29 int strnicmp(s1, s2, n)
30 register char *s1, *s2;
31 int n;
32 #endif
33 {
34 register char c1, c2;
35
36 for ( ; --n >= 0 &&
37 (c1 = TOLOWER(*s1)) == (c2 = TOLOWER(*s2)); s1++, s2++)
38 if (c1 == '\0')
39 return 0;
40
41 return n < 0 ? 0 : c1 - c2;
42 }