mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-25 05:55:34 +00:00
Properly fix handling of title layouts within insets (#11787)
(cherry picked from commit e4ef8ddc0f
)
This commit is contained in:
parent
83d76a66f6
commit
b86b80d74e
@ -20,9 +20,9 @@ namespace lyx {
|
|||||||
|
|
||||||
OutputParams::OutputParams(Encoding const * enc)
|
OutputParams::OutputParams(Encoding const * enc)
|
||||||
: flavor(LATEX), math_flavor(NotApplicable), nice(false), is_child(false),
|
: flavor(LATEX), math_flavor(NotApplicable), nice(false), is_child(false),
|
||||||
moving_arg(false), intitle(false), inbranch(false), inulemcmd(0),
|
moving_arg(false), intitle(false), need_maketitle(false), have_maketitle(false),
|
||||||
local_font(0), master_language(0), encoding(enc), free_spacing(false),
|
inbranch(false), inulemcmd(0), local_font(0), master_language(0), encoding(enc),
|
||||||
use_babel(false), use_polyglossia(false), use_hyperref(false),
|
free_spacing(false), use_babel(false), use_polyglossia(false), use_hyperref(false),
|
||||||
use_indices(false), use_japanese(false), linelen(0), depth(0),
|
use_indices(false), use_japanese(false), linelen(0), depth(0),
|
||||||
exportdata(new ExportData), inDisplayMath(false), wasDisplayMath(false),
|
exportdata(new ExportData), inDisplayMath(false), wasDisplayMath(false),
|
||||||
inComment(false), openbtUnit(false), only_childbibs(false),
|
inComment(false), openbtUnit(false), only_childbibs(false),
|
||||||
|
@ -102,6 +102,15 @@ public:
|
|||||||
*/
|
*/
|
||||||
bool intitle;
|
bool intitle;
|
||||||
|
|
||||||
|
/** need_maketitle == true means that the last layout was a title layout
|
||||||
|
* this is to track when \maketitle needs to be output.
|
||||||
|
*/
|
||||||
|
mutable bool need_maketitle;
|
||||||
|
|
||||||
|
/** have_maketitle == true means that \maketitle already hase been output.
|
||||||
|
*/
|
||||||
|
mutable bool have_maketitle;
|
||||||
|
|
||||||
/** inbranch == true means that the environment being typeset
|
/** inbranch == true means that the environment being typeset
|
||||||
is inside an active branch inset.
|
is inside an active branch inset.
|
||||||
*/
|
*/
|
||||||
|
@ -2784,6 +2784,10 @@ void Paragraph::latex(BufferParams const & bparams,
|
|||||||
// such as Note that do not produce any output, so that no
|
// such as Note that do not produce any output, so that no
|
||||||
// command is ever executed but its opening was recorded.
|
// command is ever executed but its opening was recorded.
|
||||||
runparams.inulemcmd = rp.inulemcmd;
|
runparams.inulemcmd = rp.inulemcmd;
|
||||||
|
|
||||||
|
// These need to be passed upstream as well
|
||||||
|
runparams.need_maketitle = rp.need_maketitle;
|
||||||
|
runparams.have_maketitle = rp.have_maketitle;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we have an open font definition, we have to close it
|
// If we have an open font definition, we have to close it
|
||||||
|
@ -297,6 +297,9 @@ void InsetBranch::latex(otexstream & os, OutputParams const & runparams) const
|
|||||||
OutputParams rp = runparams;
|
OutputParams rp = runparams;
|
||||||
rp.inbranch = true;
|
rp.inbranch = true;
|
||||||
InsetText::latex(os, rp);
|
InsetText::latex(os, rp);
|
||||||
|
// These need to be passed upstream
|
||||||
|
runparams.need_maketitle = rp.need_maketitle;
|
||||||
|
runparams.have_maketitle = rp.have_maketitle;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -501,6 +501,9 @@ void InsetText::latex(otexstream & os, OutputParams const & runparams) const
|
|||||||
// Output the contents of the inset
|
// Output the contents of the inset
|
||||||
latexParagraphs(buffer(), text_, os, rp);
|
latexParagraphs(buffer(), text_, os, rp);
|
||||||
runparams.encoding = rp.encoding;
|
runparams.encoding = rp.encoding;
|
||||||
|
// These need to be passed upstream as well
|
||||||
|
runparams.need_maketitle = rp.need_maketitle;
|
||||||
|
runparams.have_maketitle = rp.have_maketitle;
|
||||||
|
|
||||||
if (!il.rightdelim().empty())
|
if (!il.rightdelim().empty())
|
||||||
os << il.rightdelim();
|
os << il.rightdelim();
|
||||||
|
@ -1318,6 +1318,9 @@ void TeXOnePar(Buffer const & buf,
|
|||||||
else
|
else
|
||||||
runparams_in.encoding = runparams.encoding;
|
runparams_in.encoding = runparams.encoding;
|
||||||
|
|
||||||
|
// These need to be passed upstream as well
|
||||||
|
runparams_in.need_maketitle = runparams.need_maketitle;
|
||||||
|
runparams_in.have_maketitle = runparams.have_maketitle;
|
||||||
|
|
||||||
// we don't need a newline for the last paragraph!!!
|
// we don't need a newline for the last paragraph!!!
|
||||||
// Note from JMarc: we will re-add a \n explicitly in
|
// Note from JMarc: we will re-add a \n explicitly in
|
||||||
@ -1461,9 +1464,6 @@ void latexParagraphs(Buffer const & buf,
|
|||||||
pit_type pit = runparams.par_begin;
|
pit_type pit = runparams.par_begin;
|
||||||
// lastpit is for the language check after the loop.
|
// lastpit is for the language check after the loop.
|
||||||
pit_type lastpit = pit;
|
pit_type lastpit = pit;
|
||||||
// variables used in the loop:
|
|
||||||
bool was_title = false;
|
|
||||||
bool already_title = false;
|
|
||||||
DocumentClass const & tclass = bparams.documentClass();
|
DocumentClass const & tclass = bparams.documentClass();
|
||||||
|
|
||||||
// Did we already warn about inTitle layout mixing? (we only warn once)
|
// Did we already warn about inTitle layout mixing? (we only warn once)
|
||||||
@ -1478,7 +1478,7 @@ void latexParagraphs(Buffer const & buf,
|
|||||||
tclass.plainLayout() : par->layout();
|
tclass.plainLayout() : par->layout();
|
||||||
|
|
||||||
if (layout.intitle) {
|
if (layout.intitle) {
|
||||||
if (already_title) {
|
if (runparams.have_maketitle) {
|
||||||
if (!gave_layout_warning && !runparams.dryrun) {
|
if (!gave_layout_warning && !runparams.dryrun) {
|
||||||
gave_layout_warning = true;
|
gave_layout_warning = true;
|
||||||
frontend::Alert::warning(_("Error in latexParagraphs"),
|
frontend::Alert::warning(_("Error in latexParagraphs"),
|
||||||
@ -1488,15 +1488,15 @@ void latexParagraphs(Buffer const & buf,
|
|||||||
"could lead to missing or incorrect output."
|
"could lead to missing or incorrect output."
|
||||||
), layout.name()));
|
), layout.name()));
|
||||||
}
|
}
|
||||||
} else if (!was_title) {
|
} else if (!runparams.need_maketitle) {
|
||||||
was_title = true;
|
runparams.need_maketitle = true;
|
||||||
if (tclass.titletype() == TITLE_ENVIRONMENT) {
|
if (tclass.titletype() == TITLE_ENVIRONMENT) {
|
||||||
os << "\\begin{"
|
os << "\\begin{"
|
||||||
<< from_ascii(tclass.titlename())
|
<< from_ascii(tclass.titlename())
|
||||||
<< "}\n";
|
<< "}\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (was_title && !already_title && !layout.inpreamble) {
|
} else if (runparams.need_maketitle && !runparams.have_maketitle && !layout.inpreamble) {
|
||||||
if (tclass.titletype() == TITLE_ENVIRONMENT) {
|
if (tclass.titletype() == TITLE_ENVIRONMENT) {
|
||||||
os << "\\end{" << from_ascii(tclass.titlename())
|
os << "\\end{" << from_ascii(tclass.titlename())
|
||||||
<< "}\n";
|
<< "}\n";
|
||||||
@ -1505,8 +1505,8 @@ void latexParagraphs(Buffer const & buf,
|
|||||||
os << "\\" << from_ascii(tclass.titlename())
|
os << "\\" << from_ascii(tclass.titlename())
|
||||||
<< "\n";
|
<< "\n";
|
||||||
}
|
}
|
||||||
already_title = true;
|
runparams.have_maketitle = true;
|
||||||
was_title = false;
|
runparams.need_maketitle = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (layout.isCommand() && !layout.latexname().empty()
|
if (layout.isCommand() && !layout.latexname().empty()
|
||||||
@ -1541,10 +1541,10 @@ void latexParagraphs(Buffer const & buf,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// It might be that we only have a title in this document.
|
// It might be that we only have a title in this document.
|
||||||
// But if we're in a branch, this is not the end of
|
// But if we're in an inset, this is not the end of
|
||||||
// the document. (There may be some other checks of this
|
// the document. (There may be some other checks of this
|
||||||
// kind that are needed.)
|
// kind that are needed.)
|
||||||
if (was_title && !already_title && !runparams.inbranch) {
|
if (runparams.need_maketitle && !runparams.have_maketitle && maintext) {
|
||||||
if (tclass.titletype() == TITLE_ENVIRONMENT) {
|
if (tclass.titletype() == TITLE_ENVIRONMENT) {
|
||||||
os << "\\end{" << from_ascii(tclass.titlename())
|
os << "\\end{" << from_ascii(tclass.titlename())
|
||||||
<< "}\n";
|
<< "}\n";
|
||||||
|
@ -45,8 +45,7 @@ What's new
|
|||||||
|
|
||||||
* DOCUMENT INPUT/OUTPUT
|
* DOCUMENT INPUT/OUTPUT
|
||||||
|
|
||||||
- Fix wrong output of quotation marks in headings and captions with hyperref
|
- Fix output of titles in branches and other insets (follow-up to bug 11787).
|
||||||
enabled (bug 11889).
|
|
||||||
|
|
||||||
|
|
||||||
* USER INTERFACE
|
* USER INTERFACE
|
||||||
|
Loading…
Reference in New Issue
Block a user