Vspace condicional entre duas seções?

Vspace condicional entre duas seções?

Eu gostaria de adicionar um espaço vertical adicional entre dois títulos de seção se eles seguirem um ao outro, ou seja, não houver outro texto ou qualquer outra coisa entre eles. Existe algum comando if condicional, talvez usando algo como 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}

Responder1

Em geral, você deve acomodar todas as combinações possíveis de argumentos oferecidas pormemoiré \section. Especificamente, são necessários dois argumentos opcionais (para o ToC e o cabeçalho em execução). Além disso, pode-se verificar se o próximo token está \sectionusando \@ifnextchar:

insira a descrição da imagem aqui

\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}

Aqui está outra opção:

Defina uma macro \ifnextcommandis{<this>}{<true>}{<next>}que capture três argumentos. Você especifica <this>and <true>, e presume-se que tudo o que segue sua macro será a <next>macro:

\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}}%
}

informação relacionada