(Note carefully the blankspace immediately after the word"@mono[outln]".)
(2) In the file POSTSCR.HDR, immediately before the line reading"@mono[initgraphics]", insert the lines:
@begin(mono)
/outln {gsave true charpath 12.5 setlinewidth
stroke grestore} bind def
@end(mono)
Thereafter, to print a symbol or a word in outline, simply embedthat symbol or word as the argument of the @trc() macro.
@bar(1 point)
Technical notes:
The @trc() macro passes its argument only partially processedover to a PostScript macro, the @mono(outln) macro. Inparticular, if there are any typeface control instructions, sizechanges, spacing instructions (e.g. "@mono[@@hsp(0.1 em)]"), etc.embedded in the original argument, they will not be processed(indeed they may even end up being printed in outline!). So ifyou want to do more than simply print a string of characters inthe current font at the current size, you will have to make thechanges outside of the @trc() macro. Suppose you want to tracethe diamond (char 165@-(octal)├) in the Dingbats font. You wouldhave to place the font name outside of the @trc() macro, e.g.you'd type"@mono[^OFONTdingbats^N@@trace<@@char(165o)>^OENDF^N]". (Notethat the @mono[@@char(@_)] macro works correctly inside the@trc() macro.)
The same restriction applies to full justification. To justify aline left and right, Sprint relies on features in the PostScriptinterpreter. If you use a string of words as the argument to@trc(), the blankspaces between them will not be expanded in afully justified paragraph. Again, the trick is to have Sprint dothe work outside of the @trc() macro. E.g. Suppose you wanted"walled city" to print in outline within a fully justifiedparagraph:@nohinge
@begin(Text)
Correct: @^@mono[@@trace(walled) @@trace(city)]
Incorrect: @\@mono[@@trace(walled city)]
@end(Text)
Specifically, the blankspace would have to occur between twoinvocations of the macro, not as a part of a two-word argument. (You probably would be wise, too, to turn off wordspacing, i.e.use "@mono{@@style[Wordspacing 1000]}". Of course, if you havefull-justification turned off, i.e. are printing left-justified[as in this very paragraph], you can use strings of words asarguments to the @trc() macro: the blankspaces will printalright, they just won't be expanded. But you don't wantexpansion in a left-justified paragraph.)
Having the means to create an outline of any font allows one tosupplement the Symbols typeface. Mathematicians and logicianshave long lamented the lack of a hollow box in the Symbol set. It is easy now to create a hollow box. One need only trace thesolid box in the Dingbats typeface. To scale it to the correctsize, I use these instructions:
To print the hollow box, I then type "@mono[||]". If you likeyour hollow boxes larger, change the factor, "0.6", in thedefinition of "reduce" to, e.g., "0.7".
The @trc() macro works in different point sizes. Just be sure tochange the point size outside of the macro, e.g. "@mono[^OSIZE 14POINTS^N@@trace(@_)^OENDS^N]".
The thickness of the tracing line on outline typefaces iscontrolled by the numerical parameter preceding "setlinewidth" inthe PostScript definition of "@mono[/outln]". To make thetracing line thicker increase "@mono[12.5 setlinewidth]" to,e.g., "@mono[15 setlinewidth]".