[tex-k] dvips: 'fun' with translation combined with scaling/rotation
Tomas Rokicki
rokicki at gmail.com
Mon Mar 5 08:32:40 CET 2018
I don’t think dvips supports what you are trying to do.
I’m also not sure what you are trying to accomplish. Can you clarify?
-tom
On Sun, Mar 4, 2018 at 11:14 PM Joseph Wright <
joseph.wright at morningstar2.co.uk> wrote:
> On 04/03/2018 15:39, Joseph Wright wrote:
> > On 04/03/2018 15:25, Joseph Wright wrote:
> >> Hello all,
> >>
> >> I've run into an oddity with dvips: this might well be 'user error'
> >> but I'd appreciate any insight.
> >>
> >> What I'm trying to do is set up box transformations inside a 'drawing'
> >> environment. The aim is to avoid using a completely raw special (ps::
> >> <matrix> concat) as that is opaque to the driver and means it looses
> >> hyperlinks and the like. I can get it all working *provided* I don't
> >> have any translation applied.
> >>
> >> In the following example, you only get the result I was expecting if
> >> you set \shiftmatrixtrue and \rotateandscalefalse, i.e. do everything
> >> in one matrix operation. If you split the shift of the box out then an
> >> 'extra' displacement pops up. It seems that the transformation (either
> >> rotation/scaling or matrix-based) is applied to the kern which is
> >> *before* the operations. You see the same effect if you add a y-shift
> >> (moving the box up/down), and with a pure scaling (so no rotation at
> >> all).
> >>
> >> The same general approach works as-expected with (x)dvipdfmx, where
> >> again we have scaling/rotation but no driver-tracked transformation
> >> (cf. pdfTeX), so I don't think I have the kern in the obviously-wrong
> >> place.
> >>
> >> I suspect I'm missing a save/restore or similar: any ideas?
> >>
> >> Joseph
> >>
> >> \newif\ifshiftmatrix
> >> \shiftmatrixtrue
> >> \newif\ifrotateandscale
> >> \rotateandscalefalse
> >>
> >> \setbox0=\hbox{%
> >> \special{ps::[begin]}% Line up with TeX current point
> >> \special{ps::/ox currentpoint /oy exch def def}% Save the origin
> >> \special{ps::@beginspecial}% Get scale and axis 'into line'
> >> \special{ps::0 0 moveto}% (0cm,0cm)
> >> \special{ps::85.04045 0 lineto}% (3cm,0cm)
> >> \special{ps::28.3468 0 moveto}% (1cm,0cm}
> >> \special{ps::28.3468 56.69363 lineto}% (1cm,2cm)
> >> \special{ps::stroke}%
> >> \special{ps::newpath}%
> >> \hbox to 0pt{%
> >> \ifshiftmatrix\else\kern 1cm \fi
> >> \special{ps::save}%
> >> \ifrotateandscale
> >> % Singular value decomposition of [1 2 1 1]
> >> \special{ps::58.28253 rotate}%
> >> \special{ps::2.61803 -0.38197 scale}%
> >> \special{ps::-31.71747 rotate}%
> >> \else
> >> \ifshiftmatrix
> >> \special{ps::[1 2 1 1 28.3468 0] concat}%
> >> \else
> >> \special{ps::[1 2 1 1 0 0] concat}%
> >> \fi
> >> \fi
> >> % The next three lines get us 'back' to the TeX origin
> >> \special{ps::72 Resolution div 72 VResolution div neg scale}%
> >> \special{ps::magscale {1 DVImag div dup scale} if}%
> >> \special{ps::ox neg oy neg translate}%
> >> \special{ps::[end]}%
> >> \hbox to 0pt{Hello\hss}%
> >> \special{ps::[begin]}%
> >> \special{ps::restore}%
> >> \hss
> >> }%
> >> \special{ps::@endspecial}% Tidy up
> >> \special{ps::[end]}%
> >> }%
> >> \wd0=3cm %
> >> \ht0=2cm %
> >> \box0 %
> >>
> >> world
> >>
> >> \bye
> >
> > Oh, I should add that the "world" at the end deals with a second oddity:
> > depending on the exact set up of scaling/rotation, something goes odd
> > and the entire page is landscape.
> >
> > Joseph
>
> It occurs to me that the dvipdfmx comparison is likely misleading: in
> the latter, rotation and scaling is covered by driver-specific specials,
> but for dvips only 'raw' PostScipt is available.
>
> However, the core question remains: what is it that leads the
> transformation to apply to kerns/box shifts *before* it is inserted?
> (And indeed, what exactly determines the scope of the transformation.)
> If the answer is 'it just is', I can adjust by working out the requested
> shifts allowing for the subsequent transformation. But I'd like to be
> sure it's entirely predictable, at least.
>
> Joseph
>
--
-- http://cube20.org/ -- http://golly.sf.net/ --
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://tug.org/pipermail/tex-k/attachments/20180305/fc46bea0/attachment-0001.html>
More information about the tex-k
mailing list