Я хотел бы добавить дополнительный вертикальный пробел между двумя заголовками разделов, если они следуют друг за другом, т. е. между ними нет другого текста или чего-либо еще. Есть ли какая-то условная команда 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}}%
}