Hi Tadziu!

At 2023-06-13T17:11:50+0200, Tadziu Hoffmann wrote:
> > I think the likeliest site to fix PDF output is the `pdf:SS`
> > macro in pdf.tmac.
> 
> You are right.
> 
> This works:
> 
>   .de pdf:SS
>   .char \\$1 \s'\\\\n[.ps]u*89u/100u'\S'15'\\$1\S'0'\s'0'
>   ..
>   .pdf:SS \[*a]
>   .pdf:SS \[*b]

Good show!  The extra escaping on the interpolation of the .ps register
is a subtle--and necessary--point.  The source calls the RHS of
character definitions "macros" and they truly are.

I don't think we're _quite_ there, though; we need to contrive italic
corrections too, which seems like it would be harder without a real
font,[1] since they vary by glyph.  See the attachments.

Another issue I _was_ worried about is that using \s clobbers the
"previous type size" bit of internal state.  But a quick experiment
seems to suggest that it's not a problem--or I didn't manage to provoke
it.  We've seen people get tripped up using \f[] or `.ft P` after a
macro call, for example, not realizing that the macro they just called
itself performed some font changes.

This situation is altogether more subtle because a character _is_ a
macro definition.  Users are not going to foresee that.  But, if no one
else can make this scenario fail to produce the right type size, then
I'm happy.

Regards,
Branden

[1] Well, maybe not.  We can hand roll 24 italic corrections and pass
    them as second arguments to this `pdf:SS` macro.  It can
    interpolate them as \h'' horizontal motions after interpolating
    `\$1`.  Might be a good idea to express the corrections in ems so
    they'll scale on their own.

Attachment: signature.asc
Description: PGP signature

Reply via email to