[LyX/master] Implement properly \limits and \nolimits
Enrico Forestieri
forenr at lyx.org
Mon Sep 7 21:34:50 UTC 2020
On Mon, Sep 07, 2020 at 07:02:39PM +0200, Enrico Forestieri wrote:
> On Mon, Sep 07, 2020 at 12:43:35PM +0200, Jean-Marc Lasgouttes wrote:
> > Le 07/09/2020 à 01:15, Scott Kostyshak a écrit :
> > > I think this might have caused a change in LaTeX exported in some cases.
> > > In the attached .lyx file, if you load with 2.3.x, it does not use the
> > > package esint. But if you load with master, it does.
> > >
> > > I think this is related to the following ticket:
> > >
> > > http://www.lyx.org/trac/ticket/9498
> >
> > The following patch fixes the issue: \intop is declared as requiring either
> > esint or amsmath. Enrico, does that sound OK to you? I am not sure of the
> > reason why one wants one of these packages.
>
> I am not sure, either. Strictly speaking, those package should be required
> only when using multiple integrals or cyclic integrals.
I think this is done for consistency.
> > And if this is OK, I should do the same for iint, iiint and iiiint, right?
>
> Yes, this fixes it, but also reveals another problem. If a macro appears
> in the expansion of a \def, its requirements are also taken into account.
> This is wrong, because the \def is only meant for on-screen representation
> and not for output. So, the correct patch would be fixing this glitch.
> This time you incurred in it, but I bet it will bite again.
The attached patch works for me.
--
Enrico
-------------- next part --------------
diff --git a/src/mathed/InsetMathMacro.cpp b/src/mathed/InsetMathMacro.cpp
index bf363b61db..5743dd0e45 100644
--- a/src/mathed/InsetMathMacro.cpp
+++ b/src/mathed/InsetMathMacro.cpp
@@ -967,7 +967,16 @@ void InsetMathMacro::validate(LaTeXFeatures & features) const
// validate the cells and the definition
if (displayMode() == DISPLAY_NORMAL) {
- d->definition_.validate(features);
+ // Don't update requirements if the macro comes from
+ // the symbols file and has not been redefined.
+ MathWordList const & words = mathedWordList();
+ MathWordList::const_iterator it = words.find(name());
+ MacroNameSet macros;
+ buffer().listMacroNames(macros);
+ if (it == words.end() || it->second.inset != "macro"
+ || macros.find(name()) != macros.end()) {
+ d->definition_.validate(features);
+ }
InsetMathNest::validate(features);
}
}
More information about the lyx-devel
mailing list