Обновление оглавления, разделы, разрывы жирного шрифта для номеров страниц разделов и заголовков

Обновление оглавления, разделы, разрывы жирного шрифта для номеров страниц разделов и заголовков

Вроде бы простая проблема, но не ясно, как ее решить.

Учти это

\renewcommand{\thesection}{\arabic{section} ABCXYZ}
...
\tableofcontents
\section{The title of the section}

создаст перекрытие между числом «1» и «Названием раздела» и ABCXYZ.

Расстояние между номером и заголовком фиксируется оглавлением. Оно не является переменным. Вы не можете ничего туда поместить. Конечно, это та же проблема, что и когда номер раздела слишком длинный по сравнению с фиксированным расстоянием:\setcounter{section}{1000}

Следующее решение

\makeatletter\renewcommand*\l@section{\@dottedtocline{1}{...}{...}}\makeatother

работает более или менее.

Однако, похоже, он сбрасывает некоторые обычные параметры toc.

По крайней мере, он визуально сбрасывает номера разделов и заголовки разделов, делая их жирными, в то время как плитки подразделов и заголовки подподразделов не жирными. Номера страниц для разделов также перестают быть жирными. Становятся похожими на номера страниц подразделов в toc.

Это плохо.

Упаковка в

\textbf{arabic{section}}внутри\renewcommand{\thesection}

работает. Но... не может достичь заголовка раздела.

\section{\textbf{TITLE IS HERE}}

не идеален по разным причинам.

В: Как вернуть оставшуюся часть обычного жирного шрифта и форматирования в оглавлении по умолчанию после обновления *l@section?

Пожалуйста, без каких-либо упаковок.

Подвопрос такой: я определяю длину и задаю ее ширину, равную длине ```\arabic{section} ABCXYZ'', и теперь, задав расстояние до конца секции довольно большим, я хочу вычесть это переменное расстояние.

Результатом будет то, что номер раздела, будучи маленьким, не будет иметь большого пробела между ним и заголовком. Кажется, это \renewcommand{\thesection}{...}неправильное место для его размещения. Это не повлияет на интервал заголовка раздела.

В: Что еще необходимо обновить и где правильно вставить объект hspace{\correction}, чтобы изменить заголовок раздела, отображаемый в оглавлении.

Вероятно, это как раз то самое место, где можно восстановить форматирование по умолчанию.

решение1

Определение \l@sectionпроисходит из класса документа, так что это не пакет, но и не часть LaTeX в точности. Я предлагаю вам поместить

\makeatletter \show\l@section \makeatother

в вашем документе, чтобы увидеть существующее определение.

Я предполагаю, что вы используете класс документа "article", где \l@sectionиспользуется жирный шрифт, и не используется \@dottedtoclineвообще! В определении, найденном в article.cls, есть загадочная настройка

\setlength\@tempdima{1.5em}%

и это ширина номера раздела (используется \numberline).

Я не буду публиковать все определение, потому что у меня нет последней версии. Но, возможно, вы захотите пересмотреть использование пакета для форматирования toc.

Альтернативой является переопределение \numberlineтаким образом, чтобы номер и заголовок просто не перекрывали друг друга!

\makeatletter
\renewcommand\numberline[1]{%
\begingroup
 \sbox\@tempboxa{#1 }%
 \ifdim\wd\@tempboxa<\@tempdima
  \wd\@tempboxa=\@tempdima
 \fi
 \usebox\@tempboxa
\endgroup
}

решение2

Я знаю, что вы сказали, что не хотите использовать никакие пакеты, но ниже я использовал пакет, tocloftчтобы указать, что можно сделать. Единственное изменение в ToC — это место для секционных номеров. Если вы хотели других изменений, то пакет предоставляет много возможностей ( texdoc tocloft).

    % tocprob5.tex SE 533343 section numbers
\documentclass{article}
\renewcommand{\thesection}{\arabic{section} ABCXYZ}
\usepackage{tocloft}
\newlength{\mylen} 
\settowidth{\mylen}{\textbf{99 ABCXYZ}} % the space required for the section number
\setlength{\cftsecnumwidth}{\mylen} % set space for section number
\setlength{\cftsubsecnumwidth}{\mylen} % set space for subsection number
\begin{document}
\tableofcontents
\section{Section}
\subsection{Subsection}
\section{Another section}
\end{document}

Надеюсь, вы не собираетесь использовать ваш пример переопределения \thesectionв вашем реальном документе, так как тогда первый \subsectionв первом \sectionбудет пронумерован как "1 ABCXYZ.1", что для меня выглядит действительно странно. Возможно, вы захотите сделать некоторое переопределение нумерации подразделов.

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