Как контролировать интервалы в оглавлении для разных разделов?

Как контролировать интервалы в оглавлении для разных разделов?

Мне нужно оглавление с двойным интервалом между заголовками глав, но одинарным между разделами и подразделами. Я знаю, что по этому поводу есть несколько связанных вопросов, но разница в том, что при использовании некоторых из предлагаемых решений, таких как \setlength{\cftbeforesecskip}{-2pt} или \renewcommand\cftchapafterpnum{\vspace{}}, которые изменяют интервал до или после раздела или подраздела, и если рассматриваемый заголовок состоит из одной строки, это нормально, но если это длинный заголовок раздела из трех строк, то он дает очень нерегулярный интервал, с желаемым интервалом над заголовком раздела, а затем то, что выглядит как половинный интервал и снова одинарный интервал после номера страницы.
Другое решение, которое я попробовал, это в самом тексте использовать что-то вроде , \section[\singlespacing{\noindent Long title}]{Long title}но тогда, хотя я получаю строки с одинарным интервалом в оглавлении, я также получаю нежелательное вертикальное пространство между номером раздела и началом заголовка раздела. Есть ли способ равномерно изменить интервал в оглавлении по иерархическим разделам или избежать дополнительного вертикального пространства во втором подходе? Также стоит отметить, что я загружаю пакет setspaceи использую его \onehalfspacingв преамбуле моего документа, поскольку основная часть должна быть с интервалом в половину. Большое спасибо, вот как это выглядит у меня:

\documentclass[12pt,reqno]{report}
\usepackage[titles]{tocloft}
\setlength{\cftbeforesecskip}{-2.5pt}
\setlength{\cftbeforesubsecskip}{-2.5pt}
\usepackage{setspace}
\onehalfspacing
\usepackage{blindtext}
\begin{document}
\tableofcontents
\newpage
\chapter{this is a really really long title that someone else wrote for all the penguins in the world}
\section{this is a really really really really really really really really really really really really really really really really really really really really really really really really really really really really really really long title having more than three lines of text to appear on the toc.}
\subsection{this is a really really really really really really really really really really really really really really really really really really really really really really really really really really really really really really long title having more than three lines of text to appear on the toc.}
\blinddocument
\blinddocument
\blinddocument
\blinddocument
\end{document}

На этом MWE я показываю один из вариантов, которые я пробовал. Надеюсь, кто-нибудь сможет прокомментировать это. Спасибо.

решение1

Вы можете воспользоваться этой возможностью \cftchapafterpnum, чтобы добавить вертикальный интервал после названия главы в оглавлении.

\documentclass[12pt,reqno]{report}
\usepackage[titles]{tocloft}
\usepackage{blindtext}

\renewcommand{\cftchapafterpnum}{\vspace{\cftbeforechapskip}}

\begin{document}
\tableofcontents
\newpage
\chapter{this is a really really long title that someone else wrote for all the penguins in the world}
\section{this is a really really really really really really really really really really really really really really really really really really really really really really really really really really really really really really long title having more than three lines of text to appear on the toc.}
\subsection{this is a really really really really really really really really really really really really really really really really really really really really really really really really really really really really really really long title having more than three lines of text to appear on the toc.}
\blinddocument
\blinddocument
\blinddocument
\blinddocument
\end{document}

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

Однако длинные заголовки не имеют никакого отношения к проблеме; похоже, вы загружаете текст setspaceс помощью \onehalfspacing, вероятно, чтобы соответствовать глупым требованиям вашего учреждения (если нет, просто используйте стандартные интервалы, и вы останетесь довольны).

Просто укажите это \singlespacingпри составлении оглавления.

\documentclass[12pt,reqno]{report}
\usepackage[titles]{tocloft}
\usepackage{setspace}
\usepackage{blindtext}

\renewcommand{\cftchapafterpnum}{\vspace{\cftbeforechapskip}}

\onehalfspacing

\begin{document}

\begingroup\singlespacing
\tableofcontents
\endgroup

\chapter{this is a really really long title that someone else wrote 
for all the penguins in the world}
\section{this is a really really really really really really really
really really long title having more than three lines of text to appear on the toc.}
\subsection{this is a really really really really really really really
really really really long title having more than three lines of text to appear on the toc.}

\blinddocument

\end{document}

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

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