From: Jean-Marc Lasgouttes Date: Mon, 25 Jul 2022 20:09:14 +0000 (+0200) Subject: Reimplement support for numbering of equation previews X-Git-Tag: 2.4-beta2~550 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=a65e12d6;hp=a42f7ea7cd0e4d5d9594f363bce628451515d24b;p=lyx.git Reimplement support for numbering of equation previews This patch simplifies and fixes the generation of previews with numbering. Instead of saving the counter values (which is complicated and error prone), the \thequation macro is set to the numbers_ string which has been computed by updateBuffer for screen display. Harcoding the number in the formula means that two equations with different numbers have different previews, which is the subject of the bug. The special code for saving counters in updateBuffer and outputing them in preparePreview from 645f9fdf (ticket #6894) is removed and replaced by this simpler approach. This fixes ticket #11535. --- diff --git a/src/mathed/InsetMathHull.cpp b/src/mathed/InsetMathHull.cpp index 8ede260632..8ea552dd29 100644 --- a/src/mathed/InsetMathHull.cpp +++ b/src/mathed/InsetMathHull.cpp @@ -253,20 +253,9 @@ void InsetMathHull::updateBuffer(ParIterator const & it, UpdateType utype, bool Counters & cnts = buffer_->masterBuffer()->params().documentClass().counters(); - // right now, we only need to do this at export time - if (utype == OutputUpdate) { - for (size_t i = 0; i < numcnts; ++i) { - docstring const cnt = from_ascii(counters_to_save[i]); - if (cnts.hasCounter(cnt)) - counter_map[cnt] = cnts.value(cnt); - } - } - // this has to be done separately docstring const eqstr = from_ascii("equation"); if (cnts.hasCounter(eqstr)) { - if (utype == OutputUpdate) - counter_map[eqstr] = cnts.value(eqstr); for (size_t i = 0; i != label_.size(); ++i) { if (numbered(i)) { Paragraph const & par = it.paragraph(); @@ -837,29 +826,7 @@ void InsetMathHull::preparePreview(DocIterator const & pos, if (lsize != "normalsize" && !prefixIs(lsize, "error")) setfont += from_ascii("\\" + lsize + '\n'); - docstring setcnt; - if (forexport && haveNumbers()) { - docstring eqstr = from_ascii("equation"); - CounterMap::const_iterator it = counter_map.find(eqstr); - if (it != counter_map.end()) { - int num = it->second; - if (num >= 0) - setcnt += from_ascii("\\setcounter{") + eqstr + '}' + - '{' + convert(num) + '}' + '\n'; - } - for (size_t i = 0; i != numcnts; ++i) { - docstring cnt = from_ascii(counters_to_save[i]); - it = counter_map.find(cnt); - if (it == counter_map.end()) - continue; - int num = it->second; - if (num > 0) - setcnt += from_ascii("\\setcounter{") + cnt + '}' + - '{' + convert(num) + '}'; - } - } - docstring const snippet = macro_preamble + setfont + setcnt - + latexString(*this) + endfont; + docstring const snippet = macro_preamble + setfont + latexString(*this) + endfont; LYXERR(Debug::MACROS, "Preview snippet: " << snippet); preview_->addPreview(snippet, *buffer, forexport); } @@ -1696,6 +1663,10 @@ void InsetMathHull::eol(TeXMathStream & os, row_type row, bool fragile, bool lat else if (numbered_[row] == NOTAG) os<< "\\notag "; } + if (os.output() == TeXMathStream::wsPreview && !numbers_[row].empty()) { + os << "\\global\\def\\theequation{" << numbers_[row] << "}\n"; + } + } // Never add \\ on the last empty line of eqnarray and friends last_eoln = false; diff --git a/src/mathed/InsetMathHull.h b/src/mathed/InsetMathHull.h index 52e8177631..92903c5e42 100644 --- a/src/mathed/InsetMathHull.h +++ b/src/mathed/InsetMathHull.h @@ -270,10 +270,6 @@ private: unique_ptr preview_; /// DocIterator docit_; - /// - typedef std::map CounterMap; - /// used to store current values of important counters - CounterMap counter_map; // // Incorporate me //