@@ -783,9 +783,11 @@ sub readValue {
783783# Read a value from a numeric register, possibly changing sign,
784784# possibly coercing from a bigger type (eg. a Number from a Dimension)
785785our %RegisterCoercionTypes = (
786- Number => { Dimension => \&Number, Glue => \&Number },
787- Dimension => { Glue => \&Dimension },
788- MuDimension => { MuGlue => \&MuDimension },
786+ Number => { Number => \&Number, Dimension => \&Number, Glue => \&Number },
787+ Dimension => { Dimension => \&Dimension, Glue => \&Dimension },
788+ MuDimension => { MuDimension => \&MuDimension, MuGlue => \&MuDimension },
789+ Glue => { Glue => \&Glue },
790+ MuGlue => { MuGlue => \&MuGlue },
789791);
790792
791793sub readRegisterValue {
@@ -800,6 +802,15 @@ sub readRegisterValue {
800802 local $LaTeXML::CURRENT_TOKEN = $token ;
801803 my $parms = $$defn {parameters };
802804 my $value = $defn -> valueOf(($parms ? $parms -> readArguments($self ) : ()));
805+ # Careful: $value may be a scalar in Erroneous(?) cases (`\number \fam`)
806+ if (!ref $value ) {
807+ if ($coercer = $RegisterCoercionTypes {$type }{$rtype }) {
808+ Error(" unexpected" , " value" , $self ,
809+ " Got a scalar with value $value , will coerce from $type into $rtype " );
810+ $value = &$coercer ($value ); }
811+ else {
812+ Error(" unexpected" , " value" , $self ,
813+ " Got a scalar with value $value , and no map to coerce $type into $rtype " ); } }
803814 if ($type eq $rtype ) {
804815 return ($sign < 0 ? $value -> negate : $value ); }
805816 else {
0 commit comments