Tomas Kisela wrote:
Hi everybody,
There's my issue:
If I switch a size of body font, the height of square root doesn't adapt well for letters
exceeding a baseline (in my example "y"). Here is my code:
\starttext
\startformula
\sqrt{x^2+y^2} \sqrt{x^2+a^2}
\stopformula
\switchtobodyfont[17pt]
\startformula
\sqrt{x^2+y^2} \sqrt{x^2+a^2}
\stopformula
\switchtobodyfont[23pt]
\startformula
\sqrt{x^2+y^2} \sqrt{x^2+a^2}
\stopformula
\stoptext
Do you have any ideas what's the problem and how can I fix it?
There is a bug in math-dim.lua: the \Umathradicalvgap parameters are not
set up properly. Attached is an improved version. Hans, can you put the
fix in the next beta?
Best wishes,
Taco
if not modules then modules = { } end modules ['math-dim'] = {
version = 1.001,
comment = "companion to math-ini.tex",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-- Beware: only Taco really understands what these dimensions do so if you
-- run into problems ...
local abs, next = math.abs, next
mathematics = mathematics or { }
local defaults = {
['axis']={
['default']={ "AxisHeight", "axis_height" },
},
['accent_base_height']={
['default']={ "AccentBaseHeight", "x_height" },
},
['fraction_del_size']={
['default']={ "0", "delim2" },
['cramped_display_style']={ "0", "delim1" },
['display_style']={ "0", "delim1" },
},
['fraction_denom_down']={
['default']={ "FractionDenominatorShiftDown", "denom2" },
['cramped_display_style']={ "FractionDenominatorDisplayStyleShiftDown",
"denom1" },
['display_style']={ "FractionDenominatorDisplayStyleShiftDown",
"denom1" },
},
['fraction_denom_vgap']={
['default']={ "FractionDenominatorGapMin", "default_rule_thickness" },
['cramped_display_style']={ "FractionDenominatorDisplayStyleGapMin",
"3*default_rule_thickness" },
['display_style']={ "FractionDenominatorDisplayStyleGapMin",
"3*default_rule_thickness" },
},
['fraction_num_up']={
['default']={ "FractionNumeratorShiftUp", "num2" },
['cramped_display_style']={ "FractionNumeratorDisplayStyleShiftUp",
"num1" },
['display_style']={ "FractionNumeratorDisplayStyleShiftUp", "num1" },
},
['fraction_num_vgap']={
['default']={ "FractionNumeratorGapMin", "default_rule_thickness" },
['cramped_display_style']={ "FractionNumeratorDisplayStyleGapMin",
"3*default_rule_thickness" },
['display_style']={ "FractionNumeratorDisplayStyleGapMin",
"3*default_rule_thickness" },
},
['fraction_rule']={
['default']={ "FractionRuleThickness", "default_rule_thickness" },
},
['limit_above_bgap']={
['default']={ "UpperLimitBaselineRiseMin", "big_op_spacing3" },
},
['limit_above_kern']={
['default']={ "0", "big_op_spacing5" },
},
['limit_above_vgap']={
['default']={ "UpperLimitGapMin", "big_op_spacing1" },
},
['limit_below_bgap']={
['default']={ "LowerLimitBaselineDropMin", "big_op_spacing4" },
},
['limit_below_kern']={
['default']={ "0", "big_op_spacing5" },
},
['limit_below_vgap']={
['default']={ "LowerLimitGapMin", "big_op_spacing2" },
},
--~ ['....']={
--~ ['default']={ "DisplayOperatorMinHeight", "....." },
--~ },
['overbar_kern']={
['default']={ "OverbarExtraAscender", "default_rule_thickness" },
},
['overbar_rule']={
['default']={ "OverbarRuleThickness", "default_rule_thickness" },
},
['overbar_vgap']={
['default']={ "OverbarVerticalGap", "3*default_rule_thickness" },
},
['quad']={
['default']={ "font_size(f)", "math_quad" },
},
['radical_kern']={
['default']={ "RadicalExtraAscender", "default_rule_thickness" },
},
['radical_rule']={
['default']={ "RadicalRuleThickness", "<not set>" },
},
['radical_vgap']={
['default']={ "RadicalVerticalGap",
"default_rule_thickness+(abs(default_rule_thickness)/4)" },
['display_style']={ "RadicalDisplayStyleVerticalGap",
"default_rule_thickness+(abs(math_x_height)/4)" },
},
['space_after_script']={
['default']={ "SpaceAfterScript", "script_space" },
},
['stack_denom_down']={
['default']={ "StackBottomShiftDown", "denom2" },
['cramped_display_style']={ "StackBottomDisplayStyleShiftDown",
"denom1" },
['display_style']={ "StackBottomDisplayStyleShiftDown", "denom1" },
},
['stack_num_up']={
['default']={ "StackTopShiftUp", "num3" },
['cramped_display_style']={ "StackTopDisplayStyleShiftUp", "num1" },
['display_style']={ "StackTopDisplayStyleShiftUp", "num1" },
},
['stack_vgap']={
['default']={ "StackGapMin", "3*default_rule_thickness" },
['cramped_display_style']={ "StackDisplayStyleGapMin",
"7*default_rule_thickness" },
['display_style']={ "StackDisplayStyleGapMin",
"7*default_rule_thickness" },
},
['sub_shift_down']={
['default']={ "SubscriptShiftDown", "sub1" },
},
['sub_shift_drop']={
['default']={ "SubscriptBaselineDropMin", "sub_drop" },
},
['sub_sup_shift_down']={
['default']={ "SubscriptShiftDown", "sub2" },
},
['sub_top_max']={
['default']={ "SubscriptTopMax", "abs(math_x_height*4)/5" },
},
['subsup_vgap']={
['default']={ "SubSuperscriptGapMin", "4*default_rule_thickness" },
},
['sup_bottom_min']={
['default']={ "SuperscriptBottomMin", "abs(math_x_height)/4" },
},
['sup_shift_drop']={
['default']={ "SuperscriptBaselineDropMax", "sup_drop" },
},
['sup_shift_up']={
['cramped_display_style']={ "SuperscriptShiftUpCramped", "sup3" },
['cramped_script_script_style']={ "SuperscriptShiftUpCramped", "sup3" },
['cramped_script_style']={ "SuperscriptShiftUpCramped", "sup3" },
['cramped_text_style']={ "SuperscriptShiftUpCramped", "sup3" },
['display_style']={ "SuperscriptShiftUp", "sup1" },
['script_script_style']={ "SuperscriptShiftUp", "sup2" },
['script_style']={ "SuperscriptShiftUp", "sup2" },
['text_style']={ "SuperscriptShiftUp", "sup2" },
},
['sup_sub_bottom_max']={
['default']={ "SuperscriptBottomMaxWithSubscript",
"abs(math_x_height*4)/5" },
},
['underbar_kern']={
['default']={ "UnderbarExtraDescender", "0" },
},
['underbar_rule']={
['default']={ "UnderbarRuleThickness", "default_rule_thickness" },
},
['underbar_vgap']={
['default']={ "UnderbarVerticalGap", "3*default_rule_thickness" },
},
['connector_overlap_min']={
['default']={ "MinConnectorOverlap", "0.25*default_rule_thickness" },
},
['over_delimiter_vgap']={
['default']={ "StretchStackGapBelowMin", "big_op_spacing1" },
},
['over_delimiter_bgap']={
['default']={ "StretchStackTopShiftUp", "big_op_spacing3" },
},
['under_delimiter_vgap']={
['default']={ "StretchStackGapAboveMin", "big_op_spacing2" },
},
['under_delimiter_bgap']={
['default']={ "StretchStackBottomShiftDown", "big_op_spacing4" },
},
}
local styles = {
'cramped_display_style',
'cramped_script_script_style',
'cramped_script_style',
'cramped_text_style',
'display_style',
'script_script_style',
'script_style',
'text_style',
}
for k, v in next, defaults do
for _, s in next, styles do
if not v[s] then
v[s] = v.default
end
end
end
-- we cannot use a metatable because we do a copy (takes a bit more work)
--
-- local mt = { } setmetatable(defaults,mt)
--
-- mt.__index = function(t,s)
-- texio.write_nl("GETTING " .. s)
-- return t.default or t.text_style or 0
-- end
function mathematics.dimensions(dimens)
if dimens.SpaceAfterScript then
return { }, table.fastcopy(dimens)
elseif dimens.AxisHeight or dimens.axis_height then
local t = { }
local math_x_height = dimens.x_height or 10*65526
local default_rule_thickness = dimens.FractionDenominatorGapMin or
dimens.default_rule_thickness or 0.4*65526
dimens["0"] = 0
dimens["0.25*default_rule_thickness"] = default_rule_thickness/4
dimens["3*default_rule_thickness"] = 3*default_rule_thickness
dimens["4*default_rule_thickness"] = 4*default_rule_thickness
dimens["7*default_rule_thickness"] = 7*default_rule_thickness
dimens["abs(math_x_height*4)/5"] = abs(math_x_height * 4) / 5
dimens["default_rule_thickness+(abs(default_rule_thickness)/4)"] =
default_rule_thickness+(abs(default_rule_thickness)/4)
dimens["default_rule_thickness+(abs(math_x_height)/4)"] =
default_rule_thickness+(abs(math_x_height)/4)
dimens["abs(math_x_height)/4"] = abs(math_x_height)/4
dimens["abs(math_x_height*4)/5"] = abs(math_x_height*4)/5
dimens["<not set>"] = false
dimens["script_space"] = false -- at macro level
for variable, styles in next, defaults do
local tt = { }
for style, default in next, styles do
local one, two = default[1], default[2]
local value = dimens[one]
if value then
tt[style] = value
else
value = dimens[two]
if value == false then
tt[style] = nil
else
tt[style] = value or 0
end
end
end
t[variable] = tt
end
local d = {
AxisHeight = t . axis
. text_style,
AccentBaseHeight = t .
accent_base_height . text_style,
FractionDenominatorDisplayStyleGapMin = t .
fraction_denom_vgap . display_style,
FractionDenominatorDisplayStyleShiftDown = t .
fraction_denom_down . display_style,
FractionDenominatorGapMin = t .
fraction_denom_vgap . text_style,
FractionDenominatorShiftDown = t .
fraction_denom_down . text_style,
FractionNumeratorDisplayStyleGapMin = t . fraction_num_vgap
. display_style,
FractionNumeratorDisplayStyleShiftUp = t . fraction_num_up
. display_style,
FractionNumeratorGapMin = t . fraction_num_vgap
. text_style,
FractionNumeratorShiftUp = t . fraction_num_up
. text_style,
FractionRuleThickness = t . fraction_rule
. text_style,
LowerLimitBaselineDropMin = t . limit_below_bgap
. text_style,
LowerLimitGapMin = t . limit_below_vgap
. text_style,
OverbarExtraAscender = t . overbar_kern
. text_style,
OverbarRuleThickness = t . overbar_rule
. text_style,
OverbarVerticalGap = t . overbar_vgap
. text_style,
RadicalDisplayStyleVerticalGap = t . radical_vgap
. display_style,
RadicalExtraAscender = t . radical_kern
. text_style,
RadicalRuleThickness = t . radical_rule
. text_style,
RadicalVerticalGap = t . radical_vgap
. text_style,
SpaceAfterScript = t .
space_after_script . text_style,
StackBottomDisplayStyleShiftDown = t . stack_denom_down
. display_style,
StackBottomShiftDown = t . stack_denom_down
. text_style,
StackDisplayStyleGapMin = t . stack_vgap
. display_style,
StackGapMin = t . stack_vgap
. text_style,
StackTopDisplayStyleShiftUp = t . stack_num_up
. display_style,
StackTopShiftUp = t . stack_num_up
. text_style,
SubscriptBaselineDropMin = t . sub_shift_drop
. text_style,
SubscriptShiftDown = t . sub_shift_down
. text_style,
SubscriptTopMax = t . sub_top_max
. text_style,
SubSuperscriptGapMin = t . subsup_vgap
. text_style,
SuperscriptBaselineDropMax = t . sup_shift_drop
. text_style,
SuperscriptBottomMaxWithSubscript = t .
sup_sub_bottom_max . text_style,
SuperscriptBottomMin = t . sup_bottom_min
. text_style,
SuperscriptShiftUp = t . sup_shift_up
. text_style,
SuperscriptShiftUpCramped = t . sup_shift_up
. cramped_text_style,
UnderbarExtraDescender = t . underbar_kern
. text_style,
UnderbarRuleThickness = t . underbar_rule
. text_style,
UnderbarVerticalGap = t . underbar_vgap
. text_style,
UpperLimitBaselineRiseMin = t . limit_above_bgap
. text_style,
UpperLimitGapMin = t . limit_above_vgap
. text_style,
MinConnectorOverlap = t .
connector_overlap_min . text_style,
StretchStackGapBelowMin = t .
over_delimiter_vgap . text_style,
StretchStackTopShiftUp = t .
over_delimiter_bgap . text_style,
StretchStackGapAboveMin = t .
under_delimiter_vgap . text_style,
StretchStackBottomShiftDown = t .
under_delimiter_bgap . text_style,
}
d.AccentBaseHeight = 0
--~ texio.write_nl(table.serialize(d))
return t, d -- this might change
else
return { }, { }
end
end
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the
Wiki!
maillist : [email protected] / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage : http://www.pragma-ade.nl / http://tex.aanhet.net
archive : https://foundry.supelec.fr/projects/contextrev/
wiki : http://contextgarden.net
___________________________________________________________________________________