public Box createBox(TeXEnvironment env) {
   Box bbase = base.createBox(env);
   float drt = env.getTeXFont().getDefaultRuleThickness(env.getStyle());
   float space = INTERSPACE * SpaceAtom.getFactor(TeXConstants.UNIT_EM, env);
   float sspace = 1.5f * drt + 0.5f * SpaceAtom.getFactor(TeXConstants.UNIT_POINT, env);
   return new FramedBox(new FramedBox(bbase, 0.75f * drt, space), 1.5f * drt, sspace);
 }
 public Box createBox(TeXEnvironment env) {
   boolean prev = env.getSmallCap();
   env.setSmallCap(true);
   Box box = base.createBox(env);
   env.setSmallCap(prev);
   return box;
 }
  public Box createBox(TeXEnvironment env) {
    TeXFont tf = env.getTeXFont();
    int style = env.getStyle();
    Box b = base != null ? base.createBox(env) : new StrutBox(0, 0, 0, 0);
    float sep = new SpaceAtom(TeXConstants.UNIT_POINT, 1f, 0, 0).createBox(env).getWidth();
    Box arrow;

    if (dble) {
      arrow = XLeftRightArrowFactory.create(env, b.getWidth());
      sep = 4 * sep;
    } else {
      arrow = XLeftRightArrowFactory.create(left, env, b.getWidth());
      sep = -sep;
    }

    VerticalBox vb = new VerticalBox();
    if (over) {
      vb.add(arrow);
      vb.add(new HorizontalBox(b, arrow.getWidth(), TeXConstants.ALIGN_CENTER));
      float h = vb.getDepth() + vb.getHeight();
      vb.setDepth(b.getDepth());
      vb.setHeight(h - b.getDepth());
    } else {
      vb.add(new HorizontalBox(b, arrow.getWidth(), TeXConstants.ALIGN_CENTER));
      vb.add(new StrutBox(0, sep, 0, 0));
      vb.add(arrow);
      float h = vb.getDepth() + vb.getHeight();
      vb.setDepth(h - b.getHeight());
      vb.setHeight(b.getHeight());
    }

    return vb;
  }
Example #4
0
  public Box createBox(TeXEnvironment env) {
    TreeEditor.addAtoms(this);
    TeXFont tf = env.getTeXFont();
    int style = env.getStyle();
    Char c = tf.getChar(name, style);
    Box cb = new CharBox(c);
    if (env.getSmallCap() && unicode != 0 && Character.isLowerCase(unicode)) {
      try {
        cb =
            new ScaleBox(
                new CharBox(
                    tf.getChar(
                        TeXFormula.symbolTextMappings[Character.toUpperCase(unicode)], style)),
                0.8,
                0.8);
      } catch (SymbolMappingNotFoundException e) {
      }
    }

    if (type == TeXConstants.TYPE_BIG_OPERATOR) {
      if (style < TeXConstants.STYLE_TEXT && tf.hasNextLarger(c)) c = tf.getNextLarger(c, style);
      cb = new CharBox(c);
      cb.setShift(
          -(cb.getHeight() + cb.getDepth()) / 2 - env.getTeXFont().getAxisHeight(env.getStyle()));
      float delta = c.getItalic();
      HorizontalBox hb = new HorizontalBox(cb);
      if (delta > TeXFormula.PREC) hb.add(new StrutBox(delta, 0, 0, 0));

      usedBox = hb;
      return hb;
    }

    usedBox = cb;
    return cb;
  }
Example #5
0
 public Box createBox(TeXEnvironment env) {
   CharBox A = new CharBox(env.getTeXFont().getChar("textapos", env.getStyle()));
   CharBox t = new CharBox(env.getTeXFont().getChar('t', "mathnormal", env.getStyle()));
   HorizontalBox hb = new HorizontalBox(t);
   hb.add(new SpaceAtom(TeXConstants.UNIT_EM, -0.3f, 0, 0).createBox(env));
   hb.add(A);
   return hb;
 }
Example #6
0
  public Box createBox(TeXEnvironment env) {
    // first create a simple square root construction

    TeXFont tf = env.getTeXFont();
    int style = env.getStyle();
    // calculate minimum clearance clr
    float clr, drt = tf.getDefaultRuleThickness(style);
    if (style < TeXConstants.STYLE_TEXT)
      clr = tf.getXHeight(style, tf.getChar(sqrtSymbol, style).getFontCode());
    else clr = drt;
    clr = drt + Math.abs(clr) / 4;

    // cramped style for the formula under the root sign
    Box bs = base.createBox(env.crampStyle());
    HorizontalBox b = new HorizontalBox(bs);
    b.add(new SpaceAtom(TeXConstants.UNIT_MU, 1, 0, 0).createBox(env.crampStyle()));
    // create root sign
    float totalH = b.getHeight() + b.getDepth();
    Box rootSign = DelimiterFactory.create(sqrtSymbol, env, totalH + clr + drt);

    // add half the excess to clr
    float delta = rootSign.getDepth() - (totalH + clr);
    clr += delta / 2;

    // create total box
    rootSign.setShift(-(b.getHeight() + clr));
    OverBar ob = new OverBar(b, clr, rootSign.getHeight());
    ob.setShift(-(b.getHeight() + clr + drt));
    HorizontalBox squareRoot = new HorizontalBox(rootSign);
    squareRoot.add(ob);

    if (root == null)
      // simple square root
      return squareRoot;
    else { // nthRoot, not a simple square root

      // create box from root
      Box r = root.createBox(env.rootStyle());

      // shift root up
      float bottomShift = FACTOR * (squareRoot.getHeight() + squareRoot.getDepth());
      r.setShift(squareRoot.getDepth() - r.getDepth() - bottomShift);

      // negative kern
      Box negativeKern = new SpaceAtom(TeXConstants.UNIT_MU, -10f, 0, 0).createBox(env);

      // arrange both boxes together with the negative kern
      Box res = new HorizontalBox();
      float pos = r.getWidth() + negativeKern.getWidth();
      if (pos < 0) res.add(new StrutBox(-pos, 0, 0, 0));

      res.add(r);
      res.add(negativeKern);
      res.add(squareRoot);
      return res;
    }
  }
