두 섹션 제목이 서로 이어지는 경우, 즉 섹션 제목 사이에 다른 텍스트나 다른 내용이 없는 경우 두 섹션 제목 사이에 수직 공백을 추가하고 싶습니다. if@aftersection...과 같은 것을 사용하는 조건부 if 명령이 있습니까?
\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
의 \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>
and 를 지정하면 <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}}%
}