Мне нужен раздел, который на самом деле не является ни частью, ни главой. Поэтому я пытался определить новую команду, \subpart, основанную на команде \part, но с собственной нумерацией, которая выглядела бы так, в середине новой пустой страницы:
ПОДЧАСТЬ ПЕРВАЯ
Название подраздела
Однако, когда я пытаюсь это сделать, всегда появляются ошибки...
Мой подход основан на коде из не помню-где в сети:
\makeatletter
\def\@subpart[#1]{%
\ifnum \c@secnumdepth >\m@ne
\refstepcounter{subpart}%
\addcontentsline{toc}{subpart}{\thepart\hspace{1em}#1}%
\else
\addcontentsline{toc}{subpart}{#1}%
\fi
{\parindent \z@ %\raggedright % Commented \raggedright
\interlinepenalty \@M
\normalfont
\ifnum \c@secnumdepth >\m@ne
\Large\bfseries\hfil\partname~\thepart\hfil % added \hfil … \hfil for centering
\par\nobreak
\fi
\huge \bfseries %
\markboth{}{}\par}%
\nobreak
\vskip 3ex
\@afterheading}
\makeatother
Мне действительно следует научиться правильно использовать LaTeX…
Спасибо за помощь,
Себастьян.
решение1
Определение совершенно нового секционного блока — непростая задача. Использованиеtitlesec
package может облегчить работу; поскольку вы не предоставили информацию о том, как должны выглядеть записи для подразделов в оглавлении, я выбрал промежуточный стиль между стилем частей и стилем глав; вы можете изменить это, переопределив соответствующим образом \l@subpart
:
\documentclass{book}
\usepackage[explicit]{titlesec}
\usepackage{tocloft}
\usepackage{lipsum}
\usepackage{fmtcount}
\newcommand\subpartname{Subpart}
\titleclass{\subpart}{top}[\part]
\newcounter{subpart}
\renewcommand\thesubpart{\Numberstring{subpart}}
\makeatletter
\titleformat{\subpart}[display]
{\normalsize\Huge\filcenter}{\scshape\subpartname~\thesubpart}{1em}{{\bfseries#1}\iftitlemeasuring{\def\ttl@endlongest{\clearpage}}{}}
\titlespacing*{\subpart}
{0pt}{0em}{\pagetotal}
\makeatother
\newcommand\subpartautorefname{\subpartname}
\newcommand\subpartbreak{\cleardoublepage\mbox{}\vfil}
\assignpagestyle{\subpart}{plain}
\makeatletter
\def\toclevel@subpart{0}
\newcommand*\l@subpart[2]{%
\ifnum \c@tocdepth >-2\relax
\addpenalty{-\@highpenalty}%
\addvspace{1em \@plus\p@}%
\setlength\@tempdima{3.5em}%
\begingroup
\parindent \z@ \rightskip \@pnumwidth
\parfillskip -\@pnumwidth
{\leavevmode
\large\bfseries\subpartname~#1\hfil\hb@xt@\@pnumwidth{\hss #2}}\par
\nobreak
\global\@nobreaktrue
\everypar{\global\@nobreakfalse\everypar{}}%
\endgroup
\fi}
\makeatother
\begin{document}
\tableofcontents
\part{Test Part One}
\subpart{Test Subpart One}
\chapter{Test Chapter One}
\section{Test Section}
\subpart{Test Subpart Two}
\chapter{Test Chapter Two}
\section{Test Section}
\end{document}
Примите во внимание, что теперь уровень секционных единиц, \chapter
сверху вниз, уменьшился на единицу: т.е. \part
имеет уровень -1
, \subpart
имеет уровень 0
, \chapter
имеет уровень 1
, \section
имеет уровень 2
, \subsection
имеет уровень 3
и т.д.
решение2
Ответ Гонсало Медины хорош. Однако я хотел бы дополнить его
показывая, как можно использовать
titletoc
пакет для работы с оглавлением, ипоказывая, как можно изменить схему нумерации, чтобы подразделы и главы включали счетчики более высокого уровня.
Первая версия
Просто добавлю titletoc
:
с
\documentclass{book}
\usepackage[newparttoc]{titlesec}
\usepackage{titletoc}
\titleformat{\part}[display]{\normalfont\Huge\bfseries}%
{\partname~\thepart}{1pc}{\Huge\bfseries}
\titleclass{\subpart}{page}[\part]
\newcounter{subpart}
\renewcommand{\thesubpart}{\Alph{subpart}}
\newcommand{\subpartname}{Subpart}
\titleformat{\subpart}[display]{\normalfont\Large\bfseries}%
{\subpartname~\thesubpart}{1pc}{\Huge\bfseries}
\titlespacing{\subpart}{0pt}{0pt}{0pt}
\titlecontents{subpart}[0pt]{\addvspace{1pc}\normalfont\bfseries}%
{\thecontentslabel\enspace ---\enspace\large}%
{\normalfont\large\bfseries}{\hspace{2em plus 1fill}\large\contentspage}
\begin{document}
\tableofcontents
\part{Part One}
\subpart{First Subpart}
\chapter{A chapter}
\subpart{Second Subpart}
\chapter{Another chapter}
\section{Testing}
\section{TT}
\part{Part Two}
\subpart{First Subpart}
\chapter{A chapter}
\subpart{Second Subpart}
\chapter{Another chapter}
\end{document}
Главное, что следует отметить в вышеизложенном, это то, что необходимо переопределить part
, чтобы заставить работать функции оглавления. Код тогда
- устанавливается
subpart
как подразделение непосредственно нижеpart
(и, следовательно, вышеchapter
), - определяет соответствующий счетчик и способ его печати (
\thesubpart
) - вводит строку для имени подраздела
- настраивает печать заголовков подразделов в виде отображаемого (центрированного) блока
- определяет форматирование оглавления
Вторая версия
С поднумерацией:
с
\documentclass{book}
\usepackage[newparttoc]{titlesec}
\usepackage{titletoc}
\usepackage{amsmath}
\titleformat{\part}[display]{\normalfont\Huge\bfseries}%
{\partname~\thepart}{1pc}{\Huge\bfseries}
\titleclass{\subpart}{page}[\part]
\newcounter{subpart}[part]
\numberwithin{chapter}{subpart}
\renewcommand{\thesubpart}{\thepart-\Alph{subpart}}
\newcommand{\subpartname}{Subpart}
\titleformat{\subpart}[display]{\normalfont\Large\bfseries}%
{\subpartname~\thesubpart}{1pc}{\Huge\bfseries}
\titlespacing{\subpart}{0pt}{0pt}{0pt}
\titlecontents{subpart}[0pt]{\addvspace{1pc}\normalfont\bfseries}%
{\thecontentslabel\enspace ---\enspace\large}%
{\normalfont\large\bfseries}{\hspace{2em plus 1fill}\large\contentspage}
\titlecontents{chapter}[0pt]{\addvspace{0.5pc}\normalfont\bfseries}%
{\thecontentslabel\enspace}{}{\hspace{2em plus 1fill}\contentspage}
\dottedcontents{section}[6em]{}{4em}{1pc}
\begin{document}
\tableofcontents
\part{Part One}
\subpart{First Subpart}
\chapter{A chapter}
\subpart{Second Subpart}
\chapter{Another chapter}
\section{Testing}
\section{TT}
\part{Part Two}
\subpart{First Subpart}
\chapter{A chapter}
\subpart{Second Subpart}
\chapter{Another chapter}
\end{document}
В этом случае код тот же, за исключением
- счетчик
subpart
теперь определен для сброса каждый разpart
- счетчик
chapter
сбрасывается в каждой подчасти (\numberwithin
для этого использовались пакеты AMS) \thesubpart
теперь также печатает номер детали- Форматирование оглавления для нижних уровней также переопределено, чтобы выделить место для меток.