%!PS-Adobe-2.0 %%Creator: dvips 5.47 Copyright 1986-91 Radical Eye Software %%Title: lametex.dvi %%Pages: 1 1 %%BoundingBox: 0 0 612 792 %%EndComments %%BeginProcSet: tex.pro /TeXDict 200 dict def TeXDict begin /N /def load def /B{bind def}N /S /exch load def /X{S N}B /TR /translate load N /isls false N /vsize 10 N /@rigin{ isls{[0 1 -1 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale Resolution VResolution vsize neg mul TR matrix currentmatrix dup dup 4 get round 4 exch put dup dup 5 get round 5 exch put setmatrix}N /@letter{/vsize 10 N}B /@landscape{/isls true N /vsize -1 N}B /@a4{/vsize 10.6929133858 N}B /@a3{ /vsize 15.5531 N}B /@ledger{/vsize 16 N}B /@legal{/vsize 13 N}B /@manualfeed{ statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{/sf 1 N /fntrx FMat N df-tail} B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{128 ch-data dup length 3 sub get sub}B /ch-yoff{ ch-data dup length 2 sub get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N /rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /FMat [ 0.24 0 0 0.24 0 0 ] def /CharBuilder % fontdict ascii { 1 index % fontdict ascii fontdict /base get % fontdict ascii base exch get % fontdict asciiequiv exch /BitMaps get % asciiequiv BitMaps exch get % bitmapstring % ch-data becomes the bitmapstring for the ascii character /ch-data exch def % /ctr 0 def % The next line is the "ch-dx" algorithm ch-data dup length 1 sub get % ch-data last-char 0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice ch-width ch-height true [ 1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add ] { ch-image } imagemask } bind def /D{/cc X dup type /stringtype ne{]}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin 0 0 moveto}N /eop{clear SI restore showpage userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook known{start-hook}if /VResolution X /Resolution X 1000 div /DVImag X /IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for}N /p /show load N /RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V statusdict begin /product where{pop product dup length 7 ge{0 7 getinterval(Display)eq}{pop false}ifelse}{false}ifelse end{{gsave TR -.1 -.1 TR 1 1 scale rulex ruley false RMat{BDot}imagemask grestore}}{{gsave TR -.1 -.1 TR rulex ruley scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /a{ moveto}B /delta 0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{ S p tail}B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w }B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p a}B /bos{/SS save N}B /eos{clear SS restore}B end %%EndProcSet TeXDict begin 1000 300 300 @start /Fa 57 123 df<6060F0F0F8F8686808080808080810 1010102020404080800D0C7F9C15>34 D<60F0F8680808081010204080050C7C9C0C>39 D<004000800100020006000C000C0018001800300030007000600060006000E000E000E000E000 E000E000E000E000E000E000E000E000600060006000700030003000180018000C000C00060002 000100008000400A2A7D9E10>I<800040002000100018000C000C000600060003000300038001 800180018001C001C001C001C001C001C001C001C001C001C001C001C001800180018003800300 0300060006000C000C00180010002000400080000A2A7E9E10>I<60F0F0701010101020204080 040C7C830C>44 DI<60F0F06004047C830C>I<03C00C301818300C300C 700E60066006E007E007E007E007E007E007E007E007E007E007E007E007E00760066006700E30 0C300C18180C3007E0101D7E9B15>48 D<030007003F00C7000700070007000700070007000700 0700070007000700070007000700070007000700070007000700070007000F80FFF80D1C7C9B15 >I<07C01830201C400C400EF00FF80FF807F8077007000F000E000E001C001C00380070006000 C00180030006010C01180110023FFE7FFEFFFE101C7E9B15>I<07E01830201C201C781E780E78 1E381E001C001C00180030006007E00030001C001C000E000F000F700FF80FF80FF80FF00E401C 201C183007E0101D7E9B15>I<000C00000C00001C00003C00003C00005C0000DC00009C00011C 00031C00021C00041C000C1C00081C00101C00301C00201C00401C00C01C00FFFFC0001C00001C 00001C00001C00001C00001C00001C0001FFC0121C7F9B15>I<300C3FF83FF03FC02000200020 0020002000200023E024302818301C200E000E000F000F000F600FF00FF00FF00F800E401E401C 2038187007C0101D7E9B15>I<00F0030C06040C0E181E301E300C700070006000E3E0E430E818 F00CF00EE006E007E007E007E007E007600760077006300E300C18180C3003E0101D7E9B15>I< 4000007FFF807FFF007FFF00400200800400800400800800001000001000002000006000004000 00C00000C00001C000018000018000038000038000038000038000078000078000078000078000 078000078000030000111D7E9B15>I<03E00C301008200C20066006600660067006780C3E083F B01FE007F007F818FC307E601E600FC007C003C003C003C00360026004300C1C1007E0101D7E9B 15>I<03C00C301818300C700C600EE006E006E007E007E007E007E0076007700F300F18170C27 07C700060006000E300C780C78187010203030C00F80101D7E9B15>I<60F0F060000000000000 0000000060F0F06004127C910C>I<000600000006000000060000000F0000000F0000000F0000 0017800000178000001780000023C0000023C0000023C0000041E0000041E0000041E0000080F0 000080F0000180F8000100780001FFF80003007C0002003C0002003C0006003E0004001E000400 1E000C001F001E001F00FF80FFF01C1D7F9C1F>65 DI<001F8080 00E0618001801980070007800E0003801C0003801C000180380001807800008078000080700000 80F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000700000807800 008078000080380000801C0001001C0001000E000200070004000180080000E03000001FC00019 1E7E9C1E>I69 DI72 DI78 D<003F800000E0E000038038 0007001C000E000E001C0007003C00078038000380780003C0780003C0700001C0F00001E0F000 01E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0700001C0780003C0780003C038 0003803C0007801C0007000E000E0007001C000380380000E0E000003F80001B1E7E9C20>I<07 E0801C1980300580700380600180E00180E00080E00080E00080F00000F800007C00007FC0003F F8001FFE0007FF0000FF80000F800007C00003C00001C08001C08001C08001C0C00180C00180E0 0300D00200CC0C0083F800121E7E9C17>83 D<7FFFFFC0700F01C0600F00C0400F0040400F0040 C00F0020800F0020800F0020800F0020000F0000000F0000000F0000000F0000000F0000000F00 00000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F 0000000F0000001F800003FFFC001B1C7F9B1E>I<08081010202040404040808080808080B0B0 F8F8787830300D0C7A9C15>92 D<0810204040808080B0F87830050C7D9C0C>96 D<1FC000307000783800781C00301C00001C00001C0001FC000F1C00381C00701C00601C00E01C 40E01C40E01C40603C40304E801F870012127E9115>II< 07E00C301878307870306000E000E000E000E000E000E00060007004300418080C3007C00E127E 9112>I<003F0000070000070000070000070000070000070000070000070000070000070003E7 000C1700180F00300700700700600700E00700E00700E00700E00700E00700E007006007007007 00300700180F000C370007C7E0131D7E9C17>I<03E00C301818300C700E6006E006FFFEE000E0 00E000E00060007002300218040C1803E00F127F9112>I<00F8018C071E061E0E0C0E000E000E 000E000E000E00FFE00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00 0E007FE00F1D809C0D>I<00038003C4C00C38C01C3880181800381C00381C00381C00381C0018 18001C38000C300013C0001000003000001800001FF8001FFF001FFF803003806001C0C000C0C0 00C0C000C06001803003001C0E0007F800121C7F9215>I I<18003C003C0018000000000000000000000000000000FC001C001C001C001C001C001C001C00 1C001C001C001C001C001C001C001C001C00FF80091D7F9C0C>I<00C001E001E000C000000000 000000000000000000000FE000E000E000E000E000E000E000E000E000E000E000E000E000E000 E000E000E000E000E000E000E060E0F0C0F1C061803E000B25839C0D>IIIII<03F0000E 1C00180600300300700380600180E001C0E001C0E001C0E001C0E001C0E001C060018070038030 03001806000E1C0003F00012127F9115>II<03C1000C3300180B00300F007007 00700700E00700E00700E00700E00700E00700E00700600700700700300F00180F000C370007C7 00000700000700000700000700000700000700000700003FE0131A7E9116>II<1F9030 704030C010C010E010F8007F803FE00FF000F880388018C018C018E010D0608FC00D127F9110> I<04000400040004000C000C001C003C00FFE01C001C001C001C001C001C001C001C001C001C10 1C101C101C101C100C100E2003C00C1A7F9910>IIII<7F8FF00F03800F0300070200 03840001C80001D80000F00000700000780000F800009C00010E00020E000607000403801E07C0 FF0FF81512809116>II<7FFC70386038407040F040E041C003C0038007000F04 0E041C043C0C380870087038FFF80E127F9112>I E end %%EndProlog %%BeginSetup %%Feature: *Resolution 300 TeXDict begin %%EndSetup /cm10rm{ pop Fa } bind def /fontnames [ /TIMESROMAN /cm10rm ] def %! This is a PostScript library meant to be printed only with other files %%% %% Postscript Code by Jonathan Monsarrat Copyright 1992 %% permission given for anything except selling this or deleting the header. %% This is the LameTeX Formatter, uses the LaTeX language % Depends on "EndPage" and "StartPage" to be set up by a page formatter /formatdict 100 dict def % This should be 77? formatdict begin /wlist 100 array def % Maximum of 100 words on a line %% Better give these variables default values in case we try to %% do an EndPage but they have not yet been defined /baselineskip 200 def /wlen 0 def /baselineskip 0 def /bottommargin 0 def /parindent 0 def /justify 0 def /rightmargin 0 def /leftmargin 0 def /topmargin 0 def /parskip 0 def /newfontcmd 1 def /para 0 def /vtotal 0 def /wordlen 0 def /ypos 0 def /ytemp 0 def %%%%%%%%%%%%%%%% num InitWord - %%%%%%%%%%%%%%%%%%%%%%% % InitWord takes an setflat values and flattens the current path % It also defines some globals that will get "NextWord" up and running /InitWord { /xpos currentflat def % Save current flatness PageShape setflat flattenpath % gsave stroke grestore % Uncomment this line to show the margin path /coords Approx def pathbbox % It the current path is bigger than the margins, widen them! dup TM gt { /TM exch def } { pop } ifelse dup RM gt { /RM exch def } { pop } ifelse dup BM lt { /BM exch def } { pop } ifelse dup LM lt { /LM exch def } { pop } ifelse xpos setflat % Restore flatness. false fontnames newfontcmd get cvx exec /xlocs [ ] def /welem 1 def /wlen 0 def /woids 0 def /eslot LM def /ypos TM topmargin sub def /vtotal 0 def /xpos 0 def /nxpos 0 def wlist 0 [ newfontcmd false ] put /wtemp 0 def NextSpace pop } bind def %%%%%%%%%%%%%%%%%%%%% - NewXSpace bool %%%%%%%%%%%%%%%%%%%%%% % If there's "room on the bottom" as defined by xlocs, check to see if % there's "room on the top" as defined by NewXSpace. Returns success boolean. /NewXSpace { nxpos newxlocs length 1 sub lt { newxlocs nxpos 2 getinterval {} forall exch /nxpos nxpos 2 add def % If there's any intersection of top and bottom 'good places' set bslot, eslot dup xa le { pop xa } if leftmargin add /bslot exch def dup xb ge { pop xb } if rightmargin sub /eslot exch def bslot eslot lt { true } { NewXSpace } ifelse } { false } ifelse } bind def %%%%%%%%%%%%%%% - NextSpace bool %%%%%%%%%%%%%%%%%%%%%% % NextSpace defines the next space available for writing by % setting ypos to the Y location and bslot and eslot to the beginning % and end of the next open text writing area. Returns success boolean. /NextSpace { xpos xlocs length 1 sub lt % are there any X's left on current line { /xa xlocs xpos get def /xb xlocs xpos 1 add get def NewXSpace { true } { /nxpos 0 def /xpos xpos 2 add def NextSpace } ifelse } { ypos % Leave on the stack for later comparison /ypos ypos vspace 0 eq { baselineskip para { parskip add } if /vtotal baselineskip def } { vspace /vspace 0 def } ifelse sub def ypos BM bottommargin add ge { /newxlocs coords 3 -1 roll 4 add true CheeseWhiz def /xlocs coords ypos 4 sub true CheeseWhiz def /xpos 0 def /nxpos 0 def NextSpace } { pop false } ifelse } ifelse % if we're doing a paragraph and the NextSpace isn't big enough % for the indentation, then choose a new space. % if found-space and para and justify dup para justify 102 eq and and % 102 is ascii 'f' for FULL JUSTIFY { /bslot bslot parindent add def bslot eslot gt { pop NextSpace pop } if } if /para false def } bind def %%%%%%%%%%%%%%%%%%%%%%% - PrintWordList - %%%%%%%%%%%%%%%%%%%%%%%%%%%% % PrintWordList prints the words stored in array "wlist" at Y location ypos % with full justification between X locations bslot and eslot. /PrintWordList { /vtotal 0 def woids 0 ne { % Legal values for /justify are (l)eft (r)ight (f)ull (c)enter in ASCII justify 99 eq % 99 is ascii 'c' for CENTERED { bslot eslot bslot sub wlen sub 2 div add ypos moveto } { bslot justify 114 eq { eslot bslot sub wlen sub add } if % 114 is 'r' ypos moveto } ifelse /sp eslot bslot sub wlen sub woids div def 0 1 welem 1 sub { wlist exch get dup type /stringtype eq { SHOWIT ( ) stringwidth pop 0 rmoveto justify 102 eq { sp 0 rmoveto } if % 102 is ascii 'f' } { dup type /arraytype eq { { } forall { ( ) stringwidth pop neg 0 rmoveto justify 102 eq { sp neg 0 rmoveto } if % 102 is ascii 'f' } if fontnames exch get cvx true exch exec } { 0 rmoveto } ifelse } ifelse } for wlist 0 [ newfontcmd false ] put /welem 1 def /wlen 0 def /woids 0 def } if } def %%%%%%%%%%%%%%%%%%%%%%%%% - PrintClose - %%%%%%%%%%%%%%%%%%%%%%%% % PrintClose prints the words stored in the array "wlist" at Y location ypos % starting at X location bslot with left justification. /PrintClose { justify 102 eq % 102 is ascii 'f' { /justify 108 def % 108 is ascii 'l' for flushleft PrintWordList /justify 102 def } { PrintWordList } ifelse } bind def %%%%%%%%%%%%%%%% string Parse - %%%%%%%%%%%%%%%%%%%%%%%% % Parse breaks a string into words based on spaces, passing each to NextWord /Parse { dup length 0 eq % kill extra spaces by shaving them until null string { pop } { ( ) search { Parse pop Parse } { NW } ifelse } ifelse } bind def %%%%%%%%%%%%%%%%%%%%%%% string NextWord - %%%%%%%%%%%%%%%%%%%%%% % NextWord appends the string to an array of words % and tries to place the text inside an arbitrary path (which was analyzed % by InitWord). It's meant to be an iterative part of a long list of % "string NextWord" sets which justifies text inside any closed path. /NextWord { /word exch def word stringwidth pop /wordlen exch def GrabSpace } bind def %%%%%%%%%% Takes a horizontal distance and a string for positioning /GrabSpace { wordlen wlen add eslot bslot sub gt { PrintWordList word type /stringtype ne { /welem 0 def } if NextSpace { GrabSpace } { % Have reached end of page ENDPAGE STARTPAGE /ypos baselineskip ypos add def /vtotal baselineskip def NEWLINE GrabSpace } ifelse } { word type /stringtype eq { wlist welem word put /welem welem 1 add def /wlen wlen ( ) stringwidth pop add def /woids woids 1 add def } if /wlen wlen wordlen add def } ifelse } def %%%%%%%%%%%%%%%% xwidth HSpace - %%%%%%%%%%%%%% % Adds to the current wlen and adds the right thing in the wlist array /HSpace { dup wlen add /wlen exch def wlist welem 3 -1 roll put /welem welem 1 add def } bind def %%%%%%%%%%%%%%%%% size type NewFont %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % NewFont sets a new font, given a type and size /NewFont { { } forall /word exch def /newfontcmd exch def word wlist welem [ newfontcmd 5 -1 roll ] put /welem welem 1 add def false fontnames newfontcmd get cvx exec word true eq woids 0 gt and { /wlen wlen ( ) stringwidth pop sub def } if } bind def %%%%%%%%%%%%%% x y READJUST %%%%%%%%%%%%%% % Readjusts the line down by given amountif big fonts are being placed % in a small vertical space, and across if a horizontal space is being added. /READJUST { wtemp type /arraytype eq % Don't do recursive READJUSTs { pop pop } { /vspace exch def /wordlen exch def /welem welem 1 sub def GrabSpace vspace 0 ne { SKIPLINE } if % Skip to a new page if needed /wtemp wlist def /woids 0 def /wlen 0 def 0 1 welem /welem 0 def { wtemp exch get dup type /stringtype eq { NextWord } { dup type /arraytype eq { NewFont } { HSpace } ifelse } ifelse } for wordlen HSpace /wtemp 0 def } ifelse } bind def %%%% Skipline skips a given amount of vertical space /SKIPLINE { vspace 0 eq vspace vtotal gt or { vspace vtotal gt { /vspace vspace vtotal sub /vtotal vspace def def } if /ytemp ypos def true 20 % repeat { NextSpace not % did it get a new line successfully? { ENDPAGE STARTPAGE /ypos baselineskip ypos add def /vtotal baselineskip def NEWLINE } if ypos ytemp ne { pop false exit } if } repeat { % Did the repeat "fail" by falling off the end? erasepage grestoreall /Times-Roman findfont 20 scalefont setfont 50 100 moveto (Could not place words anywhere on the virtual page) show showpage quit } if } if } bind def %%%%%%%%%%%%%%%%%%%%% % Some startup definitions /para true def /vspace 0 def % User command definitions, meant to be called from outside /NW { NextWord } bind def /SHOWIT { show } bind def /NEWLINE { PrintWordList NextSpace pop } def /NEWPARA { PrintClose /para true def SKIPLINE } bind def /ENUMERATE { dup stringwidth pop 9 add bslot exch sub ypos moveto show } bind def /BULLET { newpath bslot 9 sub ( ) stringwidth pop 1.7 div dup ypos add exch 0 360 arc currentgray 0 setgray fill setgray } bind def /TIMESROMAN { pop /Times-Roman findfont 10 scalefont setfont } bind def /BASELINESKIP { /baselineskip exch def } bind def /STARTPAGE { end /savetype save def StartPage formatdict begin InitWord } def /ENDPAGE { PrintClose % Put all the variables we want to save on the stack baselineskip bottommargin parindent justify rightmargin leftmargin topmargin parskip newfontcmd para wordlen ypos ytemp word type /stringtype eq { mark word {} forall true } { word false } ifelse end savetype restore formatdict begin { counttomark string /word exch def counttomark 1 sub -1 0 { exch word 3 1 roll put % Builds word out of individual characters } for pop } { /word exch def } ifelse % Recover all the variables /ytemp exch def /ypos exch def /wordlen exch def /para exch def /newfontcmd exch def /parskip exch def /topmargin exch def /leftmargin exch def /rightmargin exch def /justify exch def /parindent exch def /bottommargin exch def /baselineskip exch def end EndPage formatdict begin } def %! This is a PostScript library meant to be included in other files %%% %% Postscript Code by Jon Monsarrat Copyright 1991 %% permission given for anything except selling this or deleting the header. %%%%%%%%%%% - Approx array %%%%%%%%%%%%%%%%% % Approx flattens a path into a series of lines. % This new flattened path is returned as a triple-array path representation. % The path is broken into sub-paths which have a double-array representation. % Each sub-path breaks into vertices which have a single-array representation. % Each vertex is of the form X Y. We're doing a fill here so any % unclosed subpaths get closed. That's how postscript normally handles fill. % It would be easier to use [ X Y ] vertices, but that would waste memory! /Approx { [ [ { /Y exch def /X exch def ] [ X Y } { } { } { X Y } pathforall ] ] } bind def %%%%%%%%%%%%%%%%%%% array num bool SortArray array %%%%%%%%%%%%%%% % SortArray bubble sorts "array" of packets in increasing order, packets are % groups of numbers and a packet is of size "num". Sorting is done based % on the value of the first item in each packet. When sorting is done, % SortArray goes through and deletes all equal packets if "bool" is true. /SortArray { 10 dict begin /DelEquals exch def /Pack exch def /newlist exch def 0 Pack newlist length 2 Pack mul sub { /anum exch def anum Pack add Pack newlist length 1 Pack mul sub { /bnum exch def newlist anum get newlist bnum get ge { /flag true def newlist anum get newlist bnum get eq Pack 2 eq and { /flag false def newlist anum 1 add get newlist bnum 1 add get add 0 eq { newlist anum 1 add get 1 eq ontop xor { /flag true def } if } if } if flag { 0 1 Pack 1 sub { /ind exch def /temp newlist anum ind add get def newlist anum ind add newlist bnum ind add get put newlist bnum ind add temp put } for } if } if } for } for DelEquals % if this boolean is true, delete all equal packs { [ 0 Pack newlist length 2 Pack mul sub { /anum exch def newlist anum get newlist anum Pack add get ne { 0 1 Pack 1 sub { anum add newlist exch get } for } if } for 0 1 Pack 1 sub { /ind exch def newlist newlist length Pack sub ind add get } for ] } { newlist } ifelse end % temp dict 10 } bind def %%%%%%%%%%%%%%%%%% bool CheeseY X1 W1 or nothing %%%%%%%%%% % CheeseY uses defined variables Y1 (a number), oldx, oldy, newx, newy. % CheeseY asks "does the line segment bounded by oldxy, newxy cross y=Y1? % If so, CheeseY leaves X1 W on the stack, where (X1,Y1) is the point of % intersection. The winding value W is calculated from the sign of the slope. % CheeseY takes one argument which is a boolean value. This boolean is % true is the Y1 value is "on top" of the region of interest, false if "below". % This is to deal correctly with line segments which end on the y=Y1 line. % These special line segments are ignored if they don't pass through the % region of interest. It would be easier to use [ X W ] but memory wasteful. /CheeseY { /top exch def oldy newy 2 copy gt { exch } if Y1 ge exch Y1 le and { oldy newy ne { oldx newx sub oldy newy sub div oldy Y1 sub mul oldx exch sub oldy newy lt { 1 } { -1 } ifelse } { newx 0 } ifelse % If the line segment does NOT go through region of interest % but rather just happens to end on line y=Y1, don't use it. oldy Y1 eq { dup top { -1 } { 1 } ifelse ne { pop pop } if } { newy Y1 eq { dup top { 1 } { -1 } ifelse ne { pop pop } if } if } ifelse } if } bind def %%%%%%%%%%%%%%%%%%%%% array num bool CheeseWhiz array %%%%%%%%%%%%%%%%% % CheeseWhiz traverses the flattened path as computed by Approx to find % any points of intersection with the line y=Y1, where Y1 is it's num argument. % It's boolean argument is true if y=Y1 bounds the region of interest "on top". % For all points of intersection X1 goes on the stack, where [ X1 Y1 ] % is the point, BUT ONLY IF the winding value or evenodd calculation says % to. The winding value is complex and calculated from the sign of the slope. % CheeseWhiz does this by breaking the path into line segments and passing % it to CheeseY. The final array of X1 values is sorted, keeping duplicates. /CheeseWhiz { 15 dict begin /ontop exch def /Y1 exch def [ exch { /oldx (Begin) def /flag false def { flag { /newy exch def oldx (Begin) eq { /firstx newx def /firsty newy def} { ontop CheeseY } ifelse /oldx newx def /oldy newy def } { /newx exch def } ifelse /flag flag not def } forall oldx (Begin) ne { /newx firstx def % Even if the subpath is not closed, PostScript /newy firsty def % fill methodology says close it. So wrap around. ontop CheeseY } if } forall ] % Sort the array of X W values 2 false SortArray % Now go through and take out X's where there is no inside/outside change [ exch fillout { LM exch } if /winding 0 def /inside false def % always start off outside /flag false def { flag { winding add /winding exch def evenodd not { winding 0 eq inside xor { pop } { /inside inside not def } ifelse } if } if /flag flag not def } forall fillout { RM } if ] end % temp dict 15 } def %% End of PostScript Path-breaking Library /justify 102 def 12 BASELINESKIP /leftmargin 126 def /rightmargin 126 def /rightmargin 360 def /leftmargin 126 def /rightmargin 126 def /parindent 18 def /parskip 0 def /bottommargin 90 def /rightmargin 126 def /topmargin 162 def /bottommargin 90 def /rightmargin 54 def /bottommargin -18 def /topmargin 72 def /bottommargin 72 def /leftmargin 90 def /rightmargin 90 def /leftmargin 90 def /rightmargin 90 def /justify 99 def end %! page_latex.ps - A replica of the standard LaTeX page %% This is a LameTeX Page Description File written in PostScript. %% Postscript Code by Jon Monsarrat Copyright 1992 %% permission given for anything except selling this or deleting the header. %% This is a page template for the LameTeX formatter %% A normal page for LameTeX output to look like LaTeX output %%%%%%%%%%% icon-name LeftMarginIcon - %%%%%%%%%%%% % Given the name of an icon, executes the icon in the left margin. /LeftMarginIcon { gsave 20 ypos 72 sub translate cvx exec grestore } bind def %% REQUIRED DEFINITIONS START HERE %% % Makes a path that desribes the page /PageShape { 0 0 moveto 8.5 in 0 lineto 8.5 in 11 in lineto 0 11 in lineto closepath currentflat 8 mul } bind def % Anything to do when a new page is started /StartPage { } bind def % Anything to do when a new page is ended /EndPage { pagenumber 4 string cvs dup stringwidth pop 8.5 in formatdict /rightmargin get sub formatdict /leftmargin get sub exch sub 2 div formatdict /leftmargin get add formatdict /bottommargin get 2 div moveto show /pagenumber pagenumber 1 add def showpage % A new page here really does mean start a new page. } bind def %% INITIALIZATION TO DO WHEN FILE IS LOADED %% % Page-specific defaults that describe the page. /InitPage { /evenodd true def % if true use even-odd rule; false means winding rule /fillout false def % true means fill outside shape. false is inside. /in { 72 mul } def /BM 0 in def % Absolute Bottom Margin for page /TM 11 in def % Absolute Top Margin for page /LM 0 in def % Absolute Left Margin for page /RM 8.5 in def % Absolute Right Margin for page userdict /pagenumber known not % Initialize pagenumber if not done already { userdict begin /pagenumber 1 def end} if } bind def InitPage % Just loading this file initializes the page. formatdict begin STARTPAGE [ 1 false ] NewFont % /cm10rm (An) NW (Analysis) NW (of) NW (Simultaneous) NW (Self-evaluation) NW NEWPARA (of) NW (a) NW (Thesis) NW (by) NW (example.) NW NEWPARA /justify 102 def NEWPARA [ 1 false ] NewFont % /cm10rm (One) NW (of) NW (the) NW (more) NW (difficult) NW (things) NW (for) NW (students) NW (to) NW (do) NW (in) NW (their) NW (last) NW (semester) NW (of) NW (college) NW (is) NW (to) NW (prepare) NW (a) NW (written) NW (thesis.) NW (Such) NW (theses) NW (need) NW (ideas) NW (which) NW (can) NW (come) NW (without) NW (too) NW (much) NW (consideration,) NW (but) NW (which) NW (need) NW (compilation) NW (into) NW (a) NW (presentable) NW (form.) NW (Therein) NW (lies) NW (the) NW (difficulty) NW (of) NW (writing) NW (a) NW (thesis.) NW (The) NW (writer) NW (must) NW (present) NW (his) NW (or) NW (her) NW (ideas) NW (by) NW (forming) NW (them) NW (in) NW (his) NW (or) NW (her) NW (mind,) NW (revising) NW (them) NW (and) NW (self-evaluating) NW (them,) NW (and) NW (then) NW (putting) NW (them) NW (on) NW (paper.) NW (It) NW (is) NW (this) NW (constant) NW (self-evaluation) NW (which) NW (makes) NW (thesis) NW (writing) NW (a) NW (hated) NW (activity.) NW NEWPARA (As) NW (an) NW (example,) NW (the) NW (last) NW (paragraph) NW (was) NW (written) NW (in) NW (a) NW (fairly) NW (poor) NW (style.) NW (Although) NW (it) NW (conveyed) NW (the) NW (basic) NW (ideas) NW (of) NW (the) NW (self-evaluating) NW (thesis,) NW (it) NW (did) NW (not) NW (do) NW (so) NW (in) NW (a) NW (constructive) NW (manner.) NW (In) NW (two) NW (of) NW (the) NW (sentences) NW (the) NW (same) NW (concept) NW (is) NW (stated:) NW (why) NW (a) NW (thesis) NW (is) NW (difficult.) NW (The) NW (third) NW (sentence) NW (asserts) NW (that) NW (the) NW (compilation) NW (is) NW (\\what) NW (it) NW (is") NW (that) NW (makes) NW (a) NW (thesis) NW (difficult,) NW (and) NW (the) NW (fourth) NW (says) NW (it) NW (is) NW (rather) NW (constant) NW (self-evaluation.) NW (Clearly) NW (the) NW (writer) NW (has) NW (an) NW (idea) NW (what) NW (he) NW (is) NW (writing) NW (about,) NW (but) NW (the) NW (ideas) NW (become) NW (confused) NW (when) NW (put) NW (on) NW (paper.) NW NEWPARA (In) NW (the) NW (second) NW (paragraph) NW (of) NW (this) NW (thesis,) NW (the) NW (writer) NW (leaves) NW (his) NW (topic) NW (of) NW (the) NW (troubles) NW (of) NW (theses) NW (and) NW (presents) NW (an) NW (example) NW (of) NW (self-evaluation.) NW (There) NW (seems) NW (to) NW (be) NW (a) NW (discontinuity) NW (as) NW (in) NW (one) NW (place) NW (the) NW (author) NW (is) NW (building) NW (a) NW (case) NW (for) NW (self-evaluation) NW (as) NW (the) NW (difficult) NW (part) NW (of) NW (thesis) NW (writing) NW (and) NW (then) NW (switches) NW (to) NW (an) NW (example) NW (of) NW (such) NW (self-evaluation) NW (without) NW (attempting) NW (to) NW (tie) NW (it) NW (in) NW (to) NW (the) NW (relevant) NW (subject.) NW (He) NW (needs) NW (to) NW (make) NW (a) NW (statement) NW (of) NW (how) NW (the) NW (example) NW (proves) NW (his) NW (argument.) NW (Fortunately) NW (he) NW (does) NW (so) NW (in) NW (the) NW (third) NW (paragraph) NW (by) NW (saying) NW (\\This) NW (is) NW (an) NW (example) NW (of) NW (self-evaluation.) NW (Clearly) NW (it) NW (is) NW (confusing,) NW (and) NW (therefore) NW (a) NW (real) NW (mental) NW (challenge) NW (when) NW (the) NW (thesis) NW (is) NW (being) NW (written.") NW (This) NW (is) NW (an) NW (example) NW (of) NW (self-evaluation.) NW (Clearly) NW (it) NW (is) NW (confusing,) NW (and) NW (therefore) NW (a) NW (real) NW (mental) NW (challenge) NW (when) NW (the) NW (thesis) NW (is) NW (being) NW (written.) NW NEWPARA (The) NW (author) NW (goes) NW (on) NW (to) NW (discuss) NW (his) NW (thesis) NW (in) NW (general.) NW (He) NW (states) NW (that) NW (although) NW (a) NW (thesis) NW (must) NW (be) NW (of) NW (a) NW (certain) NW (quality,) NW (the) NW (student) NW (may) NW (choose) NW (to) NW (simply) NW (write) NW (without) NW (quality,) NW (and) NW (then) NW (later) NW (revise) NW (the) NW (script.) NW (Self-evaluation) NW (need) NW (not) NW (be) NW (simultaneous.) NW (In) NW (saying) NW (this,) NW (the) NW (author) NW (takes) NW (a) NW (most) NW (roundabout) NW (manner.) NW (He) NW (uses) NW (such) NW (words) NW (as) NW (\\roundabout") NW (and) NW (\\liveliness") NW (to) NW (give) NW (his) NW (sentences) NW (liveliness,) NW (words) NW (which) NW (are) NW (inappropriate) NW (in) NW (a) NW (formal) NW (thesis.) NW (For) NW (instance,) NW (in) NW (the) NW (last) NW (paragraph) NW (the) NW (author) NW (uses) NW (the) NW (trite) NW (clause) NW (\\putting) NW (his) NW (foot) NW (in) NW (his) NW (mouth",) NW (and) NW (in) NW (his) NW (analysis) NW (of) NW (that) NW (statement) NW (mistakenly) NW (describes) NW (it) NW (as) NW (a) NW (\\clause".) NW (Towards) NW (the) NW (end) NW (of) NW (his) NW (analysis) NW (he) NW (fails) NW (to) NW (comment) NW (on) NW (the) NW (concluding) NW (paragraph,) NW (merely) NW (tossing) NW (it) NW (off) NW (as) NW (\\straightforward".) NW (The) NW (entire) NW (thesis) NW (seems) NW (to) NW (be) NW (written) NW (on) NW (a) NW (downhill) NW (slope:) NW (the) NW (author) NW (begins) NW (by) NW (analyzing) NW (sentence) NW (by) NW (sentence,) NW (then) NW (continues) NW (analyzing) NW (the) NW (thesis) NW (paragraph) NW (by) NW (paragraph,) NW (and) NW (at) NW (one) NW (point) NW (even) NW (simply) NW (generalizing) NW (the) NW (entire) NW (thesis) NW (as) NW (\\written) NW (on) NW (a) NW (downhill) NW (slope".) NW (There) NW (are) NW (even) NW (some) NW (times) NW (when) NW (the) NW (author) NW (seems) NW (to) NW (make) NW (references) NW (to) NW (sections) NW (of) NW (the) NW (thesis) NW (without) NW (stating) NW (where) NW (those) NW (places) NW (are.) NW (These) NW (mistakes) NW (are) NW (an) NW (intentional) NW (attempt) NW (to) NW (show) NW (how) NW (simultaneous) NW (self-evaluation) NW (is) NW (worth) NW (the) NW (confusion) NW (it) NW (causes.) NW (True,) NW (a) NW (student) NW (can) NW (evade) NW (the) NW (hardship) NW (of) NW (thesis) NW (writing) NW (by) NW (first) NW (making) NW (a) NW (rough) NW (draft) NW (of) NW (low) NW (quality,) NW (and) NW (then) NW (later) NW (evaluating) NW (and) NW (finishing) NW (it,) NW (but) NW (in) NW (the) NW (second) NW (pass) NW (over) NW (the) NW (student) NW (may) NW (not) NW (spot) NW (a) NW (mistake.) NW (Simultaneous) NW (self-evaluation) NW (guarantees) NW (good) NW (quality) NW (because) NW (the) NW (author's) NW (mind) NW (is) NW (currently) NW (engaged) NW (in) NW (creation) NW (-) NW (a) NW (later) NW (reading) NW (may) NW (not) NW (put) NW (the) NW (writer) NW (in) NW (the) NW (proper) NW (state) NW (of) NW (mind) NW (to) NW (find) NW (flaws,) NW (for) NW (instance) NW (the) NW (words) NW (\\criticizing") NW (and) NW (\\misspelled") NW (are) NW (spelled) NW (incorrectly,) NW (the) NW (quote) NW (\\clearly) NW (it) NW (is) NW (confusing") NW (is) NW (used) NW (three) NW (times,) NW (and) NW (at) NW (two) NW (points) NW (the) NW (author) NW (avoids) NW (saying) NW (a) NW (certain) NW (word,) NW (using) NW (instead) NW (\\spelled) NW (incorrectly") NW (and) NW (\\a) NW (certain) NW (word") NW (because) NW (he) NW (is) NW (too) NW (lazy) NW (to) NW (look) NW (missspelled) NW (up.) NW NEWPARA (This) NW (sentence,) NW (for) NW (instance,) NW (despite) NW (its) NW (being) NW (intentional,) NW (makes) NW (absolutely) NW (no) NW (sense) NW (at) NW (all.) NW (The) NW (author) NW (for) NW (unknown) NW (reasons) NW (has) NW (chosen) NW (to) NW (begin) NW (one) NW (of) NW (his) NW (paragraphs) NW (with) NW (a) NW (meaningless) NW (sentence,) NW (and) NW (then) NW (attempt) NW (to) NW (extract) NW (significance.) NW (He) NW (uses) NW (a) NW (quote) NW (from) NW (an) NW (earlier) NW (section) NW (of) NW (the) NW (work) NW (which) NW (was) NW (quoted) NW (as) NW (being) NW (in) NW (\\fairly) NW (poor) NW (style",) NW (and) NW (then) NW (for) NW (unknown) NW (reasons) NW (admits) NW (his) NW (ignorance) NW (of) NW (the) NW (motivating) NW (forces) NW (behind) NW (the) NW (new) NW (topic.) NW (Not) NW (being) NW (satisfied) NW (with) NW (his) NW (choice) NW (of) NW (words,) NW (the) NW (author) NW (then) NW (simply) NW (gives) NW (up) NW (and) NW (quotes) NW (himself) NW (\(in) NW (better) NW (words) NW (than) NW (I) NW (could) NW (use\)) NW (\\clearly) NW (it) NW (is) NW (confusing".) NW (Note) NW (that) NW (as) NW (some) NW (sort) NW (of) NW (afterthought) NW (the) NW (author) NW (asks) NW (the) NW (reader) NW (to) NW (pay) NW (attention) NW (to) NW (some) NW (insignificant) NW (trifle.) NW NEWPARA (The) NW (beginning) NW (of) NW (the) NW (thesis) NW (seems) NW (to) NW (be) NW (a) NW (list) NW (of) NW (examples) NW (that) NW (the) NW (author) NW (makes) NW (as) NW (a) NW (base) NW (to) NW (work) NW (with) NW (to) NW (form) NW (his) NW (speculations.) NW (In) NW (fact,) NW (he) NW (states) NW (this) NW (in) NW (the) NW (middle) NW (of) NW (the) NW (thesis) NW (as) NW (he) NW (is) NW (about) NW (to) NW (move) NW (on,) NW (and) NW (then) NW (suddenly) NW (decides) NW (that) NW (the) NW (portions) NW (of) NW (the) NW (thesis) NW (not) NW (yet) NW (reviewed.) NW (are) NW (irrelevant,) NW (and) NW (begins) NW (his) NW (conclusion.) NW (The) NW (closing) NW (of) NW (the) NW (thesis) NW (is) NW (straightforward) NW (and) NW (not) NW (particularly) NW (related) NW (to) NW (the) NW (subject) NW (matter,) NW (so) NW (it) NW (will) NW (not) NW (be) NW (discussed) NW (here.) NW NEWPARA (In) NW (all,) NW (the) NW (process) NW (of) NW (self-evaluation,) NW (though) NW (producing) NW (the) NW (higher) NW (quality) NW (work,) NW (has) NW (significant) NW (drawbacks.) NW (At) NW (times) NW (it) NW (can) NW (be) NW (so) NW (confusing) NW (as) NW (to) NW (scare) NW (the) NW (writer) NW (off,) NW (which) NW (is) NW (something) NW (I) NW (won't) NW (get) NW (into) NW (now.) NW (For) NW (instance,) NW (in) NW (this) NW (work) NW (the) NW (author) NW (has) NW (become) NW (so) NW (confused) NW (that) NW (at) NW (the) NW (end) NW (the) NW (conclusion,) NW (as) NW (he) NW (himself) NW (admits,) NW (is) NW (\\not) NW (particularly) NW (related) NW (to) NW (the) NW (subject) NW (matter.") NW (He) NW (seems) NW (to) NW (feel) NW (that) NW (the) NW (process) NW (of) NW (self-evaluation,) NW (while) NW (it) NW (has) NW (allowed) NW (him) NW (to) NW (complete) NW (an) NW (otherwise) NW (poorer) NW (thesis) NW (in) NW (good) NW (form,) NW (has) NW (destroyed) NW (his) NW (paths) NW (of) NW (thought) NW (such) NW (that) NW (he) NW (merely) NW (ends) NW (the) NW (thesis) NW (in) NW (completely) NW (unacceptable) NW (style,) NW (saying) NW (\\Not) NW (that) NW (I) NW (would) NW (ever) NW (do) NW (this.) NW (The) NW (End.") NW (By) NW (doing) NW (this) NW (he) NW (shows) NW (that) NW (what) NW (he) NW (originally) NW (thought) NW (was) NW (a) NW (good) NW (idea) NW (may) NW (have) NW (turned) NW (out) NW (to) NW (instead) NW (be) NW (something) NW (he) NW (finds) NW (himself) NW (criticizing,) NW (and) NW (towards) NW (the) NW (end) NW (he) NW (seems) NW (to) NW (come) NW (to) NW (a) NW (decision) NW (that) NW (he) NW (is) NW (simply) NW (putting) NW (his) NW (foot) NW (in) NW (his) NW (mouth) NW (and) NW (had) NW (better) NW (stop.) NW (Not) NW (that) NW (I) NW (would) NW (ever) NW (do) NW (this.) NW (The) NW (End.) NW ENDPAGE %%Trailer end userdict /end-hook known{end-hook}if %%EOF