From: Juergen Spitzmueller Date: Sat, 4 Jul 2020 08:54:20 +0000 (+0200) Subject: Prevent outputting \maketitle within an inset embedded in title. X-Git-Tag: 2.3.6~77 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=e2a29fe55686f4897044b65e71d62016929de479;p=features.git Prevent outputting \maketitle within an inset embedded in title. Amends [e4ef8ddc0f8202/lyxgit] (cherry picked from commit 0bddf448ef5756eee90c771ff3277dd805b2b0a3) --- diff --git a/src/insets/Inset.h b/src/insets/Inset.h index a1c0518a2c..c14f8b526f 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 d0a37d6732..358a377542 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 eea88cdd69..76d3a5217f 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 c382050680..3838ba3993 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";