}
}
- else if (t.cs() == "nonumber") {
- if (grid.asHullInset())
- grid.asHullInset()->numbered(cellrow, false);
- }
+ // \notag is the same as \nonumber if amsmath is used
+ else if ((t.cs() == "nonumber" || t.cs() == "notag") &&
+ grid.asHullInset())
+ grid.asHullInset()->numbered(cellrow, false);
- else if (t.cs() == "number") {
- if (grid.asHullInset())
- grid.asHullInset()->numbered(cellrow, true);
- }
+ else if (t.cs() == "number" && grid.asHullInset())
+ grid.asHullInset()->numbered(cellrow, true);
else if (t.cs() == "hline") {
grid.rowinfo(cellrow).lines_ ++;
parse(cell->back().nucleus()->cell(0), FLAG_ITEM, mode);
}
+ else if (t.cs() == "xhookrightarrow" || t.cs() == "xhookleftarrow" ||
+ t.cs() == "xRightarrow" || t.cs() == "xLeftarrow" ||
+ t.cs() == "xleftrightarrow" || t.cs() == "xLeftrightarrow" ||
+ t.cs() == "xrightharpoondown" || t.cs() == "xrightharpoonup" ||
+ t.cs() == "xleftharpoondown" || t.cs() == "xleftharpoonup" ||
+ t.cs() == "xleftrightharpoons" || t.cs() == "xrightleftharpoons" ||
+ t.cs() == "xmapsto") {
+ cell->push_back(createInsetMath(t.cs(), buf));
+ parse(cell->back().nucleus()->cell(1), FLAG_OPTION, mode);
+ parse(cell->back().nucleus()->cell(0), FLAG_ITEM, mode);
+ }
+
else if (t.cs() == "ref" || t.cs() == "eqref" || t.cs() == "prettyref"
|| t.cs() == "pageref" || t.cs() == "vpageref" || t.cs() == "vref") {
cell->push_back(MathAtom(new InsetMathRef(buf, t.cs())));
}
else if (name == "align" || name == "align*") {
- if (mode != InsetMath::UNDECIDED_MODE) {
- // FIXME this is wrong: amsmath supports
- // align* inside gather, see testmath.tex.
- error("bad math environment " + name);
- break;
+ if (mode == InsetMath::UNDECIDED_MODE) {
+ cell->push_back(MathAtom(new InsetMathHull(buf, hullAlign)));
+ parse2(cell->back(), FLAG_END, InsetMath::MATH_MODE, !stared(name));
+ } else {
+ cell->push_back(MathAtom(new InsetMathSplit(buf, name,
+ 'c', !stared(name))));
+ parse2(cell->back(), FLAG_END, mode, !stared(name));
}
- cell->push_back(MathAtom(new InsetMathHull(buf, hullAlign)));
- parse2(cell->back(), FLAG_END, InsetMath::MATH_MODE, !stared(name));
}
else if (name == "flalign" || name == "flalign*") {
skipSpaces();
if (nextToken().asInput() == "[") {
// Since the phantom inset cannot handle optional arguments
- // we must not create an InsetMathPhantom (bug 8967).
+ // other than b and t, we must not create an InsetMathPhantom
+ // if opt is different from b and t (bug 8967).
docstring const opt = parse_verbatim_option();
- docstring const arg = parse_verbatim_item();
- cell->push_back(MathAtom(new MathMacro(buf, t.cs())));
- MathData ar;
- mathed_parse_cell(ar, '[' + opt + ']', mode_);
- cell->append(ar);
- ar = MathData();
- mathed_parse_cell(ar, '{' + arg + '}', mode_);
- cell->append(ar);
+ if (opt == "t" || opt == "b") {
+ cell->push_back(createInsetMath(t.cs() + opt, buf));
+ parse(cell->back().nucleus()->cell(0), FLAG_ITEM, mode);
+ } else {
+ docstring const arg = parse_verbatim_item();
+ cell->push_back(MathAtom(new MathMacro(buf, t.cs())));
+ MathData ar;
+ mathed_parse_cell(ar, '[' + opt + ']', mode_);
+ cell->append(ar);
+ ar = MathData();
+ mathed_parse_cell(ar, '{' + arg + '}', mode_);
+ cell->append(ar);
+ }
}
else {
cell->push_back(createInsetMath(t.cs(), buf));
//}
for (InsetMath::idx_type i = start; i < at->nargs(); ++i) {
parse(at.nucleus()->cell(i), FLAG_ITEM, m);
- skipSpaces();
+ if (mode == InsetMath::MATH_MODE)
+ skipSpaces();
}
cell->push_back(at);
}