Ich möchte einen zusätzlichen vertikalen Abstand zwischen zwei Abschnittsüberschriften einfügen, wenn diese aufeinander folgen, d. h., wenn sich kein anderer Text oder sonstiges zwischen ihnen befindet. Gibt es einen bedingten if-Befehl, beispielsweise in der Form 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}
Antwort1
Im Allgemeinen müssen Sie alle möglichen Argumentkombinationen berücksichtigen, die sich ausmemoir
's \section
. Genauer gesagt nimmt es zwei optionale Argumente an (für das Inhaltsverzeichnis und den laufenden Header). Abgesehen davon kann man scannen, um zu sehen, ob das nächste Token \section
verwendet \@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}
Hier ist eine weitere Option:
Definieren Sie ein Makro \ifnextcommandis{<this>}{<true>}{<next>}
, das drei Argumente erfasst. Sie geben <this>
und an <true>
, und es wird angenommen, dass alles, was Ihrem Makro folgt, das Makro ist <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}}%
}