Exemplo n.º 1
0
        public UnderOverAtom(Atom baseAtom, Atom underOver, TexUnit underOverUnit, double underOverSpace,
                             bool underOverScriptSize, bool over)
        {
            SpaceAtom.CheckUnit(underOverUnit);

            BaseAtom = baseAtom;

            if (over)
            {
                UnderAtom          = null;
                UnderSpace         = 0;
                UnderSpaceUnit     = 0;
                UnderScriptSmaller = false;
                OverAtom           = underOver;
                OverSpaceUnit      = underOverUnit;
                OverSpace          = underOverSpace;
                OverScriptSmaller  = underOverScriptSize;
            }
            else
            {
                UnderAtom          = underOver;
                UnderSpaceUnit     = underOverUnit;
                UnderSpace         = underOverSpace;
                UnderScriptSmaller = underOverScriptSize;
                OverSpace          = 0;
                OverAtom           = null;
                OverSpaceUnit      = 0;
                OverScriptSmaller  = false;
            }
        }
Exemplo n.º 2
0
 public OverUnderDelimiter(Atom baseAtom, Atom script, SymbolAtom symbol, TexUnit kernUnit, double kern, bool over)
 {
     Type     = TexAtomType.Inner;
     BaseAtom = baseAtom;
     Script   = script;
     Symbol   = symbol;
     Kern     = new SpaceAtom(kernUnit, 0, kern, 0);
     Over     = over;
 }
Exemplo n.º 3
0
        public UnderOverAtom(Atom baseAtom, Atom under, TexUnit underUnit, double underSpace, bool underScriptSize,
                             Atom over, TexUnit overUnit, double overSpace, bool overScriptSize)
        {
            SpaceAtom.CheckUnit(underUnit);
            SpaceAtom.CheckUnit(overUnit);

            BaseAtom           = baseAtom;
            UnderAtom          = under;
            UnderSpaceUnit     = underUnit;
            UnderSpace         = underSpace;
            UnderScriptSmaller = underScriptSize;
            OverAtom           = over;
            OverSpaceUnit      = overUnit;
            OverSpace          = overSpace;
            OverScriptSmaller  = overScriptSize;
        }
Exemplo n.º 4
0
        public override Box CreateBox(TexEnvironment environment)
        {
            var tex_font = environment.TexFont;
            var style    = environment.Style;

            // Calculate minimum clearance amount.
            var default_rule_thickness = tex_font.GetDefaultLineThickness(style);
            var clearance = style < TexStyle.Text ? tex_font.GetXHeight(style, tex_font.GetCharInfo(__SqrtSymbol, style).FontId) : default_rule_thickness;

            clearance = default_rule_thickness + Math.Abs(clearance) / 4;

            // Create box for base atom, in cramped style.
            var base_box = BaseAtom.CreateBox(environment.GetCrampedStyle());

            // Create box for radical sign.
            var total_height     = base_box.Height + base_box.Depth;
            var radical_sign_box = DelimiterFactory.CreateBox(__SqrtSymbol, total_height + clearance + default_rule_thickness,
                                                              environment);

            // Add half of excess height to clearance.
            var delta = radical_sign_box.Depth - (total_height + clearance);

            clearance += delta / 2;

            // Create box for square-root containing base box.
            radical_sign_box.Shift = -(base_box.Height + clearance);
            var over_bar = new OverBar(base_box, clearance, radical_sign_box.Height)
            {
                Shift = -(base_box.Height + clearance + default_rule_thickness)
            };
            var radical_container_box = new HorizontalBox(radical_sign_box);

            radical_container_box.Add(over_bar);

            // If atom is simple radical, just return square-root box.
            if (DegreeAtom is null)
            {
                return(radical_container_box);
            }

            // Atom is complex radical (nth-root).

            // Create box for root atom.
            var root_box     = DegreeAtom.CreateBox(environment.GetRootStyle());
            var bottom_shift = __Scale * (radical_container_box.Height + radical_container_box.Depth);

            root_box.Shift = radical_container_box.Depth - root_box.Depth - bottom_shift;

            // Create result box.
            var result_box = new HorizontalBox();

            // Add box for negative kern.
            var negative_kern = new SpaceAtom(TexUnit.Mu, -10, 0, 0).CreateBox(environment);
            var x_pos         = root_box.Width + negative_kern.Width;

            if (x_pos < 0)
            {
                result_box.Add(new StrutBox(-x_pos, 0, 0, 0));
            }

            result_box.Add(root_box);
            result_box.Add(negative_kern);
            result_box.Add(radical_container_box);

            return(result_box);
        }