]> git.lyx.org Git - lyx.git/commitdiff
Reimplement support for numbering of equation previews
authorJean-Marc Lasgouttes <lasgouttes@lyx.org>
Mon, 25 Jul 2022 20:09:14 +0000 (22:09 +0200)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Tue, 26 Jul 2022 20:47:53 +0000 (22:47 +0200)
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.

src/mathed/InsetMathHull.cpp
src/mathed/InsetMathHull.h

index 8ede26063284c30f2b9b72ae3946df15e8358de6..8ea552dd29ef15ed6f4b6cec1b59639b290a2d63 100644 (file)
@@ -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<docstring>(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<docstring>(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;
index 52e8177631cf93f738cf4b0da6e47e95d1fde036..92903c5e424b034a584c9f42b501749d538a690c 100644 (file)
@@ -270,10 +270,6 @@ private:
        unique_ptr<RenderPreview> preview_;
        ///
        DocIterator docit_;
-       ///
-       typedef std::map<docstring, int> CounterMap;
-       /// used to store current values of important counters
-       CounterMap counter_map;
 //
 // Incorporate me
 //