\\noindent in a paragraph that starts with \\vspace is possible

But the \\vspace must precede \\noindent (the latter leaves vmode)
This commit is contained in:
Juergen Spitzmueller 2021-10-31 11:56:53 +01:00
parent 96a4dd235e
commit f0126b9fdf
3 changed files with 29 additions and 11 deletions

View File

@ -283,7 +283,7 @@ public:
/** Whether we are in a table cell.
* For newline, it matters whether its content is aligned or not.
*/
*/
TableCell inTableCell = NO;
/** Whether we are inside a float or subfloat.
@ -422,6 +422,9 @@ public:
/// Explicit output folder, if any is desired
std::string export_folder;
/// A postponed \\noindent (after VSpace)
mutable bool need_noindent = false;
};

View File

@ -2355,14 +2355,23 @@ int Paragraph::Private::startTeXParParams(BufferParams const & bparams,
// 1. that cannot have indentation or are indented always,
// 2. that are not part of the immediate text sequence (e.g., contain only floats),
// 3. that are PassThru,
// 4. that are centered,
// 5. or start with a vspace.
if (canindent && params_.noindent() && owner_->isPartOfTextSequence()
&& !layout_->pass_thru && curAlign != LYX_ALIGN_CENTER
&& !owner_->empty()
&& (!owner_->isInset(0) || owner_->getInset(0)->lyxCode() != VSPACE_CODE)) {
os << "\\noindent" << termcmd;
column += 10;
// 4. or that are centered.
if (canindent && params_.noindent()
&& owner_->isPartOfTextSequence()
&& !layout_->pass_thru
&& curAlign != LYX_ALIGN_CENTER) {
if (!owner_->empty()
&& (owner_->isInset(0)
&& owner_->getInset(0)->lyxCode() == VSPACE_CODE))
// If the paragraph starts with a vspace, the \\noindent
// needs to come after that (as it leaves vmode).
// If the paragraph consists only of the vspace,
// \\noindent is not needed at all.
runparams.need_noindent = owner_->size() > 1;
else {
os << "\\noindent" << termcmd;
column += 10;
}
}
if (curAlign == layout_->align)

View File

@ -209,9 +209,15 @@ void InsetVSpace::draw(PainterInfo & pi, int x, int y) const
}
void InsetVSpace::latex(otexstream & os, OutputParams const &) const
void InsetVSpace::latex(otexstream & os, OutputParams const & rp) const
{
os << from_ascii(space_.asLatexCommand(buffer().params())) << '\n';
os << from_ascii(space_.asLatexCommand(buffer().params())) << breakln;
if (rp.need_noindent) {
// If the paragraph starts with a vspace and has more than that
// content, the \\noindent needs to come after that
// (as \\noindent leaves vmode).
os << "\\noindent" << termcmd;
}
}