- if ((style == next_layout
- && !style.parbreak_is_newline
- && style.latextype != LATEX_ITEM_ENVIRONMENT
- && style.latextype != LATEX_LIST_ENVIRONMENT
- && style.align == par.getAlign()
- && nextpar->getDepth() == par.getDepth()
- && nextpar->getAlign() == par.getAlign())
- || (!next_layout.isEnvironment()
- && nextpar->getDepth() > par.getDepth()
- && nextpar->getAlign() == par.getAlign())) {
- os << '\n';
+ // A newline '\n' is always output before a command,
+ // so avoid doubling it.
+ if (!next_layout.isCommand()) {
+ // Here we now try to avoid spurious empty lines by
+ // outputting a paragraph break only if: (case 1) the
+ // paragraph style allows parbreaks and no \begin, \end
+ // or \item tags are going to follow (i.e., if the next
+ // isn't the first or the current isn't the last
+ // paragraph of an environment or itemize) and the
+ // depth and alignment of the following paragraph is
+ // unchanged, or (case 2) the following is a
+ // non-environment paragraph whose depth is increased
+ // but whose alignment is unchanged, or (case 3) the
+ // paragraph is a command not followed by an environment
+ // and the alignment of the current and next paragraph
+ // is unchanged.
+ if ((style == next_layout
+ && !style.parbreak_is_newline
+ && style.latextype != LATEX_ITEM_ENVIRONMENT
+ && style.latextype != LATEX_LIST_ENVIRONMENT
+ && style.align == par.getAlign()
+ && nextpar->getDepth() == par.getDepth()
+ && nextpar->getAlign() == par.getAlign())
+ || (!next_layout.isEnvironment()
+ && nextpar->getDepth() > par.getDepth()
+ && nextpar->getAlign() == par.getAlign())
+ || (style.isCommand()
+ && !next_layout.isEnvironment()
+ && style.align == par.getAlign()
+ && next_layout.align == nextpar->getAlign())) {
+ os << '\n';
+ }