Initial commit.

master
Karchnu 2022-05-05 23:46:42 +02:00
commit 1f9fa00edf
31 changed files with 27901 additions and 0 deletions

BIN
54.pdf Normal file

Binary file not shown.

View File

@ -0,0 +1,316 @@
<html><head>
<meta http-equiv="content-type" content="text/html; charset=windows-1252">
<title>Drawing Graphs with gpic - Douglas B. West</title>
</head>
<body><h1>Drawing Graphs with gpic - Douglas B. West</h1>
Various people over the years have asked me how I draw the figures
for my books, such as
<a href="https://faculty.math.illinois.edu/~west/igt"><i>Introduction to Graph Theory</i></a>,
<a href="https://faculty.math.illinois.edu/~west/mt"><i>Mathematical Thinking: Problem-Solving and
Proofs</i></a> (with John D'Angelo),
and the forthcoming
<a href="https://faculty.math.illinois.edu/~west/0cont.ps"><i>Combinatorial Mathematics</i></a>.
All these figures are drawn using gpic, the GNU (Free Software Foundation)
version of the program pic developed originally by AT&amp;T. gpic is part of
the freely available groff document formatting system.
<p>
The program pic was developed for drawing pictures in troff documents,
I believe in 1984. The original version of gpic was intended as a
preprocessor for groff. Sometime in the late 1990s, a command-line option
was added to gpic to allow it to serve as a preprocessor for TeX.
This allowed me to migrate my books from troff to TeX.
</p><p>
Since mostly I want to draw graphs, I wrote macros that facilitate drawing and
labeling graphs of various sorts in a few lines of gpic input.
I provide the <a href="https://faculty.math.illinois.edu/~west/tpics.txt">macro package</a> as a text file with
essentially no documentation. On this page I give a brief summary of how to
use it, plus a few examples at the end.
More extensive <a href="http://www.kohala.com/start/troff/troff.html">reference
materials</a> on pic and gpic themselves, including old user manuals, have been
gathered by Richard Stevens.
</p><p>
My macro package is inelegant and could be made cleaner and more sophisticated.
However, it does enable me to draw the pictures I want to draw rather quickly
and with very little code.
</p><p>
Please send feedback on how this page can be improved to
west @ math . uiuc . edu.
Also, please let me know if you use these macros.
</p><h2>Basics</h2>
<b>Locations and arguments</b><br>
gpic is coordinate-based. Locations are described as ordered pairs "(a,b)"
in the coordinate plane. Locations (or objects) can be named using colons, as
in "A:(a,b)". Names remain in effect until reassigned; in particular, they
persist into later pictures. To put multiple commands on a single line, end
each with a semicolon.
<p>
In order to facilitate placing vertices at grid points, I have defined
names for these locations. Available are "<b>p00</b>" through "<b>p99</b>"
and "<b>p100</b>" through "<b>p155</b>", where "<b>p</b>ij" denotes "(i,j)",
and the other locations are from (10,0) through (15,5). Offset locations
are also available, using "<b>op00</b>" through "<b>op99</b>"
and "<b>op100</b>" through "<b>op155</b>". Here "<b>op</b>ij" is defined
as "O+(i,j)" for the particular location named as "O", which can be viewed
as an "origin". A picture with several copies of the same structure can
be produced by using the same commands with a change in the specification of
"O".
</p><p>
Lines and arrows are drawn from location to location. gpic macros have a fixed
list of up to nine arguments, invoked as <b>macro</b>(arg1,arg2,...,argN).
Therefore, many of my macros come in sets indexed up to 9, depending
on how many points are being placed or connected by lines.
The syntax for macro definitions is
<br>
"define macroname #command1; command2; etc#"
</p><p>
<b> "spot", "spot2", . . ., "spot9"</b><br>
The arguments for these macros are locations in the plane. "<b>spotN</b>"
takes N such locations and puts bullets there as vertices. It also names those
locations in order, A, B, C, . . . Those names can be used as arguments
in later macros. This enables editing of pictures by moving vertices
around without retyping lots of locations. If more than nine vertices are
needed, than one can save the locations with other names, as in "A1:A;";
each use of a "<b>spotN</b>" macro assigns names starting from "A".
</p><p>
<b> "poly2", . . ., "poly20" </b><br>
"<b>polyN</b>(loc,rad)" places N equally spaced vertices around an invisible
circle with center "loc" and radius "rad", naming the locations beginning with
A at the top (as in <b>spotN</b>) and moving clockwise. This is done via a
small table of sines and cosines present in the macro package.
For odd N, only up to N=13 is provided.
When N is even, the (invisible) polygon sits on a horizontal base;
the version "<b>polyNv</b>" (and maybe also "<b>polyNh</b>" for N=12
and N=16") puts a point at the top and bottom.
</p><p>
<b> "edge", "degr", "matc", "path", "cycl"</b><br>
"<b>edge</b>(A,B)" draws a line segment connecting two locations A and B.
<br>
"<b>degrN</b>" draws edges from its first argument to the other N arguments,
up to N=8.
<br>
"<b>matcN</b>" draws a matching of size N on its 2N arguments, for N\in{2,3,4}.
For example, "<b>matc4</b>(A,B,C,D,E,F,G,H)" draws the edges AB, CD, EF, and GH.
<br>
"<b>pathN</b>" draws a path through the locations of its N arguments in order.
<br>
"<b>cyclN</b>" draws a cycle through the locations of its N arguments in order.
<br>
The gpic primitive for these macros is "line", as in "line from A to B to C
to D to E".
</p><p>
<b> "call", "call2", "call3"</b><br>
These place text at a specified location.
In "<b>call</b>(A,"text $v_1$",ne);" the text inside quotation marks is
placed near location A, in the northeast direction away from A.
There are eight compass directions plus "c" for center.
Note that text is passed through unchanged, to be processed by TeX (or troff),
and it will be produced in the fonts used by the subsequent program. Thus
notation is placed within dollar signs.
To place text at locations A,B or A,B,C, use
"<b>call2</b>(A,B,"text1","text2",direc1,direc2);" or
"<b>call3</b>(A,B,C,"text1","text2","text3",direc1,direc2,direc3);".
</p><p>
<b> "circ", "arch", "elli"</b><br>
"<b>circ</b>(A,rad)" draws a circle of radius "rad" centered at location A.
<br>
"<b>arch</b>(A,B,rad)" draws a circular arc of radius "rad" counterclockwise
from location A to location B.
<br>
"<b>elli</b>(A,ht,wid)" draws an ellips of height "ht" and width "wid"
centered at location A.
<br>
Circless and ellipse are objects with centers and directional corners.
The objects can be named, as in "C:circ(p00,2);" and then "C.ne" subsequently
refers to the northeast point on C.
</p><p>
<b>"spli3", . . ., "spli9"</b><br>
"<b>spliN</b>" draws a curved line (via splines) from
A to B to C, etc., those being its N arguments in order.
Only the first and last locations are actually touched by the curve.
Try it.
</p><p>
<b> Arrow, Bold, Dashed, Dotted</b><br>
Generally speaking, many of the macros for edge, path, cycl, degr, matc, spli,
can be modified by prepending "a", "b", "f", "d", "t" to obtain lines that
are arrows (directed edges), bold (thicker), fat (much thicker), dashed, or
dotted, respectively. In combination, <b>daedge</b>, <b>baedge</b>, and
<b>dapath</b> are also available.
<br>
The size of arrowheads is constant, but the extent of coordinates in pictures
is not. As a result, arrowheads may appear too large or too small. To fix
this, use "<b>sethead</b>(param)" to multiply the scale of arrowheads by
"param". At the end of the picture, use "<b>resethead</b>" to restore the
original scale; otherwise the new size arrowheads will be used in succeeding
pictures.
</p><h2>Invocation in TeX Documents</h2>
Within a TeX document, the source for a gpic picture appears as follows:
<br>\gpic{
<br>.PS x
<br>gpic commands
<br>.PE
<br>}
<p>
The "\gpic" macro is defined within the macro package. The "x" is the
desired width of the picture in inches. When the file is run through the
gpic program before sending it to tex or latex, the portion from
.PS to .PE will be replaced with the "specials" that direct tex to draw the
lines and other elements of the picture. Under tex, the macro "\gpic" then
creates a centered box with the picture inside it.
</p><p>
The command-line option "-t" instructs gpic to prepare its output for
TeX rather than for troff. To run the preprocessor and then tex, one therefore
uses something like the following script:
<br>gpic -t gpicmacros texsource &gt; temp.tex
<br>tex temp
</p><p>
To get pdf output, the resulting dvi file should be hit with
<br>
dvips -Ppdf | ps2pdf
</p><h2>Further Macros and Comments</h2>
<b>Filled and Invisible</b><br>
"<b>icirc</b>(A,rad)" draws an invisible circle, which may be useful when
named in order to refer to directional locations.
<br>
"<b>fcirc</b>(A,rad,fill)" draws a circle of radius "rad" centered at location
A with the interior filled to density "fill", between 0 and 1. The use of
"fcirc" will overwrite anything that was previous put in the interior of the
circle.
<br>
"<b>ficirc</b>(A,rad,fill)" draw a filled interior without the boundary.
<br>
"<b>felli, fielli</b>" are the analogues for ellipses.
<p>
<b>"h1,...,h9", "v1,...,v9"</b><br>
Like "<b>p</b>ij", these are shorthand for coordinate pairs, with
"<b>h</b>j" being (.j,0) and "<b>v</b>j" being (0,.j).
They can be used for making slight adjustments to locations for placing
text labels.
</p><p>
"<b>spoto</b>(A)" puts an open circle (instead of a bullet) at location A.
<br>
"<b>mark</b>(A)" puts a square at location A (to distinguish a vertex).
<br>
"<b>cliqN</b>" draws a complete graph with vertices at its N arguments,
for N\in{4,5,6}.
<br>
<b>"k23", "k33", "k34", "k44"</b> draw complete bipartite graphs.
</p><h2>Examples</h2>
Below is the gpic code using these macros to produce several of the
figures in Section 1.1 of <i>Introduction to Graph Theory</i>,
second edition.
<p>
Petersen graph, page 13:
<br>
\gpic{
<br>
.PS 3.8
<br>
O:p00; poly5(O,2); cycl5(A,B,C,D,E); A1:A; B1:B; C1:C; D1:D; E1:E;
<br>
poly5(O,1); cycl5(A,C,E,B,D); matc3(A,A1,B,B1,C,C1); matc2(D,D1,E,E1);
<br>
call3(A1,B1+h1,C1+h1,"12","34","51",n,ne,se); call2(D1-h1,E1-h1,"23","45",sw,nw)
<br>
call3(A+h1,B-v1,C-h1,"35","52","24",e,s,sw); call2(D,E,"41","13",nw,n);
<br>
O:(5.5,0)+v1; poly3(op00,-.8); degr3(O,A,B,C); A1:A; B1:B; C1:C; spot(O);
<br>
poly6(op00,2); cycl6(A,B,C,D,E,F); path3(A,B1,D); path3(B,A1,E); path3(C,C1,F);
<br>
O:p110+v1; poly9(O,2); cycl9(A,B,C,D,E,F,G,H,I); spot(O); degr3(O,A,D,G);
<br>
matc3(B,F,E,I,H,C);
<br>
.PE
<br>
}
</p><p>
Decomposition of <i>K<sub>5</sub></i> and <i>K<sub>4</sub></i>, page 11:
<br>
\gpic{
<br>
.PS 2.6
<br>
poly5((0,.85),1.15); bcycl5(A,B,C,D,E); cycl5(A,C,E,B,D);
<br>
spot4(p30,p50,p52,p32); path3(A,B,D); dpath3(B,C,A); bpath3(C,D,A);
<br>
.PE
<br>
}
</p><p>K\"onigsberg Bridge Problem, page 2:
<br>
\gpic{
<br>
.PS 4.0
<br>
elli(p64,4,6); call3(p64,p96+h2,p92+h2,"$W$","$X$","$Z$",c,ne,se);
<br>
call3(p124+h2,p55-v3,p75-v3,"$Y$","1","2",e,nw,ne);
<br>
call3(p53+v1,p73+v1,p84-h2,"3","4","5",sw,se,e);
<br>
call3(p115+h2,p113+h2,p114,"6","7","$~$",s,n,w);
<br>
spli7((14,6.4),(12,5.4),(9.8,5.0),(9.2,4),(9.8,3.0),(12,2.6),(14,1.6));
<br>
spli7((1.0,3.6),(2.6,3.4),(4,2),(6,1.4),(9.2,2.6),(12,2),(14,.8));
<br>
spli7((1.0,4.4),(2.6,4.6),(4,6),(6,6.6),(9.2,5.4),(12,6),(14,7.2));
<br>
matc2((8.7,4.1),(9.6,4.1),(8.7,3.9),(9.6,3.9));
<br>
matc4((4.7,1.4),(5.0,2.4),(4.5,1.5),(4.8,2.5),(4.7,6.6),(5.0,5.6),(4.5,6.5),(4.8,5.5));
<br>
matc4((7.3,1.4),(7.0,2.4),(7.5,1.5),(7.2,2.5),(7.3,6.6),(7.0,5.6),(7.5,6.5),(7.2,5.5));
<br>
matc4((11.0,1.8),(11.5,3.1),(11.2,1.7),(11.7,3.0),(11.0,6.2),(11.5,4.9),(11.2,6.3),(11.7,5.0));
<br>
O:(17,1);
<br>
spot4(op30,op03,op36,op63); degr3(D,A,B,C); dbledge(A,B,6.5); dbledge(B,C,6.5);
<br>
call3(C+v1,D,A-v1,"$x$","$y$","$z$",n,e,s); E1:.5&lt; B,C&gt;; E3:.5&lt; A,B &gt;;
<br>
E5:.5&lt; B,D&gt;; E6:.5&lt; C,D&gt;; E7:.5&lt; D,A&gt;;
<br>
call3(B-h2,E1-h3+v3,E1+h2-v2,"$w$","$e_1$","$e_2$",w,nw,se);
<br>
call3(E3-h2-v2,E3+h2+v2,E5,"$e_3$","$e_4$","$e_5$",sw,ne,n);
<br>
call3(E6,E7,E5,"$e_6$","$e_7$","$~$",ne,se,s);
<br>
.PE
<br>
}
</p><div id="grammalecte_menu_main_button_shadow_host" style="width: 0px; height: 0px;"></div></body><script src="Drawing%20Graphs%20with%20gpic%20-%20Douglas%20B.%20West_files/api.js"></script></html>

View File

@ -0,0 +1,117 @@
// JavaScript
"use strict";
var oGrammalecteAPI = {
// Thes script might be reloaded, dont use const or let.
// functions callable from within pages
// to be sent to the content-cript via an event “GrammalecteCall”
sVersion: "1.0",
generateNodeId: function (xNode) {
xNode.id = "grammalecte_generated_id_" + Date.now().toString(36) + "_" + this._random(0, 1000000).toString(10);
console.log("[Grammalecte API] generated id:", xNode.id);
return xNode.id;
},
_random: function (nMin, nMax) {
return Math.floor(Math.random() * (nMax - nMin + 1) + nMin);
},
openPanelForNode: function (vNode) {
// Parameter: a HTML node or the identifier of a HTML node
if (vNode instanceof HTMLElement) {
let sNodeId = vNode.id || this.generateNodeId(vNode);
let xEvent = new CustomEvent("GrammalecteCall", { detail: JSON.stringify({sCommand: "openPanelForNode", sNodeId: sNodeId}) });
document.dispatchEvent(xEvent);
}
else if (typeof(vNode) === "string" && document.getElementById(vNode)) {
let xEvent = new CustomEvent("GrammalecteCall", { detail: JSON.stringify({sCommand: "openPanelForNode", sNodeId: vNode}) });
document.dispatchEvent(xEvent);
}
else {
console.log("[Grammalecte API] Error: parameter is not a HTML node with an identifier.");
}
},
openPanelForText: function (sText, vNode=null) {
// Parameter: text to analyze, and optionaly a node to send results to.
if (typeof(sText) === "string") {
let sNodeId = "";
if (vNode instanceof HTMLElement) {
sNodeId = vNode.id || this.generateNodeId(vNode);
}
else if (typeof(vNode) === "string" && document.getElementById(vNode)) {
sNodeId = vNode;
}
else {
console.log("[Grammalecte API] No node identifier. No event, no result will be sent.")
}
let xEvent = new CustomEvent("GrammalecteCall", { detail: JSON.stringify({sCommand: "openPanelForText", sText: sText, sNodeId: sNodeId}) });
document.dispatchEvent(xEvent);
} else {
console.log("[Grammalecte API] Error: parameter is not a text.");
}
},
parseNode: function (vNode) {
/* Parameter: a HTML node (with a identifier) or the identifier of a HTML node.
The result will be sent as an event GrammalecteResult to the node.
*/
if (vNode instanceof HTMLElement) {
let sNodeId = vNode.id || this.generateNodeId(vNode);
let xEvent = new CustomEvent("GrammalecteCall", { detail: JSON.stringify({sCommand: "parseNode", sNodeId: sNodeId}) });
document.dispatchEvent(xEvent);
}
else if (typeof(vNode) === "string" && document.getElementById(vNode)) {
let xEvent = new CustomEvent("GrammalecteCall", { detail: JSON.stringify({sCommand: "parseNode", sNodeId: vNode}) });
document.dispatchEvent(xEvent);
}
else {
console.log("[Grammalecte API] Error: parameter is not a HTML node with an identifier.");
}
},
parseText: function (sText, vNode) {
// Parameter: text to analyze, and a node to send results to.
if (typeof(sText) === "string") {
if (vNode instanceof HTMLElement) {
let sNodeId = vNode.id || this.generateNodeId(vNode);
let xEvent = new CustomEvent("GrammalecteCall", { detail: JSON.stringify({sCommand: "parseText", sText: sText, sNodeId: sNodeId}) });
document.dispatchEvent(xEvent);
}
else if (typeof(vNode) === "string" && document.getElementById(vNode)) {
let xEvent = new CustomEvent("GrammalecteCall", { detail: JSON.stringify({sCommand: "parseText", sText: sText, sNodeId: vNode}) });
document.dispatchEvent(xEvent);
}
else {
console.log("[Grammalecte API] Error: parameter is not a HTML node with an identifier.");
}
} else {
console.log("[Grammalecte API] Error: parameter is not a text.");
}
},
getSpellSuggestions: function (sWord, sDestination, sRequestId="") {
/* parameters:
- sWord (string)
- sDestination: HTML identifier (string) -> the result will be sent as an event GrammalecteResult to destination node
- sRequestId: custom identifier for the request (string) [default = ""]
*/
if (typeof(sWord) === "string" && typeof(sDestination) === "string" && typeof(sRequestId) === "string") {
let xEvent = new CustomEvent("GrammalecteCall", { detail: JSON.stringify({sCommand: "getSpellSuggestions", sWord: sWord, sDestination: sDestination, sRequestId: sRequestId}) });
document.dispatchEvent(xEvent);
} else {
console.log("[Grammalecte API] Error: one or several parameters arent string.");
}
}
}
/*
Tell to the webpage that the Grammalecte API is ready.
*/
document.dispatchEvent(new Event('GrammalecteLoaded'));

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,117 @@
// JavaScript
"use strict";
var oGrammalecteAPI = {
// Thes script might be reloaded, dont use const or let.
// functions callable from within pages
// to be sent to the content-cript via an event “GrammalecteCall”
sVersion: "1.0",
generateNodeId: function (xNode) {
xNode.id = "grammalecte_generated_id_" + Date.now().toString(36) + "_" + this._random(0, 1000000).toString(10);
console.log("[Grammalecte API] generated id:", xNode.id);
return xNode.id;
},
_random: function (nMin, nMax) {
return Math.floor(Math.random() * (nMax - nMin + 1) + nMin);
},
openPanelForNode: function (vNode) {
// Parameter: a HTML node or the identifier of a HTML node
if (vNode instanceof HTMLElement) {
let sNodeId = vNode.id || this.generateNodeId(vNode);
let xEvent = new CustomEvent("GrammalecteCall", { detail: JSON.stringify({sCommand: "openPanelForNode", sNodeId: sNodeId}) });
document.dispatchEvent(xEvent);
}
else if (typeof(vNode) === "string" && document.getElementById(vNode)) {
let xEvent = new CustomEvent("GrammalecteCall", { detail: JSON.stringify({sCommand: "openPanelForNode", sNodeId: vNode}) });
document.dispatchEvent(xEvent);
}
else {
console.log("[Grammalecte API] Error: parameter is not a HTML node with an identifier.");
}
},
openPanelForText: function (sText, vNode=null) {
// Parameter: text to analyze, and optionaly a node to send results to.
if (typeof(sText) === "string") {
let sNodeId = "";
if (vNode instanceof HTMLElement) {
sNodeId = vNode.id || this.generateNodeId(vNode);
}
else if (typeof(vNode) === "string" && document.getElementById(vNode)) {
sNodeId = vNode;
}
else {
console.log("[Grammalecte API] No node identifier. No event, no result will be sent.")
}
let xEvent = new CustomEvent("GrammalecteCall", { detail: JSON.stringify({sCommand: "openPanelForText", sText: sText, sNodeId: sNodeId}) });
document.dispatchEvent(xEvent);
} else {
console.log("[Grammalecte API] Error: parameter is not a text.");
}
},
parseNode: function (vNode) {
/* Parameter: a HTML node (with a identifier) or the identifier of a HTML node.
The result will be sent as an event GrammalecteResult to the node.
*/
if (vNode instanceof HTMLElement) {
let sNodeId = vNode.id || this.generateNodeId(vNode);
let xEvent = new CustomEvent("GrammalecteCall", { detail: JSON.stringify({sCommand: "parseNode", sNodeId: sNodeId}) });
document.dispatchEvent(xEvent);
}
else if (typeof(vNode) === "string" && document.getElementById(vNode)) {
let xEvent = new CustomEvent("GrammalecteCall", { detail: JSON.stringify({sCommand: "parseNode", sNodeId: vNode}) });
document.dispatchEvent(xEvent);
}
else {
console.log("[Grammalecte API] Error: parameter is not a HTML node with an identifier.");
}
},
parseText: function (sText, vNode) {
// Parameter: text to analyze, and a node to send results to.
if (typeof(sText) === "string") {
if (vNode instanceof HTMLElement) {
let sNodeId = vNode.id || this.generateNodeId(vNode);
let xEvent = new CustomEvent("GrammalecteCall", { detail: JSON.stringify({sCommand: "parseText", sText: sText, sNodeId: sNodeId}) });
document.dispatchEvent(xEvent);
}
else if (typeof(vNode) === "string" && document.getElementById(vNode)) {
let xEvent = new CustomEvent("GrammalecteCall", { detail: JSON.stringify({sCommand: "parseText", sText: sText, sNodeId: vNode}) });
document.dispatchEvent(xEvent);
}
else {
console.log("[Grammalecte API] Error: parameter is not a HTML node with an identifier.");
}
} else {
console.log("[Grammalecte API] Error: parameter is not a text.");
}
},
getSpellSuggestions: function (sWord, sDestination, sRequestId="") {
/* parameters:
- sWord (string)
- sDestination: HTML identifier (string) -> the result will be sent as an event GrammalecteResult to destination node
- sRequestId: custom identifier for the request (string) [default = ""]
*/
if (typeof(sWord) === "string" && typeof(sDestination) === "string" && typeof(sRequestId) === "string") {
let xEvent = new CustomEvent("GrammalecteCall", { detail: JSON.stringify({sCommand: "getSpellSuggestions", sWord: sWord, sDestination: sDestination, sRequestId: sRequestId}) });
document.dispatchEvent(xEvent);
} else {
console.log("[Grammalecte API] Error: one or several parameters arent string.");
}
}
}
/*
Tell to the webpage that the Grammalecte API is ready.
*/
document.dispatchEvent(new Event('GrammalecteLoaded'));

BIN
UnixTextProcessing.pdf Normal file

Binary file not shown.

BIN
cstr54.pdf Normal file

Binary file not shown.

12721
cstr54.ps Normal file

File diff suppressed because it is too large Load Diff

BIN
eqn2e.pdf Normal file

Binary file not shown.

1308
eqn2e.ps Normal file

File diff suppressed because it is too large Load Diff

2583
for-the-love-of-troff.pdf Normal file

File diff suppressed because it is too large Load Diff

BIN
gpic.pdf Normal file

Binary file not shown.

2760
gpic.raymond.ps Normal file

File diff suppressed because it is too large Load Diff

BIN
grap.pdf Normal file

Binary file not shown.

BIN
groff-and-mom.pdf Normal file

Binary file not shown.

BIN
groff.pdf Normal file

Binary file not shown.

BIN
meintro.pdf Normal file

Binary file not shown.

1546
meintro.ps Normal file

File diff suppressed because it is too large Load Diff

BIN
mom-pdf.pdf Normal file

Binary file not shown.

BIN
ms-slides.pdf Normal file

Binary file not shown.

207
ms-slides.rof Normal file
View File

@ -0,0 +1,207 @@
.pl 9c
.nr PO 1c
.nr LL 14c
.nr LT 14c
.nr HM 1c
.nr FM .5c
.RP no
.P1
.nr bm 0 1
.nop \!x X papersize=16c,9c
.ds PDFHREF.COLOUR 0.0 0.3 0.9
.defcolor pdf:href.colour rgb \\*[PDFHREF.COLOUR]
.ds PDFHREF.TEXT.COLOUR pdf:href.colour
.OH "'\m[grey]Slides Demo''Deri James\m[]'"
.EH "'\m[grey]Slides Demo''Deri James\m[]'"
.pdftransition PAGE Wipe .5 V O
.pdftransition BLOCK Fade 1
.de HD
.ev dj
.po 0
.vs 0
.sp |0
\#\X'pdf: pdfpic Backdrop.pdf -L 16c 4c'
\X'pdf: import BackdropQ.pdf 0 0 453.543 255.118 453.543 100'
.fl
.vs
.po
.ev
.sp |\\n[HM]u-6p
\Z!\D't 1p'!\D'l \\n[LL]u 0p'
.fl
..
.de HEAD
. NH \\$1
. shift
\\m[pdf:href.colour]\\$*\\m[]
. fl
. pdfbookmark -T bm\\n+[bm] \\n[nh*hl] \\*[SN-STYLE] \\$*
. XS \\n[%]
. pdfhref L -D bm\\n[bm] -- \\*[SN-STYLE] \\$*
. XE
. pdfpause
..
.pdfpagename TITLE
.TL
\m[pdf:href.colour]Demonstrating using
.br
ms macros
.br
for a slideshow\m[]
.AU
Deri James
.LP
.sp -2.4v
.HEAD 1 The Basics
.LP
Using
.I ms
to write a presentation slideshow is easy.
.LP
.pdfpause
.HEAD 2 Configure the "paper" size
.RS
.LD
.ft CR
\&.pl 9c
\&.nr PO 1c
\&.nr LL 14c
\&.nr LT 14c
\&.nr HM 1c
\&.nr FM .5c
\&.RP no
\&.P1
\&.nop \\!x X papersize=16c,9c
.ft
.DE
.RE
The final command sets the pdf page size, suitable for a 16:9 ratio screen.
.HEAD 2 Specify the presentation transitions
.RS
.LD
.ft CR
\&.pdftransition PAGE Box .5 . O
\&.pdftransition BLOCK Wipe 1
.ft
.DE
.RE
A description of the allowed parameters is in the
.pdfhref W -D http://chuzzlewit.co.uk/WebManPDF.pl/man:/1/gropdf -- gropdf(1)
man page.
The parameters applied to
.B PAGE
are used when the transition is to a new slide, and
.B BLOCK
sets the transition for any separate blocks in the slide.
.LP
.B Note:
Not all possible transitions are supported by every PDF reader.
.pdfpause
.HEAD 2 Use Blocks
.LP
A Block is a portion of the slide which you want to appear separately on the screen
when you click the mouse or press the space bar. After the text which you want to
appear simply insert a pause:-
.RS
.LD
.ft CR
\&.pdfpause
.ft
.DE
.RE
.HEAD 2 Printing the slides
.LP
If the presentation contains blocks it may be difficult to print the slides in a format
so they may be given as a handout. The solution is to define GROPDF_NOSLIDE as true before
invoking groff:-
.RS
.LD
.ft CR
GROPDF_NOSLIDE=1 groff -Tpdf -ms filename.ms > filename.pdf
.ft
.DE
.RE
The pdf file produced will not be in presentation mode so can be printed normally but
you may need to select \[oq]scale to fit\[cq] and \[oq]landscape\[cq] to fit the actual
paper size.
.HEAD 1 Other PDF considerations
.LP
This demo has other features which take advantage of calls to the gropdf device which
may be useful.
.bp
.HEAD 2 Integrating busgrap with slides
Slides often integrate various graphs:-
.sp .5v
.pdftransition BLOCK Split 2 V I
.pdfpause
.BGS
Frame:7.1c 5c
Just:centre
PS:7.8
Origin:3c 2.5c
Xrad:1.5c
YRad:1.5c
Caption:\v'.3c'Top 3 UK Newspaper Circulation (+Origin)
BGCOL:grey90
PDFBOOKMARK:2
Series:The Sun 1,978,702
Series:Daily Mail 1,688,727
Series:Daily Mirror 992,235
.BGE
.bp
.pdftransition BLOCK Fade 1
.HEAD 2 PDF overview and clickable TOC
.LP
I included a custom .HEAD macro which creates a heading, adds it to the overview panel
in the pdf reader, adds a clickable link in the TOC and pauses:-
.RS
.LD
.ft CR
.ec Z
Z&.de HEAD
Z&. NH \\$1
Z&. shift
\\m[pdf:hrefZ&.colour]\\$*\\m[]
Z&. fl
Z&. pdfbookmark -T bm\\n+[bm] \\n[nh*hl] \\*[SN-STYLE] \\$*
Z&. XS \\n[%]
Z&. pdfhref L -D bm\\n[bm] -- \\*[SN-STYLE] \\$*
Z&. XE
Z&. pdfpause
Z&..
.ec
.ft
.DE
.RE
.bp
It should be called as:
.RS
.LD
.ft CR
\&.HEAD 2 PDF overview and clickable TOC
.ft
.DE
.RE
.HEAD 2 Move TOC to page after TITLE
.LP
First insert the following just before the
.CW .TL
section at the top of the file.
.RS
.LD
.ft CR
\&.pdfpagename TITLE
.ft
.DE
.RE
Then insert these lines at the end of your ms file:-
.RS
.LD
.ft CR
\&.pdfswitchtopage after TITLE
\&.TC
.ft
.DE
.RE
.pdfswitchtopage after TITLE
.TC

BIN
neatroff.pdf Normal file

Binary file not shown.

BIN
pic-kernighan-1991.pdf Normal file

Binary file not shown.

BIN
pic.examples.pdf Normal file

Binary file not shown.

619
pic.examples.ps Normal file
View File

@ -0,0 +1,619 @@
%!PS-Adobe-3.0
%%Creator: groff version 1.08
%%DocumentNeededResources: font Palatino-Bold
%%+ font Courier-Bold
%%+ font Palatino-Italic
%%+ font Palatino-Roman
%%+ font Courier
%%+ font Symbol
%%DocumentSuppliedResources: procset grops 1.08 0
%%Pages: 8
%%PageOrder: Ascend
%%Orientation: Portrait
%%EndComments
%%BeginProlog
%%BeginResource: procset grops 1.08 0
/setpacking where{
pop
currentpacking
true setpacking
}if
/grops 120 dict dup begin
/SC 32 def
/A/show load def
/B{0 SC 3 -1 roll widthshow}bind def
/C{0 exch ashow}bind def
/D{0 exch 0 SC 5 2 roll awidthshow}bind def
/E{0 rmoveto show}bind def
/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
/G{0 rmoveto 0 exch ashow}bind def
/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
/I{0 exch rmoveto show}bind def
/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
/K{0 exch rmoveto 0 exch ashow}bind def
/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
/M{rmoveto show}bind def
/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
/O{rmoveto 0 exch ashow}bind def
/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
/Q{moveto show}bind def
/R{moveto 0 SC 3 -1 roll widthshow}bind def
/S{moveto 0 exch ashow}bind def
/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
/SF{
findfont exch
[exch dup 0 exch 0 exch neg 0 0]makefont
dup setfont
[exch/setfont cvx]cvx bind def
}bind def
/MF{
findfont
[5 2 roll
0 3 1 roll
neg 0 0]makefont
dup setfont
[exch/setfont cvx]cvx bind def
}bind def
/level0 0 def
/RES 0 def
/PL 0 def
/LS 0 def
/PLG{
gsave newpath clippath pathbbox grestore
exch pop add exch pop
}bind def
/BP{
/level0 save def
1 setlinecap
1 setlinejoin
72 RES div dup scale
LS{
90 rotate
}{
0 PL translate
}ifelse
1 -1 scale
}bind def
/EP{
level0 restore
showpage
}bind def
/DA{
newpath arcn stroke
}bind def
/SN{
transform
.25 sub exch .25 sub exch
round .25 add exch round .25 add exch
itransform
}bind def
/DL{
SN
moveto
SN
lineto stroke
}bind def
/DC{
newpath 0 360 arc closepath
}bind def
/TM matrix def
/DE{
TM currentmatrix pop
translate scale newpath 0 0 .5 0 360 arc closepath
TM setmatrix
}bind def
/RC/rcurveto load def
/RL/rlineto load def
/ST/stroke load def
/MT/moveto load def
/CL/closepath load def
/FL{
currentgray exch setgray fill setgray
}bind def
/BL/fill load def
/LW/setlinewidth load def
/RE{
findfont
dup maxlength 1 index/FontName known not{1 add}if dict begin
{
1 index/FID ne{def}{pop pop}ifelse
}forall
/Encoding exch def
dup/FontName exch def
currentdict end definefont pop
}bind def
/DEFS 0 def
/EBEGIN{
moveto
DEFS begin
}bind def
/EEND/end load def
/CNT 0 def
/level1 0 def
/PBEGIN{
/level1 save def
translate
div 3 1 roll div exch scale
neg exch neg exch translate
0 setgray
0 setlinecap
1 setlinewidth
0 setlinejoin
10 setmiterlimit
[]0 setdash
/setstrokeadjust where{
pop
false setstrokeadjust
}if
/setoverprint where{
pop
false setoverprint
}if
newpath
/CNT countdictstack def
userdict begin
/showpage{}def
}bind def
/PEND{
clear
countdictstack CNT sub{end}repeat
level1 restore
}bind def
end def
/setpacking where{
pop
setpacking
}if
%%EndResource
%%IncludeResource: font Palatino-Bold
%%IncludeResource: font Courier-Bold
%%IncludeResource: font Palatino-Italic
%%IncludeResource: font Palatino-Roman
%%IncludeResource: font Courier
%%IncludeResource: font Symbol
grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72 def/PL
792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron/scaron/zcaron
/Ydieresis/trademark/quotesingle/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/space
/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft
/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four
/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C
/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash
/bracketright/circumflex/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q
/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase
/guillemotleft/guillemotright/bullet/florin/fraction/perthousand/dagger
/daggerdbl/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen/brokenbar
/section/dieresis/copyright/ordfeminine/guilsinglleft/logicalnot/minus
/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu
/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guilsinglright
/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde
/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute
/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute
/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve
/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex
/udieresis/yacute/thorn/ydieresis]def/Courier@0 ENC0/Courier RE
/Palatino-Roman@0 ENC0/Palatino-Roman RE/Palatino-Italic@0 ENC0/Palatino-Italic
RE/Courier-Bold@0 ENC0/Courier-Bold RE/Palatino-Bold@0 ENC0/Palatino-Bold RE
%%EndProlog
%%Page: 1 1
%%BeginPageSetup
BP
%%EndPageSetup
/F0 12/Palatino-Bold@0 SF(Examples of)220.704 120 Q/F1 12/Courier-Bold@0 SF
(pic)3 E F0(Macros)3 E/F2 10/Palatino-Italic@0 SF 1.1 -.55(W. R)248.32 144 T
(ichard Stevens).55 E/F3 10/Palatino-Roman@0 SF .095
(This document contains examples of the)97 201.6 R/F4 10/Courier@0 SF(pic)2.595
E F3(macr)2.595 E .095(os used in my books.)-.18 F(Using)5.095 E F4(pic)2.595 E
F3 -.18(re)2.595 G(quir).18 E(es)-.18 E 2.82(developing a set of macr)72 213.6
R 2.821(os to do common tasks.)-.18 F 2.821(These macr)7.821 F 2.821
(os have been developed and)-.18 F 1.193(tweaked over the past 7 years.)72
225.6 R 1.193(Many of the macr)6.193 F 1.192(os, especially the splines, wer)
-.18 F 3.692(ed)-.18 G 1.192(eveloped by)448.708 225.6 R(Gary W)72 237.6 Q
(right.)-.74 E .4 LW 504 250.8 72 250.8 DL
(The following shows the compass points on a cir)72 265.2 Q(cle.)-.18 E/F5 9
/Courier@0 SF 8.8(A: circle)72 282.2 R(rad 0.5)5.4 E(arrow up 0.2 from A.n)97
293.2 Q(arrow up 0.2 right 0.2 from A.ne)97 304.2 Q(arrow right 0.2 from A.e)97
315.2 Q(arrow down 0.2 right 0.2 from A.se)97 326.2 Q(arrow down 0.2 from A.s)
97 337.2 Q(arrow down 0.2 left 0.2 from A.sw)97 348.2 Q
(arrow left 0.2 from A.w)97 359.2 Q(arrow up 0.2 left 0.2 from A.nw)97 370.2 Q
5.4("c)97 381.2 S
(heck the compass points on a circle" at A.e + \(0.3, 0\) ljust)113.2 381.2 Q
122.4 449.6 36 DC ST 122.4 399.2 122.4 413.6 DL 122.4 399.2 MT 2.232 6.768 RL
-4.464 0 RL CL BL 122.4 399.2 MT 2.232 6.768 RL -4.464 0 RL CL ST 162.288
409.712 147.888 424.112 DL 162.288 409.712 MT -3.168 6.336 RL -3.168 -3.168 RL
CL BL 162.288 409.712 MT -3.168 6.336 RL -3.168 -3.168 RL CL ST 172.8 449.6
158.4 449.6 DL 172.8 449.6 MT -6.768 2.232 RL 0 -4.464 RL CL BL 172.8 449.6 MT
-6.768 2.232 RL 0 -4.464 RL CL ST 162.288 489.488 147.888 475.088 DL 162.288
489.488 MT -6.336 -3.168 RL 3.168 -3.168 RL CL BL 162.288 489.488 MT -6.336
-3.168 RL 3.168 -3.168 RL CL ST 122.4 500 122.4 485.6 DL 122.4 500 MT -2.232
-6.768 RL 4.464 0 RL CL BL 122.4 500 MT -2.232 -6.768 RL 4.464 0 RL CL ST
82.512 489.488 96.912 475.088 DL 82.512 489.488 MT 3.168 -6.336 RL 3.168 3.168
RL CL BL 82.512 489.488 MT 3.168 -6.336 RL 3.168 3.168 RL CL ST 72 449.6 86.4
449.6 DL 72 449.6 MT 6.768 -2.232 RL 0 4.464 RL CL BL 72 449.6 MT 6.768 -2.232
RL 0 4.464 RL CL ST 82.512 409.712 96.912 424.112 DL 82.512 409.712 MT 6.336
3.168 RL -3.168 3.168 RL CL BL 82.512 409.712 MT 6.336 3.168 RL -3.168 3.168 RL
CL ST F3(check the compass points on a cir)182.5 451.8 Q(cle)-.18 E 504 513.2
72 513.2 DL(And the compass points on an ellipse.)72 527.6 Q F5 8.8(A: ellipse)
72 544.6 R(wid 0.5 ht 0.3)5.4 E(arrow up 0.2 from A.n)97 555.6 Q
(arrow up 0.2 right 0.2 from A.ne)97 566.6 Q(arrow right 0.2 from A.e)97 577.6
Q(arrow down 0.2 right 0.2 from A.se)97 588.6 Q(arrow down 0.2 from A.s)97
599.6 Q(arrow down 0.2 left 0.2 from A.sw)97 610.6 Q(arrow left 0.2 from A.w)97
621.6 Q(arrow up 0.2 left 0.2 from A.nw)97 632.6 Q 5.4("c)97 643.6 S
(heck the compass points on a ellipse" at A.e + \(0.3, 0\) ljust)113.2 643.6 Q
36 21.6 104.4 686.8 DE ST 104.4 661.6 104.4 676 DL 104.4 661.6 MT 2.232 6.768
RL -4.464 0 RL CL BL 104.4 661.6 MT 2.232 6.768 RL -4.464 0 RL CL ST 131.544
664.768 117.144 679.168 DL 131.544 664.768 MT -3.168 6.336 RL -3.168 -3.168 RL
CL BL 131.544 664.768 MT -3.168 6.336 RL -3.168 -3.168 RL CL ST 136.8 686.8
122.4 686.8 DL 136.8 686.8 MT -6.768 2.232 RL 0 -4.464 RL CL BL 136.8 686.8 MT
-6.768 2.232 RL 0 -4.464 RL CL ST 131.544 708.832 117.144 694.432 DL 131.544
708.832 MT -6.336 -3.168 RL 3.168 -3.168 RL CL BL 131.544 708.832 MT -6.336
-3.168 RL 3.168 -3.168 RL CL ST 104.4 712 104.4 697.6 DL 104.4 712 MT -2.232
-6.768 RL 4.464 0 RL CL BL 104.4 712 MT -2.232 -6.768 RL 4.464 0 RL CL ST
77.256 708.832 91.656 694.432 DL 77.256 708.832 MT 3.168 -6.336 RL 3.168 3.168
RL CL BL 77.256 708.832 MT 3.168 -6.336 RL 3.168 3.168 RL CL ST 72 686.8 86.4
686.8 DL 72 686.8 MT 6.768 -2.232 RL 0 4.464 RL CL BL 72 686.8 MT 6.768 -2.232
RL 0 4.464 RL CL ST 77.256 664.768 91.656 679.168 DL 77.256 664.768 MT 6.336
3.168 RL -3.168 3.168 RL CL BL 77.256 664.768 MT 6.336 3.168 RL -3.168 3.168 RL
CL ST F3(check the compass points on a ellipse)146.5 689 Q EP
%%Page: 2 2
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Palatino-Roman@0 SF 2.5(-2-)279.67 48 S .4 LW 504 84 72 84 DL 2.969(Iu)
72 98.4 S .469(se four macr)84.369 98.4 R .468
(os to draw braces in all our dir)-.18 F 2.968(ections. Each)-.18 F(macr)2.968
E 2.968(od)-.18 G .468(e\214nes the location)378.276 98.4 R/F1 10/Courier@0 SF
(Bracept)2.968 E F0 .823(and text can be placed ther)72 110.4 R 3.323(ea)-.18 G
.823(fter drawing the brace.)207.607 110.4 R .823
(When multiple lines of text ar)5.823 F 3.323(en)-.18 G .823(eeded at)465.827
110.4 R(the)72 122.4 Q F1(Bracept)2.916 E F0 2.916(Id)2.916 G .415
(raw a box of width 0.1, position the box at the)146.098 122.4 R F1(Bracept)
2.915 E F0 .415(and then either left jus-)2.915 F .621
(tify or right justify each line.)72 134.4 R .622(Note that I use the)5.621 F
F1(left_space)3.122 E F0(macr)3.122 E 3.122(ot)-.18 G 3.122(oa)389.92 134.4 S
.622(dd 2 inches of spacing)403.502 134.4 R(to the left of the pictur)72 146.4
Q 2.5(e. This)-.18 F(is because the text items have no width.)2.5 E/F2 9
/Courier@0 SF 8.8(B: box)72 163.4 R(at \(2.0, 0\))5.4 E
(right_brace\( B.ne, B.se \))97 174.4 Q 5.4("\\)122 185.4 S
(fCright_brace\\fP" at Bracept ljust)138.2 185.4 Q(left_brace\( B.nw, B.sw \))
97 196.4 Q(box invis wid 0.1 with .c at Bracept \\)122 207.4 Q
("this is from the " rjust \\)147 218.4 Q("\\fCleft_brace\\fP " rjust \\)147
229.4 Q("macro " rjust)147 240.4 Q(left_space\(Bracept, 2.0\))97 251.4 Q
(top_brace\( B.nw, B.ne \))97 262.4 Q("\\fCtop_brace\\fP" at Bracept above)122
273.4 Q(bottom_brace\( B.sw, B.se \))97 284.4 Q 5.4("\\)122 295.4 S
(fCbottom_brace\\fP" at Bracept below)138.2 295.4 Q 283.536 362.936 MT 0 -36 RL
-54 0 RL 0 36 RL CL ST 290.304 331.4 4.464 -0.0000 -90.0000 DA 294.768 342.632
294.768 331.4 DL 297 344.864 294.768 342.632 DL 294.768 347.168 297 344.936 DL
294.768 358.4 294.768 347.168 DL 290.232 358.472 4.464 90.0000 0.0000 DA F1
(right_brace)299.5 347.136 Q 222.768 331.4 4.464 -90.0000 180.0000 DA 218.232
342.632 218.232 331.4 DL 216 344.864 218.232 342.632 DL 218.232 347.168 216
344.936 DL 218.232 358.4 218.232 347.168 DL 222.696 358.4 4.464 -180.0000
90.0000 DA F0(this is fr)147.36 335.136 Q(om the)-.18 E F1(left_brace)153.5
347.136 Q F0(macr)186 359.136 Q(o)-.18 E 234 320.096 4.464 -90.0000 180.0000 DA
254.232 315.632 234 315.632 DL 256.464 313.4 254.232 315.632 DL 258.696 315.632
256.464 313.4 DL 279 315.632 258.768 315.632 DL 279.072 320.168 4.464 -0.0000
-90.0000 DA F1(top_brace)229.464 309.6 Q 234 369.632 4.464 -180.0000 90.0000 DA
254.232 374.168 234 374.168 DL 256.464 376.4 254.232 374.168 DL 258.696 374.168
256.464 376.4 DL 279 374.168 258.768 374.168 DL 279 369.704 4.464 90.0000
0.0000 DA(bottom_brace)221.714 384.6 Q 504 389.6 72 389.6 DL F0 .445
(The two macr)72 404 R(os)-.18 E F1(label_above)2.945 E F0(and)2.945 E F1
(label_below)2.945 E F0 .445(draw labels above or below a box.)2.945 F -.92(Yo)
5.445 G 2.945(uh).92 G(ave)488.56 404 Q .728(to measur)72 416 R 3.228(et)-.18 G
.728(he lines to the right and left of the arr)127.886 416 R .728
(ows, to leave enough space for the text in the)-.18 F(middle.)72 428 Q F2 8.8
(A: box)72 445 R(wid 3.0 ht 0.4)5.4 E
(label_above\( A.nw, A.ne, 1.2, "a label" \))97 456 Q
(label_below\( A.sw, A.se, 1.0, "another label" \))97 467 Q 288 535.4 MT 0
-28.8 RL -216 0 RL 0 28.8 RL CL ST 72 485 72 499.4 DL 288 485 288 499.4 DL
158.4 492.2 72 492.2 DL 72 492.2 MT 6.768 -2.232 RL 0 4.464 RL CL BL 72 492.2
MT 6.768 -2.232 RL 0 4.464 RL CL ST 201.6 492.2 288 492.2 DL 288 492.2 MT
-6.768 2.232 RL 0 -4.464 RL CL BL 288 492.2 MT -6.768 2.232 RL 0 -4.464 RL CL
ST F0 2.5(al)165.68 494.4 S(abel)176.09 494.4 Q 72 557 72 542.6 DL 288 557 288
542.6 DL 144 549.8 72 549.8 DL 72 549.8 MT 6.768 -2.232 RL 0 4.464 RL CL BL 72
549.8 MT 6.768 -2.232 RL 0 4.464 RL CL ST 216 549.8 288 549.8 DL 288 549.8 MT
-6.768 2.232 RL 0 -4.464 RL CL BL 288 549.8 MT -6.768 2.232 RL 0 -4.464 RL CL
ST(another label)151.13 552 Q EP
%%Page: 3 3
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Palatino-Roman@0 SF 2.5(-3-)279.67 48 S .4 LW 504 84 72 84 DL(The)72
98.4 Q/F1 10/Courier@0 SF(line_gap_down)2.5 E F0(and)2.5 E F1(line_gap_right)
2.5 E F0(macr)2.5 E(os draw a line with a squiggle in the middle.)-.18 E/F2 9
/Courier@0 SF 8.8(A: line)72 115.4 R(right 0.2)5.4 E 8.8(B: line)72 126.4 R
(right 0.2 with .start at A.start + \(0, -0.8\))5.4 E
(line_gap_down\( A.c, B.c \))97 137.4 Q 8.8(C: line)72 159.4 R
(down 0.2 with .start at A.end + \(2.0, 0\))5.4 E 8.8(D: line)72 170.4 R
(down 0.2 with .start at C.start + \(1.0, 0\))5.4 E
(line_gap_right\( C.c, D.c \))97 181.4 Q 86.4 199.4 72 199.4 DL 86.4 257 72 257
DL 79.2 223.88 79.2 199.4 DL 82.08 223.88 79.2 223.88 DL 76.32 232.52 82.08
223.88 DL 79.2 232.52 76.32 232.52 DL 79.2 257 79.2 232.52 DL 230.4 213.8 230.4
199.4 DL 302.4 213.8 302.4 199.4 DL 262.08 206.6 230.4 206.6 DL 262.08 203.72
262.08 206.6 DL 270.72 209.48 262.08 203.72 DL 270.72 206.6 270.72 209.48 DL
302.4 206.6 270.72 206.6 DL 504 270.2 72 270.2 DL F0 1.949(This is the)72 284.6
R F1(vv_spline)4.449 E F0(macr)4.449 E 4.449(o. The)-.18 F F1(dash_box)4.449 E
F0(macr)4.449 E 4.449(od)-.18 G 1.949(raws a dashed box ar)332.562 284.6 R 1.95
(ound anything,)-.18 F(given the lower)72 296.6 Q(-left and upper)-.18 E
(-right locations.)-.18 E F2 8.8(A: box)72 313.6 R(ht 0.2 wid 0.2)5.4 E 8.8
(B: box)72 324.6 R(ht 0.2 wid 0.2 with .n at A.s + \(0, -1.0\))5.4 E
(vv_spline\( A.e, B.ne, -0.05, 0.5, -> \))97 335.6 Q 8.8(C: box)72 357.6 R
(ht 0.2 wid 0.2 with .w at A.e + \(2.0, 0\))5.4 E 8.8(D: box)72 368.6 R
(ht 0.2 wid 0.2 with .n at C.s + \(0, -1.0\))5.4 E
(vv_spline\( C.e, D.ne, -0.10, 0.3, -> \))97 379.6 Q
(dash_box\( D.sw, C.ne + \(0.2, 0\) \))97 390.6 Q
("the last line drawn" at last line.c below)122 401.6 Q 5.4("t)122 412.6 S
(he 2nd last line drawn" at 2nd last line.c ljust)138.2 412.6 Q 86.4 459.4 MT 0
-14.4 RL -14.4 0 RL 0 14.4 RL CL ST 86.4 545.8 MT 0 -14.4 RL -14.4 0 RL 0 14.4
RL CL ST 82.8 452.2 86.4 452.2 DL 86.4 452.2 MT 18 0 RL 12 0 12 13.2 0 39.6 RC
-18 39.6 RL ST 86.4 531.4 MT .72 -7.056 RL 4.104 1.872 RL CL BL 86.4 531.4 MT
.72 -7.056 RL 4.104 1.872 RL CL ST 244.8 459.4 MT 0 -14.4 RL -14.4 0 RL 0 14.4
RL CL ST 244.8 545.8 MT 0 -14.4 RL -14.4 0 RL 0 14.4 RL CL ST 237.6 452.2 244.8
452.2 DL 244.8 452.2 MT 10.8 0 RL 7.2 0 7.2 13.2 0 39.6 RC -10.8 39.6 RL ST
244.8 531.4 MT -.36 -7.128 RL 4.32 1.152 RL CL BL 244.8 531.4 MT -.36 -7.128 RL
4.32 1.152 RL CL ST 216 556.6 216 560.2 DL 216 549.616 216 553.216 DL 216
542.632 216 546.232 DL 216 535.576 216 539.176 DL 216 528.592 216 532.192 DL
216 521.608 216 525.208 DL 216 514.624 216 518.224 DL 216 507.568 216 511.168
DL 216 500.584 216 504.184 DL 216 493.6 216 497.2 DL 216 486.616 216 490.216 DL
216 479.632 216 483.232 DL 216 472.576 216 476.176 DL 216 465.592 216 469.192
DL 216 458.608 216 462.208 DL 216 451.624 216 455.224 DL 216 444.568 216
448.168 DL 216 437.584 216 441.184 DL 216 430.6 216 434.2 DL 219.6 430.6 216
430.6 DL 226.368 430.6 222.768 430.6 DL 233.136 430.6 229.536 430.6 DL 239.832
430.6 236.232 430.6 DL 246.6 430.6 243 430.6 DL 253.368 430.6 249.768 430.6 DL
260.136 430.6 256.536 430.6 DL 266.832 430.6 263.232 430.6 DL 273.6 430.6 270
430.6 DL 273.6 434.2 273.6 430.6 DL 273.6 441.184 273.6 437.584 DL 273.6
448.168 273.6 444.568 DL 273.6 455.224 273.6 451.624 DL 273.6 462.208 273.6
458.608 DL 273.6 469.192 273.6 465.592 DL 273.6 476.176 273.6 472.576 DL 273.6
483.232 273.6 479.632 DL 273.6 490.216 273.6 486.616 DL 273.6 497.2 273.6 493.6
DL 273.6 504.184 273.6 500.584 DL 273.6 511.168 273.6 507.568 DL 273.6 518.224
273.6 514.624 DL 273.6 525.208 273.6 521.608 DL 273.6 532.192 273.6 528.592 DL
273.6 539.176 273.6 535.576 DL 273.6 546.232 273.6 542.632 DL 273.6 553.216
273.6 549.616 DL 273.6 560.2 273.6 556.6 DL 270 560.2 273.6 560.2 DL 263.232
560.2 266.832 560.2 DL 256.536 560.2 260.136 560.2 DL 249.768 560.2 253.368
560.2 DL 243 560.2 246.6 560.2 DL 236.232 560.2 239.832 560.2 DL 229.536 560.2
233.136 560.2 DL 222.768 560.2 226.368 560.2 DL 216 560.2 219.6 560.2 DL F0
(the last line drawn)203.585 568.4 Q(the 2nd last line drawn)276.1 497.6 Q EP
%%Page: 4 4
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Palatino-Roman@0 SF 2.5(-4-)279.67 48 S .4 LW 504 84 72 84 DL(The)72
94.8 Q/F1 10/Courier@0 SF(hz_spline)2.5 E F0(macr)2.5 E 2.5(ow)-.18 G
(ith some dif)186.08 94.8 Q(fer)-.18 E(ent values for the)-.18 E F1(overrun)2.5
E F0(ar)2.5 E(gument.)-.18 E/F2 9/Courier@0 SF(down)97 111.8 Q 3.4(A1: box)72
122.8 R(ht 0.2 wid 0.2)5.4 E 3.4(A2: box)72 133.8 R(ht 0.2 wid 0.2)5.4 E 8.8
(B: box)72 144.8 R(ht 0.2 wid 0.2 with .sw at A1.ne + \(1.0,)5.4 E(0.5\))345.4
144.8 Q 8.8(C: box)72 155.8 R(ht 0.2 wid 0.2 with .nw at A1.se + \(3.0, -0.5\))
5.4 E(hz_spline\( A1.e, B.w, 0.05, 0, ->, 0.5, -0.2 \))97 166.8 Q
(hz_spline\( A2.e, C.w, 0, 0.10, <-, 0.5, -0.2 \))97 177.8 Q 5.4("o)97 188.8 S
(verrun = \\\(mi0.2" at B.e ljust)113.2 188.8 Q(down)97 210.8 Q 3.4(A1: box)72
221.8 R(ht 0.2 wid 0.2 with .n at A1.s + \(0, -1.7\))5.4 E 3.4(A2: box)72 232.8
R(ht 0.2 wid 0.2)5.4 E 8.8(B: box)72 243.8 R
(ht 0.2 wid 0.2 with .sw at A1.ne + \(1.0,)5.4 E(0.5\))345.4 243.8 Q 8.8
(C: box)72 254.8 R(ht 0.2 wid 0.2 with .nw at A1.se + \(3.0, -0.5\))5.4 E
(hz_spline\( A1.e, B.w, 0.05, 0, ->, 0.5, -0.1 \))97 265.8 Q
(hz_spline\( A2.e, C.w, 0, 0.10, <-, 0.5, -0.1 \))97 276.8 Q 5.4("o)97 287.8 S
(verrun = \\\(mi0.1" at B.e ljust)113.2 287.8 Q(down)97 309.8 Q 3.4(A1: box)72
320.8 R(ht 0.2 wid 0.2 with .n at A1.s + \(0, -1.7\))5.4 E 3.4(A2: box)72 331.8
R(ht 0.2 wid 0.2)5.4 E 8.8(B: box)72 342.8 R
(ht 0.2 wid 0.2 with .sw at A1.ne + \(1.0,)5.4 E(0.5\))345.4 342.8 Q 8.8
(C: box)72 353.8 R(ht 0.2 wid 0.2 with .nw at A1.se + \(3.0, -0.5\))5.4 E
(hz_spline\( A1.e, B.w, 0.05, 0, ->, 0.5, 0.1 \))97 364.8 Q
(hz_spline\( A2.e, C.w, 0, 0.10, <-, 0.5, 0.1 \))97 375.8 Q 5.4("o)97 386.8 S
(verrun = 0.1" at B.e ljust)113.2 386.8 Q(down)97 408.8 Q 3.4(A1: box)72 419.8
R(ht 0.2 wid 0.2 with .n at A1.s + \(0, -1.7\))5.4 E 3.4(A2: box)72 430.8 R
(ht 0.2 wid 0.2)5.4 E 8.8(B: box)72 441.8 R
(ht 0.2 wid 0.2 with .sw at A1.ne + \(1.0,)5.4 E(0.5\))345.4 441.8 Q 8.8
(C: box)72 452.8 R(ht 0.2 wid 0.2 with .nw at A1.se + \(3.0, -0.5\))5.4 E
(hz_spline\( A1.e, B.w, 0.05, 0, ->, 0.5, 0.2 \))97 463.8 Q
(hz_spline\( A2.e, C.w, 0, 0.10, <-, 0.5, 0.2 \))97 474.8 Q 5.4("o)97 485.8 S
(verrun = 0.2" at B.e ljust)113.2 485.8 Q EP
%%Page: 5 5
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Palatino-Roman@0 SF 2.5(-5-)279.67 48 S 86.4 148.8 MT 0 -14.4 RL -14.4 0
RL 0 14.4 RL CL .4 LW ST 86.4 163.2 MT 0 -14.4 RL -14.4 0 RL 0 14.4 RL CL ST
172.8 98.4 MT 0 -14.4 RL -14.4 0 RL 0 14.4 RL CL ST 316.8 199.2 MT 0 -14.4 RL
-14.4 0 RL 0 14.4 RL CL ST 86.4 141.6 MT 10.8 0 RL 7.2 0 15.6 -8.4 25.2 -25.2
RC 9.6 -16.8 18 -25.2 25.2 -25.2 RC 10.8 0 RL ST 158.4 91.2 MT -6.768 2.232 RL
0 -4.464 RL CL BL 158.4 91.2 MT -6.768 2.232 RL 0 -4.464 RL CL ST 82.8 141.6
86.4 141.6 DL 86.4 156 MT 32.4 0 RL 21.6 0 46.8 6 75.6 18 RC 28.8 12 54 18 75.6
18 RC 32.4 0 RL ST 86.4 156 MT 6.768 -2.232 RL 0 4.464 RL CL BL 86.4 156 MT
6.768 -2.232 RL 0 4.464 RL CL ST 309.6 192 302.4 192 DL(overr)175.3 93.4 Q
(un =)-.08 E/F1 10/Symbol SF(-)2.5 E F0(0.2)A 86.4 285.6 MT 0 -14.4 RL -14.4 0
RL 0 14.4 RL CL ST 86.4 300 MT 0 -14.4 RL -14.4 0 RL 0 14.4 RL CL ST 172.8
235.2 MT 0 -14.4 RL -14.4 0 RL 0 14.4 RL CL ST 316.8 336 MT 0 -14.4 RL -14.4 0
RL 0 14.4 RL CL ST 86.4 278.4 MT 14.4 0 RL 9.6 0 16.8 -8.4 21.6 -25.2 RC 4.8
-16.8 12 -25.2 21.6 -25.2 RC 14.4 0 RL ST 158.4 228 MT -6.768 2.232 RL 0 -4.536
RL CL BL 158.4 228 MT -6.768 2.232 RL 0 -4.536 RL CL ST 82.8 278.4 86.4 278.4
DL 86.4 292.8 MT 43.2 0 RL 28.8 0 50.4 6 64.8 18 RC 14.4 12 36 18 64.8 18 RC
43.2 0 RL ST 86.4 292.8 MT 6.768 -2.232 RL 0 4.464 RL CL BL 86.4 292.8 MT 6.768
-2.232 RL 0 4.464 RL CL ST 309.6 328.8 302.4 328.8 DL(overr)175.3 230.2 Q(un =)
-.08 E F1(-)2.5 E F0(0.1)A 86.4 422.4 MT 0 -14.4 RL -14.4 0 RL 0 14.4 RL CL ST
86.4 436.8 MT 0 -14.4 RL -14.4 0 RL 0 14.4 RL CL ST 172.8 372 MT 0 -14.4 RL
-14.4 0 RL 0 14.4 RL CL ST 316.8 472.8 MT 0 -14.4 RL -14.4 0 RL 0 14.4 RL CL ST
86.4 415.2 MT 21.6 0 RL 14.4 0 19.2 -8.4 14.4 -25.2 RC -4.8 -16.8 0 -25.2 14.4
-25.2 RC 21.6 0 RL ST 158.4 364.8 MT -6.768 2.232 RL 0 -4.464 RL CL BL 158.4
364.8 MT -6.768 2.232 RL 0 -4.464 RL CL ST 82.8 415.2 86.4 415.2 DL 86.4 429.6
MT 64.8 0 RL 43.2 0 57.6 6 43.2 18 RC -14.4 12 0 18 43.2 18 RC 64.8 0 RL ST
86.4 429.6 MT 6.768 -2.232 RL 0 4.464 RL CL BL 86.4 429.6 MT 6.768 -2.232 RL 0
4.464 RL CL ST 309.6 465.6 302.4 465.6 DL(overr)175.3 367 Q(un = 0.1)-.08 E
86.4 559.2 MT 0 -14.4 RL -14.4 0 RL 0 14.4 RL CL ST 86.4 573.6 MT 0 -14.4 RL
-14.4 0 RL 0 14.4 RL CL ST 172.8 508.8 MT 0 -14.4 RL -14.4 0 RL 0 14.4 RL CL ST
316.8 609.6 MT 0 -14.4 RL -14.4 0 RL 0 14.4 RL CL ST 86.4 552 MT 25.2 0 RL 16.8
0 20.4 -8.4 10.8 -25.2 RC -9.6 -16.8 -6 -25.2 10.8 -25.2 RC 25.2 0 RL ST 158.4
501.6 MT -6.768 2.232 RL 0 -4.464 RL CL BL 158.4 501.6 MT -6.768 2.232 RL 0
-4.464 RL CL ST 82.8 552 86.4 552 DL 86.4 566.4 MT 75.6 0 RL 50.4 0 61.2 6 32.4
18 RC -28.8 12 -18 18 32.4 18 RC 75.6 0 RL ST 86.4 566.4 MT 6.768 -2.232 RL 0
4.464 RL CL BL 86.4 566.4 MT 6.768 -2.232 RL 0 4.464 RL CL ST 309.6 602.4 302.4
602.4 DL(overr)175.3 503.8 Q(un = 0.2)-.08 E EP
%%Page: 6 6
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Palatino-Roman@0 SF 2.5(-6-)279.67 48 S .4 LW 504 84 72 84 DL(The)72
98.4 Q/F1 10/Courier@0 SF(spline_dl)3.099 E F0 .599
(draws a spline down on the left side, and the)3.099 F F1(spline_ur)3.099 E F0
.598(goes up on the right)3.099 F 2.5(side. Ther)72 110.4 R 2.5(ea)-.18 G .36
-.18(re a)130.35 110.4 T(lso).18 E F1(spline_dr)2.5 E F0(and)2.5 E F1
(spline_ul)2.5 E F0(macr)2.5 E(os.)-.18 E/F2 9/Courier@0 SF(down)97 127.4 Q 8.8
(A: box)72 138.4 R(ht 0.2 wid 1.0 "A")5.4 E 8.8(B: box)72 149.4 R
(ht 0.2 wid 1.0 "B")5.4 E 8.8(C: box)72 160.4 R(ht 0.2 wid 1.0 "C")5.4 E 8.8
(D: box)72 171.4 R(ht 0.2 wid 1.0 "D")5.4 E 8.8(E: box)72 182.4 R
(ht 0.2 wid 1.0 "E")5.4 E 8.8(F: box)72 193.4 R(ht 0.2 wid 1.0 "F")5.4 E 8.8
(G: box)72 204.4 R(ht 0.2 wid 1.0 "G")5.4 E 8.8(H: box)72 215.4 R
(ht 0.2 wid 1.0 "H")5.4 E(spline_dl\( A.w, H.w,)97 226.4 Q(0.1, 0.5, -> \))
215.8 226.4 Q(spline_dl\( B.w, G.w,)97 237.4 Q(0.1, 0.4, -> \))215.8 237.4 Q
(spline_dl\( C.w, F.w,)97 248.4 Q(0.1, 0.3, -> \))215.8 248.4 Q
(spline_ur\( H.e, A.e, -0.1, 0.4, -> \))97 259.4 Q
(spline_ur\( G.e, B.e, -0.1, 0.3, -> \))97 270.4 Q
(spline_ur\( F.e, C.e, -0.1, 0.2, -> \))97 281.4 Q 180 313.8 MT 0 -14.4 RL -72
0 RL 0 14.4 RL CL ST F0(A)140.11 308.8 Q 180 328.2 MT 0 -14.4 RL -72 0 RL 0
14.4 RL CL ST(B)140.945 323.2 Q 180 342.6 MT 0 -14.4 RL -72 0 RL 0 14.4 RL CL
ST(C)140.455 337.6 Q 180 357 MT 0 -14.4 RL -72 0 RL 0 14.4 RL CL ST(D)140.13
352 Q 180 371.4 MT 0 -14.4 RL -72 0 RL 0 14.4 RL CL ST(E)140.945 366.4 Q 180
385.8 MT 0 -14.4 RL -72 0 RL 0 14.4 RL CL ST(F)141.22 380.8 Q 180 400.2 MT 0
-14.4 RL -72 0 RL 0 14.4 RL CL ST(G)140.185 395.2 Q 180 414.6 MT 0 -14.4 RL -72
0 RL 0 14.4 RL CL ST(H)139.84 409.6 Q 115.2 306.6 108 306.6 DL 108 306.6 MT -18
0 RL -12 0 -18 6 -18 18 RC 0 12 0 22.8 0 32.4 RC 0 9.6 0 20.4 0 32.4 RC 0 12 6
18 18 18 RC 18 0 RL ST 108 407.4 MT -6.768 2.232 RL 0 -4.464 RL CL BL 108 407.4
MT -6.768 2.232 RL 0 -4.464 RL CL ST 115.2 321 108 321 DL 108 321 MT -14.4 0 RL
-9.6 0 -14.4 4.8 -14.4 14.4 RC 0 9.6 0 16.8 0 21.6 RC 0 4.8 0 12 0 21.6 RC 0
9.6 4.8 14.4 14.4 14.4 RC 14.4 0 RL ST 108 393 MT -6.768 2.232 RL 0 -4.464 RL
CL BL 108 393 MT -6.768 2.232 RL 0 -4.464 RL CL ST 115.2 335.4 108 335.4 DL 108
335.4 MT -10.8 0 RL -7.2 0 -10.8 3.6 -10.8 10.8 RC 0 7.2 0 10.8 0 10.8 RC 0 0 0
3.6 0 10.8 RC 0 7.2 3.6 10.8 10.8 10.8 RC 10.8 0 RL ST 108 378.6 MT -6.768
2.232 RL 0 -4.464 RL CL BL 108 378.6 MT -6.768 2.232 RL 0 -4.464 RL CL ST 172.8
407.4 180 407.4 DL 180 407.4 MT 14.4 0 RL 9.6 0 14.4 -4.8 14.4 -14.4 RC 0 -9.6
0 -21.6 0 -36 RC 0 -14.4 0 -26.4 0 -36 RC 0 -9.6 -4.8 -14.4 -14.4 -14.4 RC
-14.4 0 RL ST 180 306.6 MT 6.768 -2.232 RL 0 4.464 RL CL BL 180 306.6 MT 6.768
-2.232 RL 0 4.464 RL CL ST 172.8 393 180 393 DL 180 393 MT 10.8 0 RL 7.2 0 10.8
-3.6 10.8 -10.8 RC 0 -7.2 0 -15.6 0 -25.2 RC 0 -9.6 0 -18 0 -25.2 RC 0 -7.2
-3.6 -10.8 -10.8 -10.8 RC -10.8 0 RL ST 180 321 MT 6.768 -2.232 RL 0 4.464 RL
CL BL 180 321 MT 6.768 -2.232 RL 0 4.464 RL CL ST 172.8 378.6 180 378.6 DL 180
378.6 MT 7.2 0 RL 4.8 0 7.2 -2.4 7.2 -7.2 RC 0 -4.8 0 -9.6 0 -14.4 RC 0 -4.8 0
-9.6 0 -14.4 RC 0 -4.8 -2.4 -7.2 -7.2 -7.2 RC -7.2 0 RL ST 180 335.4 MT 6.768
-2.232 RL 0 4.464 RL CL BL 180 335.4 MT 6.768 -2.232 RL 0 4.464 RL CL ST 504
427.8 72 427.8 DL 1.958(The following four demonstrate macr)72 442.2 R 1.958
(os right-up-right, right-down-right, left-up-left, and left-)-.18 F
(down-left.)72 454.2 Q F2(down)97 471.2 Q 3.4(A1: box)72 482.2 R
(ht 0.2 wid 0.2)5.4 E 3.4(A2: box)72 493.2 R(ht 0.2 wid 0.2)5.4 E 8.8(B: box)72
504.2 R(ht 0.2 wid 0.2 with .sw at A1.ne + \( 1.0,)5.4 E(0.5\))350.8 504.2 Q
8.8(C: box)72 515.2 R(ht 0.2 wid 0.2 with .nw at A1.se + \( 2.0, -0.5\))5.4 E
8.8(D: box)72 526.2 R(ht 0.2 wid 0.2 with .se at A1.nw + \(-1.0,)5.4 E(0.5\))
350.8 526.2 Q 8.8(E: box)72 537.2 R
(ht 0.2 wid 0.2 with .ne at A1.sw + \(-2.0, -0.5\))5.4 E
(spline_rur\( A1.e, B.w, -0.05, 0, -> \))97 548.2 Q
(spline_rdr\( A2.e, C.w, -0.05, 0, -> \))97 559.2 Q(spline_lul\( A1.w, D.e,)97
570.2 Q(0.05, 0, -> \))226.6 570.2 Q(spline_ldl\( A2.w, E.e,)97 581.2 Q
(0.05, 0, -> \))226.6 581.2 Q 244.8 664 MT 0 -14.4 RL -14.4 0 RL 0 14.4 RL CL
ST 244.8 678.4 MT 0 -14.4 RL -14.4 0 RL 0 14.4 RL CL ST 331.2 613.6 MT 0 -14.4
RL -14.4 0 RL 0 14.4 RL CL ST 403.2 714.4 MT 0 -14.4 RL -14.4 0 RL 0 14.4 RL CL
ST 158.4 613.6 MT 0 -14.4 RL -14.4 0 RL 0 14.4 RL CL ST 86.4 714.4 MT 0 -14.4
RL -14.4 0 RL 0 14.4 RL CL ST 241.2 656.8 244.8 656.8 DL 244.8 656.8 MT 10.8 0
RL 7.2 0 13.2 0 18 0 RC 4.8 0 7.2 -2.4 7.2 -7.2 RC 0 -4.8 0 -10.8 0 -18 RC 0
-7.2 0 -13.2 0 -18 RC 0 -4.8 2.4 -7.2 7.2 -7.2 RC 4.8 0 10.8 0 18 0 RC 10.8 0
RL ST 316.8 606.4 MT -6.768 2.232 RL 0 -4.464 RL CL BL 316.8 606.4 MT -6.768
2.232 RL 0 -4.464 RL CL ST 241.2 671.2 244.8 671.2 DL 244.8 671.2 MT 28.8 0 RL
19.2 0 31.2 0 36 0 RC 4.8 0 7.2 2.4 7.2 7.2 RC 0 4.8 0 8.4 0 10.8 RC 0 2.4 0 6
0 10.8 RC 0 4.8 2.4 7.2 7.2 7.2 RC 4.8 0 16.8 0 36 0 RC 28.8 0 RL ST 388.8
707.2 MT -6.768 2.232 RL 0 -4.464 RL CL BL 388.8 707.2 MT -6.768 2.232 RL 0
-4.464 RL CL ST 234 656.8 230.4 656.8 DL 230.4 656.8 MT -10.8 0 RL -7.2 0 -13.2
0 -18 0 RC -4.8 0 -7.2 -2.4 -7.2 -7.2 RC 0 -4.8 0 -10.8 0 -18 RC 0 -7.2 0 -13.2
0 -18 RC 0 -4.8 -2.4 -7.2 -7.2 -7.2 RC -4.8 0 -10.8 0 -18 0 RC -10.8 0 RL ST
158.4 606.4 MT 6.768 -2.232 RL 0 4.464 RL CL BL 158.4 606.4 MT 6.768 -2.232 RL
0 4.464 RL CL ST 234 671.2 230.4 671.2 DL 230.4 671.2 MT -28.8 0 RL -19.2 0
-31.2 0 -36 0 RC -4.8 0 -7.2 2.4 -7.2 7.2 RC 0 4.8 0 8.4 0 10.8 RC 0 2.4 0 6 0
10.8 RC 0 4.8 -2.4 7.2 -7.2 7.2 RC -4.8 0 -16.8 0 -36 0 RC -28.8 0 RL ST 86.4
707.2 MT 6.768 -2.232 RL 0 4.464 RL CL BL 86.4 707.2 MT 6.768 -2.232 RL 0 4.464
RL CL ST EP
%%Page: 7 7
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Palatino-Roman@0 SF 2.5(-7-)279.67 48 S .4 LW 504 84 72 84 DL .738
(Sometimes I need a custom spline when one of the macr)72 98.4 R .738
(os just shown does not \214t the job.)-.18 F(This)5.737 E .875(example is fr)
72 110.4 R .875(om page 322 of UNPv1.)-.18 F .876
(When making a curve I divide the distance into quarters,)5.876 F
(with one move per quarter)72 122.4 Q(.)-.74 E/F1 9/Courier@0 SF(boxwid = 0.8)
72 139.4 Q(boxht = 0.2)72 150.4 Q 17.6(Box1: box)72 161.4 R 17.6(Box2: box)72
172.4 R(with .w at Box1.e + \(0.55, 0\))5.4 E 17.6(Box3: box)72 183.4 R
(with .w at Box2.e + \(0.55, 0\))5.4 E 12.2(Start: Box1.e)72 205.4 R 17.6
(Dest: Box3.w)72 216.4 R(line left 0.05 from Start)97 227.4 Q
(spline -> from Start \\)115.2 238.4 Q(right 0.55/4 \\)158.4 249.4 Q
(then right 0.55/4 down 0.2 \\)158.4 260.4 Q(then right 0.55/4 down 0.2 \\)
158.4 271.4 Q(then right 0.55/4 \\)158.4 282.4 Q(then right boxwid \\)158.4
293.4 Q(then right 0.55/4 \\)158.4 304.4 Q(then right 0.55/4 up 0.2 \\)158.4
315.4 Q(then right 0.55/4 up 0.2 \\)158.4 326.4 Q(then right 0.55/4)158.4 337.4
Q 5.4(#D)72 348.4 S(raw the "points" in this spline definition.)88.2 348.4 Q
8.8(A: line)72 359.4 R(invis right 0.55/4 from Start)5.4 E 8.8(B: line)72 370.4
R(invis right 0.55/4 down 0.2)5.4 E 8.8(C: line)72 381.4 R
(invis right 0.55/4 down 0.2)5.4 E 8.8(D: line)72 392.4 R(invis right 0.55/4)
5.4 E 8.8(E: line)72 403.4 R(invis right boxwid)5.4 E 8.8(F: line)72 414.4 R
(invis right 0.55/4)5.4 E 8.8(G: line)72 425.4 R(invis right 0.55/4 up 0.2)5.4
E 8.8(H: line)72 436.4 R(invis right 0.55/4 up 0.2)5.4 E 8.8(I: line)72 447.4 R
(invis right 0.55/4)5.4 E(circle rad 0.02 fill 1 at A.end)97 458.4 Q
(circle rad 0.02 fill 1 at B.end)97 469.4 Q(circle rad 0.02 fill 1 at C.end)97
480.4 Q(circle rad 0.02 fill 1 at D.end)97 491.4 Q
(circle rad 0.02 fill 1 at E.end)97 502.4 Q(circle rad 0.02 fill 1 at F.end)97
513.4 Q(circle rad 0.02 fill 1 at G.end)97 524.4 Q
(circle rad 0.02 fill 1 at H.end)97 535.4 Q(circle rad 0.02 fill 1 at I.end)97
546.4 Q 129.6 578.8 MT 0 -14.4 RL -57.6 0 RL 0 14.4 RL CL ST 226.8 578.8 MT 0
-14.4 RL -57.6 0 RL 0 14.4 RL CL ST 324 578.8 MT 0 -14.4 RL -57.6 0 RL 0 14.4
RL CL ST 126 571.6 129.6 571.6 DL 129.6 571.6 MT 4.932 0 RL 3.288 0 6.576 2.4
9.864 7.2 RC 3.288 4.8 6.576 9.6 9.864 14.4 RC 3.288 4.8 6.576 7.2 9.864 7.2 RC
3.288 0 14.532 0 33.732 0 RC 19.2 0 30.456 0 33.768 0 RC 3.312 0 6.624 -2.4
9.936 -7.2 RC 3.312 -4.8 6.624 -9.6 9.936 -14.4 RC 3.312 -4.8 6.624 -7.2 9.936
-7.2 RC 4.968 0 RL ST 266.4 571.6 MT -6.768 2.232 RL 0 -4.464 RL CL BL 266.4
571.6 MT -6.768 2.232 RL 0 -4.464 RL CL ST 139.464 571.6 1.44 DC 0.0000 FL
139.464 571.6 1.44 DC ST 149.4 586 1.44 DC 0.0000 FL 149.4 586 1.44 DC ST
159.264 600.4 1.44 DC 0.0000 FL 159.264 600.4 1.44 DC ST 169.2 600.4 1.44 DC
0.0000 FL 169.2 600.4 1.44 DC ST 226.8 600.4 1.44 DC 0.0000 FL 226.8 600.4 1.44
DC ST 236.736 600.4 1.44 DC 0.0000 FL 236.736 600.4 1.44 DC ST 246.6 586 1.44
DC 0.0000 FL 246.6 586 1.44 DC ST 256.536 571.6 1.44 DC 0.0000 FL 256.536 571.6
1.44 DC ST 266.4 571.6 1.44 DC 0.0000 FL 266.4 571.6 1.44 DC ST 504 615.04 72
615.04 DL F0(The)72 629.44 Q/F2 10/Courier@0 SF(erase)2.891 E F0(macr)2.891 E
2.891(oi)-.18 G 2.891(su)157.823 629.44 S .391
(sed to white out some portion of a \214gur)170.984 629.44 R 2.891(ew)-.18 G
.391(hen lines cr)365.253 629.44 R 2.891(oss. I)-.18 F .391(\214rst specify a)
2.891 F .04(second ar)72 641.44 R .04(gument of 1 \(draw the cir)-.18 F .04
(cle all black\) to check the position of the cir)-.18 F .04
(cle, then change the)-.18 F(ar)72 653.44 Q(gument to 0 to erase the cir)-.18 E
(cle.)-.18 E EP
%%Page: 8 8
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Palatino-Roman@0 SF 2.5(-8-)279.67 48 S/F1 9/Courier@0 SF(right)97 89 Q
8.8(A: box)72 100 R(dashed)5.4 E 8.8(B: box)72 111 R(dashed)5.4 E
(line from A.nw to A.se)97 122 Q(erase\(A.c, 1, 0.05\))97 133 Q 5.4(#d)222 133
S(raw a black circle)238.2 133 Q(line from A.sw to A.ne)97 144 Q
(line from B.nw to B.se)97 155 Q(erase\(B.c, 0, 0.05\))97 166 Q 5.4(#d)222 166
S(raw a white circle)238.2 166 Q(line from B.sw to B.ne)97 177 Q .4 LW 75.6
209.4 72 209.4 DL 82.368 209.4 78.768 209.4 DL 89.136 209.4 85.536 209.4 DL
95.832 209.4 92.232 209.4 DL 102.6 209.4 99 209.4 DL 109.368 209.4 105.768
209.4 DL 116.064 209.4 112.464 209.4 DL 122.832 209.4 119.232 209.4 DL 129.6
209.4 126 209.4 DL 129.6 205.8 129.6 209.4 DL 129.6 200.4 129.6 204 DL 129.6
195 129.6 198.6 DL 126 195 129.6 195 DL 119.232 195 122.832 195 DL 112.536 195
116.136 195 DL 105.768 195 109.368 195 DL 99 195 102.6 195 DL 92.232 195 95.832
195 DL 85.536 195 89.136 195 DL 78.768 195 82.368 195 DL 72 195 75.6 195 DL 72
198.6 72 195 DL 72 204 72 200.4 DL 72 209.4 72 205.8 DL 133.2 209.4 129.6 209.4
DL 140.904 209.4 137.304 209.4 DL 148.608 209.4 145.008 209.4 DL 156.312 209.4
152.712 209.4 DL 164.088 209.4 160.488 209.4 DL 171.792 209.4 168.192 209.4 DL
179.496 209.4 175.896 209.4 DL 187.2 209.4 183.6 209.4 DL 187.2 205.8 187.2
209.4 DL 187.2 200.4 187.2 204 DL 187.2 195 187.2 198.6 DL 183.6 195 187.2 195
DL 175.896 195 179.496 195 DL 168.192 195 171.792 195 DL 160.488 195 164.088
195 DL 152.712 195 156.312 195 DL 145.008 195 148.608 195 DL 137.304 195
140.904 195 DL 129.6 195 133.2 195 DL 129.6 198.6 129.6 195 DL 129.6 204 129.6
200.4 DL 129.6 209.4 129.6 205.8 DL 129.6 209.4 72 195 DL 100.8 202.2 3.6 DC
0.0000 FL 129.6 195 72 209.4 DL 187.2 209.4 129.6 195 DL 158.4 202.2 3.6 DC
1.0000 FL 187.2 195 129.6 209.4 DL EP
%%Trailer
end
%%EOF

BIN
troff.pdf Normal file

Binary file not shown.

BIN
trofftut-1996.pdf Normal file

Binary file not shown.

BIN
trofftut.pdf Normal file

Binary file not shown.

2201
trofftut.ps Normal file

File diff suppressed because it is too large Load Diff

BIN
using-ms.pdf Normal file

Binary file not shown.

BIN
utroff-doc.pdf Normal file

Binary file not shown.