.\" pspic.tmac .\" .\" Define the PSPIC macro. .\" .\" When used other than with -Tps, -Tdvi, -Thtml, or -Txhtml it draws a box .\" around where the picture would go. .\" .\" Usage: .\" .\" .PSPIC [-L|-R|-C|-I ] [ []] . .do if d PSPIC .nx . .nr _C \n(.C .cp 0 . .de PSPIC . nr ps-offset-mode 0 . \" left-aligned? . ie '\\$1'-L' \{\ . nr ps-offset-mode 1 . shift . HTML-DO-IMAGE \\$1 l . \} . el \{\ . \" right-aligned? . ie '\\$1'-R' \{\ . nr ps-offset-mode 2 . shift . HTML-DO-IMAGE \\$1 r . \} . el \{\ . \" indented? . ie '\\$1'-I' \{\ . nr ps-offset-mode 3 . nr ps-offset (m;\\$2) . shift 2 . HTML-DO-IMAGE \\$1 i . \} . el \{\ . \" centered is the default . if '\\$1'-C' \ . shift . HTML-DO-IMAGE \\$1 c . \} . \} . \} . . br . . \" get bounding box . psbb \\$1 . if (\\n[llx] : \\n[lly] : \\n[urx] : \\n[ury]) \{\ . nr ps-wid (\\n[urx] - \\n[llx]) . nr ps-ht (\\n[ury] - \\n[lly]) . if (\\n[ps-wid] < 0) \ . nr ps-wid (-\\n[ps-wid]) . if (\\n[ps-ht] < 0) \ . nr ps-ht (-\\n[ps-ht]) . . \" if we have a parameter, use it as the final . \" image width; otherwise we use the image's natural width . \" or the current line length, whatever is smaller . ie (\\n[.$] >= 2) \ . nr ps-deswid (i;\\$2) . el \ . nr ps-deswid ((\\n[.l] - \\n[.i]) parameter, use it as the final . \" image height in case it is smaller than the height . \" value we have just computed . if ((\\n[.$] >= 3) & (\\n[ps-desht] > (i;0\\$3))) \{\ . nr ps-desht (i;\\$3) . \" recompute the final image width since we always . \" keep the correct image aspect . nr ps-deswid (\\n[ps-desht] * 1000 + (\\n[ps-ht] / 2) \ / \\n[ps-ht] * \\n[ps-wid] \ + 500 / 1000) . \} . . \" reserve vertical space for image . ne (\\n[ps-desht]u + 1v) . . \" compute image offset w.r.t. the current left margin . if (\\n[ps-offset-mode] == 0) \ . nr ps-offset (\\n[.l] - \\n[.i] - \\n[ps-deswid] / 2) . if (\\n[ps-offset-mode] == 1) \ . nr ps-offset 0 . if (\\n[ps-offset-mode] == 2) \ . nr ps-offset (\\n[.l] - \\n[.i] - \\n[ps-deswid]) . . ie '\*[.T]'dvi' \{\ . \" prepare values for \special{psfile=...} as needed by dvips . ie (\\n[ps-wid]p == \\n[ps-deswid]) \{\ . ds ps-scale \" empty . ds ps-hoffset hoffset=-\\n[llx] . ds ps-voffset voffset=-\\n[lly] . \} . el \{\ . nr ps-scale (\\n[ps-deswid] * 100 / \\n[ps-wid]p) . nr ps-hoffset (-\\n[llx] * \\n[ps-scale] / 100) . nr ps-voffset (-\\n[lly] * \\n[ps-scale] / 100) . ds ps-scale hscale=\\n[ps-scale] vscale=\\n[ps-scale] . ds ps-hoffset hoffset=\\n[ps-hoffset] . ds ps-voffset voffset=\\n[ps-voffset] . \} . \h'\\n[ps-offset]u'\ \v'\\n[ps-desht]u'\ \X'psfile=\\$1 \\*[ps-hoffset] \\*[ps-voffset] \\*[ps-scale]' . \} . el \{\ . ie '\*[.T]'ps' \{\ . \" prepare values for grops; the `ps-invis' and `ps-endinvis' escapes . \" are for groff's -X switch to provide a PS preview with xditview: . \" it uses -Tps for formatting but xditview can't handle EPS files, . \" thus alternative code is enclosed between those two escapes . ds ps-invis \X'ps: invis' . ds ps-endinvis \X'ps: endinvis' . ds ps-import \X'ps: import \E$1 \En[llx] \En[lly] \En[urx] \En[ury] \ \En[ps-deswid] \E*[ps-desht]' . \} . el \{\ . ds ps-invis . ds ps-endinvis . ds ps-import . \} . . ie (\\n[.$] >= 3) \ . ds ps-desht \\n[ps-desht] . el \ . ds ps-desht \" empty . \h'\\n[ps-offset]u'\ \\*[ps-invis]\ \# horizontally, the rectangle is slightly smaller than the image \# to compensate the line thickness (especially needed for TTY devices) \Z'\D'p 0 \\n[ps-desht]u \ (\\n[ps-deswid]u - \\n[.H]u) 0 \ 0 -\\n[ps-desht]u''\ \# for convenience we also display the image file name (centered vertically); \Z'\v'((\\n[ps-desht]u / 2u) \ + (\w'\\$1'u * 0) \ + ((\\n[rst]u + \\n[rsb]u) / 2u))'\h'1m'\\$1'\ \\*[ps-endinvis]\ \v'\\n[ps-desht]u'\ \\*[ps-import] . \} . . br . sp \\n[ps-desht]u . \} . HTML-IMAGE-END .. . .cp \n[_C] . .\" end of pspic.tmac