Different behavior of \clf_lastypos vs \clf_lastxpos
Hi, I am trying to debug an unexpected behavior with tikz reported on tex.se: https://tex.stackexchange.com/q/696136/323 The attached file shows what is going wrong (without using tikz). For some reason, there is an extra \relax written to file after `\the\numexp\clf_lastypos\relax` (there is no such relax after `\the\numexpr\clf_lastxpos\relax`). The test.pgf file is: \macro {A}{23930350}{43358454.0\relax } \macro {B}{39564274.0\relax }{14083538} Any ideas on why is the extra \relax written after lastypos and how to fix that? Aditya
Hi Aditya,
For some reason, there is an extra \relax written to file after `\the\numexp\clf_lastypos\relax` (there is no such relax after `\the\numexpr\clf_lastxpos\relax`). The test.pgf file is:
\macro {A}{23930350}{43358454.0\relax } \macro {B}{39564274.0\relax }{14083538}
Any ideas on why is the extra \relax written after lastypos and how to fix that?
\numexpr stops at the first non-expandable or non-digit token. If \clf_last[xy]pos expands to an integer, then that's the \relax, but if it expands to a float, then that's the decimal point. With Lua, adding, subtracting, or multiplying two integers will give you an integer, but dividing gives you a float. So somewhere in the backend, the vertical position is probably divided but the horizontal position is only added or subtracted. To fix this, change lines 2344--2345 of anch-pos.lmt from implement { name = "lastxpos", actions = function() context(jobpositions.lastx) end } implement { name = "lastypos", actions = function() context(jobpositions.lasty) end } to implement { name = "lastxpos", actions = function() context("%.0f", jobpositions.lastx) end } implement { name = "lastypos", actions = function() context("%.0f", jobpositions.lasty) end } Thanks, -- Max
On 9/17/2023 9:04 AM, Max Chernoff wrote:
Hi Aditya,
For some reason, there is an extra \relax written to file after `\the\numexp\clf_lastypos\relax` (there is no such relax after `\the\numexpr\clf_lastxpos\relax`). The test.pgf file is:
\macro {A}{23930350}{43358454.0\relax } \macro {B}{39564274.0\relax }{14083538}
Any ideas on why is the extra \relax written after lastypos and how to fix that?
\numexpr stops at the first non-expandable or non-digit token. If \clf_last[xy]pos expands to an integer, then that's the \relax, but if it expands to a float, then that's the decimal point.
With Lua, adding, subtracting, or multiplying two integers will give you an integer, but dividing gives you a float. So somewhere in the backend, the vertical position is probably divided but the horizontal position is only added or subtracted.
To fix this, change lines 2344--2345 of anch-pos.lmt from
implement { name = "lastxpos", actions = function() context(jobpositions.lastx) end } implement { name = "lastypos", actions = function() context(jobpositions.lasty) end }
to
implement { name = "lastxpos", actions = function() context("%.0f", jobpositions.lastx) end } implement { name = "lastypos", actions = function() context("%.0f", jobpositions.lasty) end }
it's better to do some rounding earlier on Hans ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
On 9/17/2023 3:26 AM, Aditya Mahajan wrote:
Hi,
I am trying to debug an unexpected behavior with tikz reported on tex.se: https://tex.stackexchange.com/q/696136/323
The attached file shows what is going wrong (without using tikz). For some reason, there is an extra \relax written to file after `\the\numexp\clf_lastypos\relax` (there is no such relax after `\the\numexpr\clf_lastxpos\relax`). The test.pgf file is:
\macro {A}{23930350}{43358454.0\relax } \macro {B}{39564274.0\relax }{14083538}
Any ideas on why is the extra \relax written after lastypos and how to fix that? i'll round the values
wrt relaxes, these can creep in as side effect of tex pushing back looked-ahead and not used tokens (there are wasy around this but it's not relevant here) Hans ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
participants (3)
-
Aditya Mahajan
-
Hans Hagen
-
Max Chernoff