tomwest@utgpu.UUCP (10/27/87)
I am adapting our word processor to a postscript engine. However, I am not sure how to handle underlines. Is there any easy way to know where or how to underline? We use a mono-spaced font (for the most part). Can one just draw a horizontal line of the appropriate length with the same vertical position as the characters? i.e. 100 100 moveto (Hello) show ! Using Courier 10 cpi 100 100 moveto 136 100 lineto stroke As well, if we decide to get sophisticated, we would want to use non-mono fonts. Is there anywhere that we can get the length of characters in the standard fonts (Times, Helvetica and Symbols)? Thanks in advance. -- Tom West BITNET: tomwest@utorgpu.bitnet, tomwest@gpu.utcs.utoronto Internet: tomwest@gpu.utcs.toronto.edu UUCP: tomwest@utgpu utzoo, yetti, harpo, mnetor \ cbosgd, deepthot, utoronto - !utgpu!tomwest ihnp4, lsuc, sfmin, vnr-vpa /
zaphod@deepthot.UUCP (10/28/87)
In article <1987Oct27.134058.23182@gpu.utcs.toronto.edu> tomwest@gpu.utcs.toronto.edu (Tom West) writes: > > I am adapting our word processor to a postscript engine. However, I >am not sure how to handle underlines. Is there any easy way to know where >or how to underline? yes > We use a mono-spaced font (for the most part). Can >one just draw a horizontal line of the appropriate length with the same >vertical position as the characters? no, the line will "melt" into the letters > > As well, if we decide to get sophisticated, we would want to use non-mono >fonts. Is there anywhere that we can get the length of characters in the >standard fonts (Times, Helvetica and Symbols)? again, yes the stringwidth operator gives you the x and y offsets if the string on the top of the stack were printed. the y offset (for non-japanese letters) is usually 0 and therefore popped this code will perform the trick. /undershow { currentlinewidth exch dup show currentpoint 3 2 roll stringwidth exch neg exch 0 -2 rmoveto rlineto 0.5 setlinewidth stroke moveto setlinewidth } def (string) undershow the code works as follows. currentlinewidth is stored on the stack (string) is pushed onto the stack and undershow does the following: top of stack is duplicated and shown. the new currentpoint is saved, the roll tucks the currentpoint under the string-in-question. stringwidth gives us x and y displacements, exch to access the x value negate the x value as we will be drawing BACK under the already shown string exch to switch back the x and y values. move down 2 dots. I have found this to be a good amount to avoid the line from melting into the letters. now rlineto based on the x and y still on the stack. the 0.5 linewidth is arbitrary, again, i have found it to be nice. stroke, reset the linewidth and moveto the stored currentpoint. THis is the cleanest way. a gsave/grestore combination could be used to save currentpoint, but why store the entire graphics state for only two values? > > Thanks in advance. no problem, call me at 1-519-663-3787, i actually enjoy typesetting in raw postscript and so have tackled many of the commen problems. I also enjoy fixing postscript on third party wordprocessors (like micro soft word) -- but i digress > -- humbly yours, Lance Bailey Univ. Western Ontario | Robart's Research Institute Dept. of Computer Science | Clinical Trials Unit Graduate Studies | PO Box 5015 London, Canada | London, Canada N6A 5B7 | N6A 5K8 decvax!{utcs|utzoo|watmath}!deepthot!zaphod -or- zaphod@deepthot.uucp
ted@mitre-bedford.ARPA (Edward J. Ede) (10/30/87)
In article <1987Oct27.134058.23182@gpu.utcs.toronto.edu> tomwest@gpu.utcs.toronto.edu (Tom West) writes: > I am adapting our word processor to a postscript engine. However, I >am not sure how to handle underlines. Is there any easy way to know where >or how to underline? We use a mono-spaced font (for the most part). Can >one just draw a horizontal line of the appropriate length with the same >vertical position as the characters? > No. But you can get the from the AFM files provided by Adobe for you driver or in Adobe's font dictionary for a postscript procedure. In Adobe's font dictionaries, there is a dictionary called 'FontInfo'. FontInfo contains about eight items, including 'UnderlinePosition' and 'UnderlineThickness'. These are integer containing the number of units from the baseline to draw a line (the number is negative) and its width. These numbers are in the character system coordinates (1000 units to a point). So divide the number by 1000 and multiply by the current point size. See the Red book, page 93 for more info. > As well, if we decide to get sophisticated, we would want to use non-mono >fonts. Is there anywhere that we can get the length of characters in the >standard fonts (Times, Helvetica and Symbols)? Again, you can use the AFM files available from Abobe or the 'stringwidth' operator. Ted Ede -- ted@mitre-bedford.arpa -- The MITRE Corporation -- Burlington Road | -- DDD: (617) 271-2545 -- Bedford MA, 10730 -- Mail Stop B015 -- | | - this line intentionally left blank - | +---------------------------------------------------------------------------+