commit e2a29fe55686f4897044b65e71d62016929de479
Author: Juergen Spitzmueller <sp...@lyx.org>
Date:   Sat Jul 4 10:54:20 2020 +0200

    Prevent outputting \maketitle within an inset embedded in title.
    
    Amends [e4ef8ddc0f8202/lyxgit]
    
    (cherry picked from commit 0bddf448ef5756eee90c771ff3277dd805b2b0a3)
---
 src/insets/Inset.h       |    2 ++
 src/insets/InsetText.cpp |    9 ++++++---
 src/insets/InsetText.h   |    4 ++++
 src/output_latex.cpp     |    3 ++-
 4 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/src/insets/Inset.h b/src/insets/Inset.h
index a1c0518..c14f8b5 100644
--- a/src/insets/Inset.h
+++ b/src/insets/Inset.h
@@ -448,6 +448,8 @@ public:
        virtual InsetLayout const & getLayout() const;
        ///
        virtual bool isPassThru() const { return getLayout().isPassThru(); }
+       /// Is this inset embedded in a title?
+       virtual bool isInTitle() const { return false; }
        /// Is this inset's layout defined in the document's textclass?
        bool undefined() const;
        /// should this inset be handled like a normal character?
diff --git a/src/insets/InsetText.cpp b/src/insets/InsetText.cpp
index d0a37d6..358a377 100644
--- a/src/insets/InsetText.cpp
+++ b/src/insets/InsetText.cpp
@@ -79,14 +79,14 @@ using graphics::PreviewLoader;
 /////////////////////////////////////////////////////////////////////
 
 InsetText::InsetText(Buffer * buf, UsePlain type)
-       : Inset(buf), drawFrame_(false), frame_color_(Color_insetframe),
-       text_(this, type == DefaultLayout)
+       : Inset(buf), drawFrame_(false), intitle_context_(false),
+         frame_color_(Color_insetframe), text_(this, type == DefaultLayout)
 {
 }
 
 
 InsetText::InsetText(InsetText const & in)
-       : Inset(in), text_(this, in.text_)
+       : Inset(in), intitle_context_(false), text_(this, in.text_)
 {
        drawFrame_ = in.drawFrame_;
        frame_color_ = in.frame_color_;
@@ -793,6 +793,9 @@ void InsetText::updateBuffer(ParIterator const & it, 
UpdateType utype)
                        cnt.restoreLastLayout();
                        // FIXME cnt.restoreLastCounter()?
                }
+               // Record in this inset is embedded in a title layout
+               // This is needed to decide when \maketitle is output.
+               intitle_context_ = it.paragraph().layout().intitle;
        } else {
                DocumentClass const & tclass = 
buffer().masterBuffer()->params().documentClass();
                // Note that we do not need to call:
diff --git a/src/insets/InsetText.h b/src/insets/InsetText.h
index eea88cd..76d3a52 100644
--- a/src/insets/InsetText.h
+++ b/src/insets/InsetText.h
@@ -157,6 +157,8 @@ public:
        ///
        virtual bool allowMultiPar() const { return getLayout().isMultiPar(); }
        ///
+       bool isInTitle() const { return intitle_context_; }
+       ///
        /// should paragraphs be forced to use the empty layout?
        virtual bool forcePlainLayout(idx_type = 0) const
                { return getLayout().forcePlainLayout(); }
@@ -240,6 +242,8 @@ private:
        ///
        bool drawFrame_;
        ///
+       bool intitle_context_;
+       ///
        ColorCode frame_color_;
        ///
        Text text_;
diff --git a/src/output_latex.cpp b/src/output_latex.cpp
index c382050..3838ba3 100644
--- a/src/output_latex.cpp
+++ b/src/output_latex.cpp
@@ -1496,7 +1496,8 @@ void latexParagraphs(Buffer const & buf,
                                                        << "}\n";
                                }
                        }
-               } else if (runparams.need_maketitle && 
!runparams.have_maketitle && !layout.inpreamble) {
+               } else if (runparams.need_maketitle && !runparams.have_maketitle
+                          && !layout.inpreamble && !text.inset().isInTitle()) {
                        if (tclass.titletype() == TITLE_ENVIRONMENT) {
                                os << "\\end{" << from_ascii(tclass.titlename())
                                                << "}\n";
-- 
lyx-cvs mailing list
lyx-cvs@lists.lyx.org
http://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to