OutputParams::OutputParams(Encoding const * enc)
: flavor(LATEX), math_flavor(NotApplicable), nice(false), is_child(false),
- moving_arg(false), intitle(false), inbranch(false), inulemcmd(0),
- local_font(0), master_language(0), encoding(enc), free_spacing(false),
- use_babel(false), use_polyglossia(false), use_hyperref(false),
+ moving_arg(false), intitle(false), need_maketitle(false), have_maketitle(false),
+ inbranch(false), inulemcmd(0), local_font(0), master_language(0), encoding(enc),
+ free_spacing(false), use_babel(false), use_polyglossia(false), use_hyperref(false),
use_indices(false), use_japanese(false), linelen(0), depth(0),
exportdata(new ExportData), inDisplayMath(false), wasDisplayMath(false),
inComment(false), openbtUnit(false), only_childbibs(false),
*/
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
is inside an active branch inset.
*/
// such as Note that do not produce any output, so that no
// command is ever executed but its opening was recorded.
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
OutputParams rp = runparams;
rp.inbranch = true;
InsetText::latex(os, rp);
+ // These need to be passed upstream
+ runparams.need_maketitle = rp.need_maketitle;
+ runparams.have_maketitle = rp.have_maketitle;
}
}
// Output the contents of the inset
latexParagraphs(buffer(), text_, os, rp);
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())
os << il.rightdelim();
else
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!!!
// Note from JMarc: we will re-add a \n explicitly in
pit_type pit = runparams.par_begin;
// lastpit is for the language check after the loop.
pit_type lastpit = pit;
- // variables used in the loop:
- bool was_title = false;
- bool already_title = false;
DocumentClass const & tclass = bparams.documentClass();
// Did we already warn about inTitle layout mixing? (we only warn once)
tclass.plainLayout() : par->layout();
if (layout.intitle) {
- if (already_title) {
+ if (runparams.have_maketitle) {
if (!gave_layout_warning && !runparams.dryrun) {
gave_layout_warning = true;
frontend::Alert::warning(_("Error in latexParagraphs"),
"could lead to missing or incorrect output."
), layout.name()));
}
- } else if (!was_title) {
- was_title = true;
+ } else if (!runparams.need_maketitle) {
+ runparams.need_maketitle = true;
if (tclass.titletype() == TITLE_ENVIRONMENT) {
os << "\\begin{"
<< from_ascii(tclass.titlename())
<< "}\n";
}
}
- } else if (was_title && !already_title && !layout.inpreamble) {
+ } else if (runparams.need_maketitle && !runparams.have_maketitle && !layout.inpreamble) {
if (tclass.titletype() == TITLE_ENVIRONMENT) {
os << "\\end{" << from_ascii(tclass.titlename())
<< "}\n";
os << "\\" << from_ascii(tclass.titlename())
<< "\n";
}
- already_title = true;
- was_title = false;
+ runparams.have_maketitle = true;
+ runparams.need_maketitle = false;
}
if (layout.isCommand() && !layout.latexname().empty()
}
// 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
// kind that are needed.)
- if (was_title && !already_title && !runparams.inbranch) {
+ if (runparams.need_maketitle && !runparams.have_maketitle && maintext) {
if (tclass.titletype() == TITLE_ENVIRONMENT) {
os << "\\end{" << from_ascii(tclass.titlename())
<< "}\n";
* DOCUMENT INPUT/OUTPUT
-- Fix wrong output of quotation marks in headings and captions with hyperref
- enabled (bug 11889).
+- Fix output of titles in branches and other insets (follow-up to bug 11787).
* USER INTERFACE