Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Grfpaste PDF

Download as pdf or txt
Download as pdf or txt
You are on page 1of 6

The grfpaste package∗

LATEX support for TEXplorators / M. Spivak dvipaste program

David Carlisle

1997/07/18

Contents
1 Producing DVI Fragments 2
1 a Writing out boxes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1 b Writing out whole pages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2 Using DVI Fragments 3

3 Putting it all together 4

4 Running the examples 4

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 Producing DVI Fragments


1 a Writing out boxes.

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 b Writing out whole pages.

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.

3 Putting it all together

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.

d) Preview or print the modified dvi file in your usual manner.

4 Running the examples

• grfp1.tex is an example of using the [write] option

• grfp2.tex is an example of using the [writepages] option

• grfp3.tex is an example of using the [include] option

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

1 /* config.h for LINUX machines for dvipaste.c (DPC) */


2
3
4 #define ANSI
5 #undef MICROSOFTC
6 #define LITTLENDIAN
7
8 /* I guess this is what was meant. */
9 /* (dvipaste.c defines strcmp to itself */
10 /* leaving stricmp undefined) .*/
11 #ifndef MICROSOFTC
12 #define strnicmp strncmp
13 #define stricmp strcmp
14 #endif
15
16 #ifdef ANSI
17 /* Other things in ANSI C are good, but this is a crock */
18 #define READ_BINARY "rb"
19 #define WRITE_BINARY "wb"
20 #else
21 /* The good old simple and logical K&R I/O */
22 #define READ_BINARY "r"
23 #define WRITE_BINARY "w"
24 #endif
When I tried compiling dvipaste.c I got error due to the function stricmp being
undefined. The file has a circular definition of strcmp to itself which looks like a typo, so
I corrected that by making stricmp an alias for strcmp by altering config.h as above
(which also sets LITTLENDIAN for Linux. It seems to work for me, but no promises.
The above suggested config.h leaves stricmp meaning the same thing as strcmp
(string comparison). Jean-Pierre Drucbert points out that stricmp is (on systems that
it is defined) a case-insensitive comparison function, and that rather than the crude
substitution above one may define it as follows.
str{n}icmp is not available on all systems. So I got the following code in
ci.c :
1 #include <ctype.h>
2 #include "config.h"
3 /*
4 * str{n}icmp - case-insensitive flavors of strcmp(), strncmp()
5 */
6 #ifdef PROTOS
7 int stricmp(register char *s1,
8 register char *s2)
9 #else
10 int stricmp(s1, s2)
11 register char *s1, *s2;

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 }

By default dvipaste.c has


1 #define STRINGSIZE (5124) /* maximum string size */
Jean-Pierre Drucbert commented:

it is necessary to increase STRINGSIZE if you paste a lot of dvi pieces (I in-


creased it from 40592 to 2597888). In practice, do not export more than ~100
pieces from one file. You can import a lot more into one file. So it is preferable
to import from several files if you have more than 100 pieces to import.

You might also like