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.
signature.asc
Description: PGP signature
