On 07.05.2014 09:34, Joseph Wright wrote: > On 07/05/2014 07:40, Heiko Oberdiek wrote: >> On 07.05.2014 04:10, Qing Lee wrote: >>> On 2014-05-05 at 16:01:02 +0800 GMT, Joseph Wright wrote: >>>> On 05/05/2014 00:08, Heiko Oberdiek wrote: >> >>>>> \cs_new:Npn \__dim_strip_bp:n #1 >>>>> { \__dim_strip_pt:n { 0.996 26 \__dim_eval:w #1 \__dim_eval_end: >>>>> } } >> >>>>> \dimexpr 0.99626\dimexpr #1\relax\relax >> >>>>> Improved version with higher precision: >>>>> >>>>> \cs_new:Npn \__dim_strip_bp:n #1 >>>>> { >>>>> \__dim_strip_pt:n >>>>> { >>>>> \__dim_eval:w ( #1 ) * 800 / 803 \__dim_eval_end: >>>>> } >>>>> } >> >>> The new definition will be broken if its argument contains additional >>> units. E.g., >>> >>> \__dim_strip_bp:n { 1 bp pt } Thanks Quing Lee for noticing that there is a "feature" that I have overlooked: > Before making any further changes (and adding tests for the defined > behaviour), I think it's worth briefly considering why \__dim_strip_pt:n > and \__dim_strip_bp:n are (currently) documented as accepting multiple > units in the argument. (I was drafting this message before Heiko's reply!) > > While it's not in the sources, from memory the idea was that allowing > input such as > > \__dim_strip_bp:n { 1 bp pt } > > means that at a 'higher level' something like > > \cs_new:npn \foo #1 > { \_dim_strip_bp:n { #1 pt } } > > will work with > > \foo { 1 bp } > > and > > \foo { 1 } % Assumes pt > > will work. The idea was, I think, allowing an approach something like > \@defaultunits in the LaTeX2e kernel or \Gin@defaultbp in graphics but > in an expandable form. > > Now, that may not be a good plan: the functions here are supposed to be > relatively low-level (they are for writing driver code), and it is > likely to be better to require 'properly defined' units on the input. IMHO, the feature "default unit" belongs to the "toolbox level" for defining user interfaces. > As I say, before I make any further change here it would be useful to > have a proper idea of what is actually required. Either way, \dimexpr 0.99626\dimexpr belongs to the past and can/should be replaced by a "scaling" operation of \dimexpr. Best regards. Heiko Oberdiek