diff options
Diffstat (limited to 'info/digests/texhax/txh/wolczko.txh')
-rw-r--r-- | info/digests/texhax/txh/wolczko.txh | 261 |
1 files changed, 261 insertions, 0 deletions
diff --git a/info/digests/texhax/txh/wolczko.txh b/info/digests/texhax/txh/wolczko.txh new file mode 100644 index 0000000000..8a0ee65c0d --- /dev/null +++ b/info/digests/texhax/txh/wolczko.txh @@ -0,0 +1,261 @@ +% WOLCZKO.TXH; reference in TeXhax.8728 + +Date: Wed, 15 Apr 87 13:00:36 BST +From: Mario Wolczko <miw%unix.computer-science.manchester.ac.uk@Cs.Ucl.AC.UK> +Subject: Another feature for dvi2ps + +Following Jean-Francois Lamy's message clarifying which versions of dvi2ps +can do what, here is yet another feature. Strictly speaking, I suppose it +should be posted to the Unix-TeX mailing list, but that seems to have died +a sudden death. It was written by Ifor Williams, a PhD student here. The +differences listed below can be applied directly to the "2.10gf" version of +dvi2ps (last modified by Rick Furuta, 8th Aug 1986). + +The modifications add a "-x n" option to dvi2ps, enabling the printing of +n TeX pages on a PostScript page. This is great at saving paper; the use +of -x 2 is recommended for all drafts, and even -x 4 works fine with 12pt +text. Obviously, only powers of 2 are sensible values for n. + +Other things to note: +1. The sense of the -r switch is reversed in the presence of -x; pages now + come out with pages 1..n at the bottom of the paper tray. +2. Specials don't seem to scale along with the rest of the text (this is a + bug). +3. All dimensions relate to the A4 page size. This has the nice property + that the length of the long edge is sqrt(2) times the length of the + short edge. +4. Certain magic numbers appear within the PostScript prolog; these may + have to be tweaked at your installation. Comments indicate where this + should take place. + +Incidentally, does anyone know if it's possible to set a LaserWriter up to +print on a full A4 page (including the bottom 1/2 inch)? I tried messing +about with the definition of PostScript "letter" but got nowhere. + +Mario Wolczko +------------------------------------------------------------------------ +Dept. of Computer Science ARPA: miw%uk.ac.man.cs.ux@cs.ucl.ac.uk +The University USENET: mcvax!ukc!man.cs.ux!miw +Manchester M13 9PL JANET: miw@uk.ac.man.cs.ux +U.K. 061-273 7121 x 5699 +------------------------------------------------------------------------ + + +*** dvi2ps-gf/dvi2ps.c Wed Oct 15 16:20:18 1986 +--- dvi2ps-gf-n/dvi2ps.c Thu Feb 5 09:37:53 1987 +*************** +*** 350,355 **** +--- 350,356 ---- + int vv = 0; /* current v on device */ + int mag; /* magnification specified in preamble */ + int ncopies = 1; /* number of copies to print */ ++ int pages_per_page = 1; /* number of TeX pages per LaserWriter page*/ + int ndone = 0; /* number of pages converted */ + int nif = 0; /* number of files to include */ + int nopen; /* number of open PXL files */ +*************** +*** 453,459 **** + for( i=0; i<nif; i++ ) /* copy all included files */ + CopyFile( Ifile[i] ); + +! EMIT(outfp, "TeXDict begin @start\n"); + EMIT(outfp, "%%%%Title: %s\n", filename); + EMIT(outfp, "%%%%Creator: %s\n", G_progname); + EMIT(outfp, "%%%%EndProlog\n"); +--- 454,462 ---- + for( i=0; i<nif; i++ ) /* copy all included files */ + CopyFile( Ifile[i] ); + +! EMIT(outfp, "TeXDict begin \n"); +! EMIT(outfp, "%d @TexPagesPerPage\n", pages_per_page); +! EMIT(outfp, "@start\n"); + EMIT(outfp, "%%%%Title: %s\n", filename); + EMIT(outfp, "%%%%Creator: %s\n", G_progname); + EMIT(outfp, "%%%%EndProlog\n"); +*************** +*** 927,932 **** +--- 930,942 ---- + Fatal("Argument is not a valid integer\n", 0); + break; + ++ case 'x': /* next arg is number of TeX pages per LaserWriter page */ ++ if( ++argind >= argc || sscanf(argv[argind], "%d", &pages_per_page) != 1 ) ++ Fatal("Argument is not a valid integer\n", 0); ++ if (pages_per_page != 1) ++ Reverse = !Reverse; /* forward makes more sense here */ ++ break; ++ + case 'o': /* next arg is a PostScript command to send */ + if( ++argind >= argc ) + Fatal("No argument following -o\n", 0); +*************** +*** 943,949 **** + break; + + case 'r': /* don't process pages in reverse order */ +! Reverse = FALSE; + break; + #ifdef STATS + case 's': /* print some statistics */ +--- 953,959 ---- + break; + + case 'r': /* don't process pages in reverse order */ +! Reverse = !Reverse; + break; + #ifdef STATS + case 's': /* print some statistics */ +*** tex-gf.ps Mon Jan 19 18:09:04 1987 +--- tex-gf-n.ps Sat Mar 14 14:50:25 1987 +*************** +*** 47,58 **** + % [ 1 e ] + % where the "e"s were almost exactly but not quite unlike zeros. + + /@letter +! { letter initmatrix +! 72 Resolution div dup neg scale % set scaling to 1. +! 310 -3005 translate % move origin to top (these are not exactly 1" +! Mtrx currentmatrix pop % and -10" because margins aren't set exactly right) + } def + % note mode is like letter, except it uses less VM + /@note + { note initmatrix +--- 47,104 ---- + % [ 1 e ] + % where the "e"s were almost exactly but not quite unlike zeros. + ++ ++ %%%%%%%%%#### Additional Procedure Definitions ####%%%%%%%%%%%%%%%%%%%%%%%%%% ++ ++ /numberOfRows % the number of page rows on LaserWriter page ++ {2 power 2 div truncate exp} def ++ ++ /numberOfColumns % the number of page columns on LaserWriter page ++ {2 power 2 div ceiling exp} def ++ ++ /setscale ++ {72 Resolution div dup xscale mul exch yscale mul neg scale} def ++ % Sets the scaling to the appropriate ammount. Note ++ % the negative y direction scaling factor to account for the ++ % discrepancy between TeX and PostScript co-ordinates ++ ++ /@TexPagesPerPage ++ { ++ /power exch log 2 log div ceiling def % numberofpages <= 2^power. ++ /odd power cvi 2 mod 1 eq def % boolean, "power is odd". ++ /rowCount numberOfRows def % initialise loop count variables. ++ /columnCount numberOfColumns def ++ /xscale 1 rowCount div def % 1/No. rows for x scaling ++ /yscale 1 columnCount div def % 1/No. columns for y scaling ++ } def ++ ++ ++ %%%%%%%%%%%####---------------------------------####%%%%%%%%%%%%%%%%%%%%%% ++ + /@letter +! { +! odd +! { +! Mtrx currentmatrix 0 0.0 put +! Mtrx 1 -1.0 put +! Mtrx 2 1.0 put +! Mtrx 3 0.0 put +! Mtrx setmatrix +! 0.707101 1.41421 yscale mul exch xscale mul scale +! % dont ask!....It works. +! 300 390 translate % move origin to top +! Mtrx currentmatrix pop +! } +! { +! letter initmatrix +! setscale +! 390 -3000 numberOfRows mul translate +! % move origin to top (these are not exactly 1" +! % and -10" because margins aren't set exactly right) +! Mtrx currentmatrix pop +! } ifelse + } def ++ + % note mode is like letter, except it uses less VM + /@note + { note initmatrix +*************** +*** 162,176 **** + + /@bop1 % n @bop1 - -- begin a brand new page + { pop +! erasepage initgraphics +! Mtrx setmatrix +! /SaveImage save def() pop + } def + + /@eop % - @eop - -- end a page +! { showpage +! SaveImage restore() pop +! } def + + /@start % - @start - -- start everything + { @letter % (there is not much to do) +--- 208,242 ---- + + /@bop1 % n @bop1 - -- begin a brand new page + { pop +! % erasepage initgraphics +! % Mtrx setmatrix +! % /SaveImage save def() pop + } def + + /@eop % - @eop - -- end a page +! { +! columnCount 1 ne +! { +! 2250 0 translate % move right one TeX page +! /columnCount columnCount 1 sub def % and note new column +! } +! { +! rowCount 1 ne +! { +! /columnCount numberOfColumns def % reset the column count +! /rowCount rowCount 1 sub def % note entry into a new row +! -2250 columnCount 1 sub mul 3005 translate +! % move far left and down one TeX page +! } +! { +! showpage +! /columnCount numberOfColumns def % reset the column count +! /rowCount numberOfRows def % reset the row count +! erasepage initgraphics +! Mtrx setmatrix +! } ifelse +! } ifelse +! } def + + /@start % - @start - -- start everything + { @letter % (there is not much to do) +*************** +*** 177,183 **** + } def + + /@end % - @end - -- done the whole shebang +! { end + } def + + /p % x y p - -- move to position +--- 243,255 ---- + } def + + /@end % - @end - -- done the whole shebang +! { +! columnCount numberOfColumns eq +! rowCount numberOfRows eq +! and not +! {showpage} +! if +! end + } def + + /p % x y p - -- move to position + +---------------------------------------------------------------- +------- |