Латекс, НЕТ номер раздела в оглавлении, но видимый в фактическом заголовке раздела - PullRequest
8 голосов
/ 20 октября 2010

Я пишу документ, в котором я не хочу, чтобы нумерация подразделов отображалась в оглавлении (я хочу, чтобы заголовок подраздела был виден в оглавлении), но я хочу, чтобы нумерация подразделов отображалась в фактическом заголовке документа.* Это то, что я хочу

Table of Contents
1. Chapter One
 1.1 Section One
       SubSection One

Chapter 1
Chapter One
Some chapter text

1.1 Section One
Some text

1.1.1 Subsection One
Some text

Я пытался использовать \ setcounter {secnumdepth} {1}, но это удаляет число даже из заголовка раздела, поэтому у меня есть

Table of Contents
1. Chapter One
 1.1 Section One
       SubSection One

Chapter 1
Chapter One
Some chapter text

1.1 Section One
Some text

Subsection One
Some text

Можно ли получить номер раздела в заголовке документа, но не в записи TOC?

Ответы [ 2 ]

4 голосов
/ 22 марта 2011

В примере с латексом (с использованием класса 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}}
2 голосов
/ 20 октября 2010

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

Вы можете изменить это:

\contentsline {subsection}{\tocsubsection {}{1.1}{subsection one}}{1}

К этому:

\contentsline {subsection}{\tocsubsection {}{}{subsection one}}{1}

Который будет генерировать то, что вы хотите. Остерегайтесь, это восстанавливается каждый раз, когда вы компилируете исходный текст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...