В примере с латексом (с использованием класса article) я получаю это в файле .toc:
\contentsline {section}{\numberline {1}test section without number}{1}{section.1}
Важной частью здесь является макрос \numberline
. Переопределение этого к чему-то пустому как
\def\numberline#1{}
удалит все нумерации в токе, а не в другом месте.
Если вы получите что-то вроде \tocsubsection
вместо .toc (см. Другой ответ), то вы, вероятно, можете сделать что-то вроде:
\let\oldtocsubsection=\tocsubsection
\def\tocsubsection#1#2#3{\oldtocsubsection{#1}{}{#3}}
Однако это удаляет все чисел в оглавлении. Если вы хотите контролировать, на каком уровне исчезает нумерация, макрос \contentsline
расширяется до разных макросов в зависимости от контекста, например, \l@section
. Эти макросы, в свою очередь, используют общий макрос \@dottedtocline
. Это то, что вам нужно изменить, в котором мы будем условно переопределять \numberline
.
Чтобы контролировать глубину остановки отображения чисел, давайте определим новый счетчик:
\newcounter{sectocnonumdepth}
\setcounter{sectocnonumdepth}{2}
Тогда условное переопределение будет следующей строкой (извлечено из кода для большей читаемости).
\ifnum #1>\c@sectocnonumdepth \def\numberline##1{}\fi%
Я просто скопировал определение \@dottedtocline
из исходного файла latex.ltx
и добавил проверку внутри. Вот код для всего примера:
\newcounter{sectocnonumdepth}
\setcounter{sectocnonumdepth}{2}
\makeatletter
\def\@dottedtocline#1#2#3#4#5{%
\ifnum #1>\c@tocdepth \else
\vskip \z@ \@plus.2\p@
{\ifnum #1>\c@sectocnonumdepth \def\numberline##1{}\fi%
\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
\parindent #2\relax\@afterindenttrue
\interlinepenalty\@M
\leavevmode
\@tempdima #3\relax
\advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
{#4}\nobreak
\leaders\hbox{$\m@th
\mkern \@dotsep mu\hbox{.}\mkern \@dotsep
mu$}\hfill
\nobreak
\hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5}%
\par}%
\fi}
\makeatother
Последнее примечание: заголовок раздела и подраздела будет начинаться с одной горизонтальной позиции, поскольку номер для отображения отсутствует. Если вы хотите больше отступов, вы можете, например, добавить \quad
к новому определению \numberline
, или даже использовать оригинальное определение только с удаленным #1
:
\def\numberline##1{\hb@xt@\@tempdima{\hfil}}