This is mainly needed to reduce the amount of ERT if you convert AMS example
documents with tex2lyx. No GUI support is needed, since \notag is equivalent
to \nonumber.
def revert_smash(document):
" Set amsmath to on if smash commands are used "
def revert_smash(document):
" Set amsmath to on if smash commands are used "
- commands = ["smash[t]", "smash[b]"]
+ commands = ["smash[t]", "smash[b]", "notag"]
i = find_token(document.header, "\\use_package amsmath", 0)
if i == -1:
document.warning("Malformed LyX document: Can't find \\use_package amsmath.")
i = find_token(document.header, "\\use_package amsmath", 0)
if i == -1:
document.warning("Malformed LyX document: Can't find \\use_package amsmath.")
static InsetLabel * dummy_pointer = 0;
InsetMathHull::InsetMathHull(Buffer * buf)
static InsetLabel * dummy_pointer = 0;
InsetMathHull::InsetMathHull(Buffer * buf)
- : InsetMathGrid(buf, 1, 1), type_(hullNone), numbered_(1, true),
+ : InsetMathGrid(buf, 1, 1), type_(hullNone), numbered_(1, NUMBER),
numbers_(1, empty_docstring()), label_(1, dummy_pointer),
preview_(new RenderPreview(this)), use_preview_(false)
{
numbers_(1, empty_docstring()), label_(1, dummy_pointer),
preview_(new RenderPreview(this)), use_preview_(false)
{
InsetMathHull::InsetMathHull(Buffer * buf, HullType type)
InsetMathHull::InsetMathHull(Buffer * buf, HullType type)
- : InsetMathGrid(buf, getCols(type), 1), type_(type), numbered_(1, true),
+ : InsetMathGrid(buf, getCols(type), 1), type_(type), numbered_(1, NUMBER),
numbers_(1, empty_docstring()), label_(1, dummy_pointer),
preview_(new RenderPreview(this)), use_preview_(false)
{
numbers_(1, empty_docstring()), label_(1, dummy_pointer),
preview_(new RenderPreview(this)), use_preview_(false)
{
Toc & toc = buffer().tocBackend().toc("equation");
for (row_type row = 0; row != nrows(); ++row) {
Toc & toc = buffer().tocBackend().toc("equation");
for (row_type row = 0; row != nrows(); ++row) {
continue;
if (label_[row])
label_[row]->addToToc(pit, output_active);
continue;
if (label_[row])
label_[row]->addToToc(pit, output_active);
-void InsetMathHull::numbered(row_type row, bool num)
+void InsetMathHull::numbered(row_type row, Numbered num)
- if (!numbered_[row] && label_[row]) {
+ if (!numbered(row) && label_[row]) {
delete label_[row];
label_[row] = 0;
}
delete label_[row];
label_[row] = 0;
}
bool InsetMathHull::numbered(row_type row) const
{
bool InsetMathHull::numbered(row_type row) const
{
+ return numbered_[row] == NUMBER;
}
bool InsetMathHull::ams() const
{
}
bool InsetMathHull::ams() const
{
- return type_ == hullAlign
- || type_ == hullFlAlign
- || type_ == hullMultline
- || type_ == hullGather
- || type_ == hullAlignAt
- || type_ == hullXAlignAt
- || type_ == hullXXAlignAt;
+ switch (type_) {
+ case hullAlign:
+ case hullFlAlign:
+ case hullMultline:
+ case hullGather:
+ case hullAlignAt:
+ case hullXAlignAt:
+ case hullXXAlignAt:
+ return true;
+ case hullNone:
+ case hullSimple:
+ case hullEquation:
+ case hullEqnArray:
+ case hullRegexp:
+ break;
+ }
+ for (size_t row = 0; row < numbered_.size(); ++row)
+ if (numbered_[row] == NOTAG)
+ return true;
+ return false;
if (type_ == hullRegexp)
return false;
for (row_type row = 0; row < nrows(); ++row)
if (type_ == hullRegexp)
return false;
for (row_type row = 0; row < nrows(); ++row)
return true;
return false;
}
return true;
return false;
}
docstring number = empty_docstring();
if (type_ == hullMultline) {
if (row + 1 == nrows()) {
docstring number = empty_docstring();
if (type_ == hullMultline) {
if (row + 1 == nrows()) {
- numbered_[row] = false;
+ numbered_[row] = NONUMBER;
swap(label, label_[row]);
swap(number, numbers_[row]);
} else
numbered = false;
}
swap(label, label_[row]);
swap(number, numbers_[row]);
} else
numbered = false;
}
- numbered_.insert(numbered_.begin() + row + 1, numbered);
+ numbered_.insert(numbered_.begin() + row + 1, numbered ? NUMBER : NONUMBER);
numbers_.insert(numbers_.begin() + row + 1, number);
label_.insert(label_.begin() + row + 1, label);
InsetMathGrid::addRow(row);
numbers_.insert(numbers_.begin() + row + 1, number);
label_.insert(label_.begin() + row + 1, label);
InsetMathGrid::addRow(row);
return;
if (row + 1 == nrows())
--row;
return;
if (row + 1 == nrows())
--row;
- // gcc implements the standard std::vector<bool> which is *not* a container:
- // http://www.gotw.ca/publications/N1185.pdf
- // As a results, it doesn't like this:
- // swap(numbered_[row], numbered_[row + 1]);
- // so we do it manually:
- bool const b = numbered_[row];
- numbered_[row] = numbered_[row + 1];
- numbered_[row + 1] = b;
+ swap(numbered_[row], numbered_[row + 1]);
swap(numbers_[row], numbers_[row + 1]);
swap(label_[row], label_[row + 1]);
InsetMathGrid::swapRow(row);
swap(numbers_[row], numbers_[row + 1]);
swap(label_[row], label_[row + 1]);
InsetMathGrid::swapRow(row);
if (nrows() <= 1 || !rowChangeOK())
return;
if (row + 1 == nrows() && type_ == hullMultline) {
if (nrows() <= 1 || !rowChangeOK())
return;
if (row + 1 == nrows() && type_ == hullMultline) {
- bool const b = numbered_[row - 1];
- numbered_[row - 1] = numbered_[row];
- numbered_[row] = b;
+ swap(numbered_[row - 1], numbered_[row]);
swap(numbers_[row - 1], numbers_[row]);
swap(label_[row - 1], label_[row]);
InsetMathGrid::delRow(row);
swap(numbers_[row - 1], numbers_[row]);
swap(label_[row - 1], label_[row]);
InsetMathGrid::delRow(row);
docstring InsetMathHull::nicelabel(row_type row) const
{
docstring InsetMathHull::nicelabel(row_type row) const
{
return docstring();
docstring const & val = numbers_[row];
if (!label_[row])
return docstring();
docstring const & val = numbers_[row];
if (!label_[row])
{
docstring res;
if (numberedType()) {
{
docstring res;
if (numberedType()) {
- if (label_[row] && numbered_[row]) {
+ if (label_[row] && numbered(row)) {
docstring const name =
latex ? escape(label_[row]->getParam("name"))
: label_[row]->getParam("name");
res += "\\label{" + name + '}';
}
docstring const name =
latex ? escape(label_[row]->getParam("name"))
: label_[row]->getParam("name");
res += "\\label{" + name + '}';
}
- if (!numbered_[row] && (type_ != hullMultline))
- res += "\\nonumber ";
+ if (type_ != hullMultline) {
+ if (numbered_[row] == NONUMBER)
+ res += "\\nonumber ";
+ else if (numbered_[row] == NOTAG)
+ res += "\\notag ";
+ }
}
// Never add \\ on the last empty line of eqnarray and friends
last_eoln = false;
}
// Never add \\ on the last empty line of eqnarray and friends
last_eoln = false;
// if there is an argument, find the corresponding label, else
// check whether there is at least one label.
for (row = 0; row != nrows(); ++row)
// if there is an argument, find the corresponding label, else
// check whether there is at least one label.
for (row = 0; row != nrows(); ++row)
- if (numbered_[row] && label_[row]
+ if (numbered(row) && label_[row]
&& (cmd.argument().empty() || label(row) == cmd.argument()))
break;
}
&& (cmd.argument().empty() || label(row) == cmd.argument()))
break;
}
// if there is no argument and we're inside math, we retrieve
// the row number from the cursor position.
row = (type_ == hullMultline) ? nrows() - 1 : cur.row();
// if there is no argument and we're inside math, we retrieve
// the row number from the cursor position.
row = (type_ == hullMultline) ? nrows() - 1 : cur.row();
- enabled = numberedType() && label_[row] && numbered_[row];
+ enabled = numberedType() && label_[row] && numbered(row);
} else {
// if there is an argument, find the corresponding label, else
// check whether there is at least one label.
for (row_type row = 0; row != nrows(); ++row) {
} else {
// if there is an argument, find the corresponding label, else
// check whether there is at least one label.
for (row_type row = 0; row != nrows(); ++row) {
- if (numbered_[row] && label_[row] &&
+ if (numbered(row) && label_[row] &&
(cmd.argument().empty() || label(row) == cmd.argument())) {
enabled = true;
break;
(cmd.argument().empty() || label(row) == cmd.argument())) {
enabled = true;
break;
if (getType() == hullSimple)
return havenumbers;
for (size_t i = 0; i != numbered_.size(); ++i) {
if (getType() == hullSimple)
return havenumbers;
for (size_t i = 0; i != numbered_.size(); ++i) {
havenumbers = true;
break;
}
havenumbers = true;
break;
}
/// This provides an interface between "LyX insets" and "LyX math insets"
class InsetMathHull : public InsetMathGrid {
public:
/// This provides an interface between "LyX insets" and "LyX math insets"
class InsetMathHull : public InsetMathGrid {
public:
+ /// How a line is numbered
+ enum Numbered {
+ /// not numbered, LaTeX code \\nonumber if line differs from inset
+ NONUMBER,
+ /// numbered, LaTeX code \\number if line differs from inset
+ NUMBER,
+ /// not numbered, LaTeX code \\notag if line differs from inset
+ NOTAG
+ };
///
InsetMathHull(Buffer * buf);
///
///
InsetMathHull(Buffer * buf);
///
///
ColorCode backgroundColor(PainterInfo const &) const;
///
///
ColorCode backgroundColor(PainterInfo const &) const;
///
- void numbered(row_type row, bool num);
+ void numbered(row_type row, bool num) { numbered(row, num ? NUMBER : NONUMBER); }
+ ///
+ void numbered(row_type row, Numbered num);
///
bool numbered(row_type row) const;
///
///
bool numbered(row_type row) const;
///
/// "none", "simple", "display", "eqnarray",...
HullType type_;
///
/// "none", "simple", "display", "eqnarray",...
HullType type_;
///
- std::vector<bool> numbered_;
+ std::vector<Numbered> numbered_;
///
std::vector<docstring> numbers_;
///
///
std::vector<docstring> numbers_;
///
- 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_ ++;
else if (t.cs() == "hline") {
grid.rowinfo(cellrow).lines_ ++;
// Do not remove the comment below, so we get merge conflict in
// independent branches. Instead add your own.
// Do not remove the comment below, so we get merge conflict in
// independent branches. Instead add your own.
-#define LYX_FORMAT_LYX 476 // gb: \smash[t] and \smash[b]
+#define LYX_FORMAT_LYX 476 // gb: \smash[t], \smash[b] and \notag
#define LYX_FORMAT_TEX2LYX 476
#if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX
#define LYX_FORMAT_TEX2LYX 476
#if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX