Условное vspace между двумя разделами?

Условное vspace между двумя разделами?

Я хотел бы добавить дополнительный вертикальный пробел между двумя заголовками разделов, если они следуют друг за другом, т. е. между ними нет другого текста или чего-либо еще. Есть ли какая-то условная команда if, возможно, использующая что-то вроде if@aftersection...?

\documentclass[12pt, a4paper]{memoir}
\usepackage[utf8]{inputenc}

\begin{document}

\chapter{Chapter title}
\section{A first section title}
\section{A second section title}
Just some text. There should be a conditional vspace between the first 
section and the second section if there is nothing else between them.

\section{A third section}
Some more text here.

\section{A fourth section}
Some more text.

\end{document}

решение1

В общем, вам придется учитывать все возможные комбинации аргументов, предлагаемыеmemoir's \section. В частности, он принимает два необязательных аргумента (для ToC и текущего заголовка). Помимо этого, можно сканировать, чтобы увидеть, использует ли следующий \sectionтокен \@ifnextchar:

введите описание изображения здесь

\documentclass{memoir}

\usepackage{xparse}

\let\oldsection\section
\makeatletter
\RenewDocumentCommand{\section}{s o o m}{%
  \IfBooleanTF{#1}
    {\oldsection*{#4}}
    {\IfValueTF{#2}
      {\IfValueTF{#3}
        {\oldsection[#2][#3]{#4}}
        {\oldsection[#2]{#4}}}
      {\oldsection{#4}}}%
  \@ifnextchar\section{\vspace{5\baselineskip}}{}%
}
\makeatother

\begin{document}

\tableofcontents

\chapter{Chapter title}
\section{A first section title}
\section{A second section title}
Just some text. There should be a conditional \verb|\vspace| between the first 
section and the second section if there is nothing else between them.

\section{A third section}
Some more text here.

\section{A fourth section}
Some more text.

\end{document}

Вот еще один вариант:

Определите макрос \ifnextcommandis{<this>}{<true>}{<next>}, который захватывает три аргумента. Вы указываете <this>и <true>, и предполагается, что все, что следует за вашим макросом, будет макросом <next>:

\newcommand{\ifnextcommandis}[3]{%
  \def\thiscommand{#1}% Store this command
  \def\nextcommand{#3}% Store next command
  \ifx\nextcommand\thiscommand\relax
    #2%
  \fi
  \nextcommand}% Re-insert next command

\let\oldsection\section
\RenewDocumentCommand{\section}{s o o m}{%
  \IfBooleanTF{#1}
    {\oldsection*{#4}}
    {\IfValueTF{#2}
      {\IfValueTF{#3}
        {\oldsection[#2][#3]{#4}}
        {\oldsection[#2]{#4}}}
      {\oldsection{#4}}}%
  \ifnextcommandis{\section}{\vspace{5\baselineskip}}%
}

Связанный контент