Example #7
0
  public Box createBox(TeXEnvironment env) {
    Box box;
    if (base != null) {
      env = env.copy(env.getTeXFont().copy());
      env.getTeXFont().setRoman(true);
      box = base.createBox(env);
    } else {
      box = new StrutBox(0, 0, 0, 0);
    }

    return box;
  }
  public Box createBox(TeXEnvironment env) {
    float drt = env.getTeXFont().getDefaultRuleThickness(env.getStyle());

    // cramp the style of the formula to be overlined and create vertical box
    Box b = (base == null ? new StrutBox(0, 0, 0, 0) : base.createBox(env.crampStyle()));
    OverBar ob = new OverBar(b, 3 * drt, drt);

    // baseline vertical box = baseline box b
    ob.setDepth(b.getDepth());
    ob.setHeight(b.getHeight() + 5 * drt);

    return ob;
  }
Example #9
0
  public Box createBox(TeXEnvironment env) {
    TeXFont tf = env.getTeXFont();
    int style = env.getStyle();

    // set base in cramped style
    Box b = (base == null ? new StrutBox(0, 0, 0, 0) : base.createBox(env.crampStyle()));

    float u = b.getWidth();
    float s = 0;
    if (base instanceof CharSymbol) s = tf.getSkew(((CharSymbol) base).getCharFont(tf), style);

    // retrieve best Char from the accent symbol
    Char ch = tf.getChar(accent.getName(), style);
    while (tf.hasNextLarger(ch)) {
      Char larger = tf.getNextLarger(ch, style);
      if (larger.getWidth() <= u) ch = larger;
      else break;
    }

    // calculate delta
    float delta = Math.min(b.getHeight(), tf.getXHeight(style, ch.getFontCode()));

    // create vertical box
    VerticalBox vBox = new VerticalBox();

    // accent
    Box y;
    float italic = ch.getItalic();
    if (italic > TeXFormula.PREC) {
      y = new HorizontalBox(new CharBox(ch));
      y.add(new StrutBox(italic, 0, 0, 0));
    } else y = new CharBox(ch);

    // if diff > 0, center accent, otherwise center base
    float diff = (u - y.getWidth()) / 2;
    y.setShift(s + (diff > 0 ? diff : 0));
    if (diff < 0) b = new HorizontalBox(b, y.getWidth(), TeXConstants.ALIGN_CENTER);
    vBox.add(y);

    // kern
    vBox.add(new StrutBox(0, -delta, 0, 0));
    // base
    vBox.add(b);

    // set height and depth vertical box
    float total = vBox.getHeight() + vBox.getDepth(), d = b.getDepth();
    vBox.setDepth(d);
    vBox.setHeight(total - d);
    return vBox;
  }
  public Box createBox(TeXEnvironment env) {
    double tw = env.getTextwidth();
    if (tw == Float.POSITIVE_INFINITY || type == GATHERED) {
      return new MatrixAtom(isPartial, column, "").createBox(env);
    }

    VerticalBox vb = new VerticalBox();
    Atom at = column.array.get(0).get(0);
    int alignment = type == GATHER ? TeXConstants.ALIGN_CENTER : TeXConstants.ALIGN_LEFT;
    if (at.alignment != -1) {
      alignment = at.alignment;
    }
    vb.add(new HorizontalBox(at.createBox(env), tw, alignment));
    Box Vsep = vsep_in.createBox(env);
    for (int i = 1; i < column.row - 1; i++) {
      at = column.array.get(i).get(0);
      alignment = TeXConstants.ALIGN_CENTER;
      if (at.alignment != -1) {
        alignment = at.alignment;
      }
      vb.add(Vsep);
      vb.add(new HorizontalBox(at.createBox(env), tw, alignment));
    }

    if (column.row > 1) {
      at = column.array.get(column.row - 1).get(0);
      alignment = type == GATHER ? TeXConstants.ALIGN_CENTER : TeXConstants.ALIGN_RIGHT;
      if (at.alignment != -1) {
        alignment = at.alignment;
      }
      vb.add(Vsep);
      vb.add(new HorizontalBox(at.createBox(env), tw, alignment));
    }

    double height = vb.getHeight() + vb.getDepth();
    vb.setHeight(height / 2);
    vb.setDepth(height / 2);

    return vb;
  }
Example #11
0
 public Box createBox(TeXEnvironment env) {
   TeXFont tf = env.getTeXFont();
   Char c = tf.getChar(cf, env.getStyle());
   return new CharBox(c);
 }