Ich versuche, neue Befehle für „erweiterte Abschnitte/Unterabschnitte“ zu erstellen (ähnlich dem, was Sie vielleicht in einem Lehrbuch sehen, wo ein „mit einem Sternchen markierter Abschnitt“ ein fortgeschrittenes Thema oder einen Abschnitt anzeigt, den Sie beim ersten Lesen überspringen können).
Bisher habe ich Befehle zusammengeschustert, die den Stern sowohl im Dokument selbst als auch im Inhaltsverzeichnis neben der Abschnitts-/Unterabschnittsnummer platzieren. Es gibt jedoch einen seltsamen Nebeneffekt:
nach Verwendung des Befehls „Erweiterter Abschnitt“ wird im folgenden Unterabschnitt die Unterabschnittsnummer nicht angezeigt
nach der Verwendung des Befehls „erweiterter Unterabschnitt“ wird in den folgenden Abschnitten immer die „nutzlose“ Unterabschnittsnummer .0 angezeigt
Interessanterweise verhalten sich die Inhaltsverzeichniseinträge genau wie erwartet, ohne Nummerierungsprobleme. Was könnte also die Ursache für dieses unerwartete Verhalten im Dokument selbst sein?
Ich habe unten ein MWE eingefügt, das dieses Verhalten veranschaulicht. (Die zahlreichen Abschnitte/Unterabschnitte sollen verschiedene Permutationen der Verwendung von „normalen“ und „erweiterten“ Abschnitts-/Unterabschnittsbefehlen veranschaulichen.)
\documentclass{book}
\usepackage{titlesec}
\usepackage{titletoc}
\usepackage{tocloft}
\makeatletter
\newcommand{\advsection}[2][section]{%
\def\@seccntformat##1{\protect\llap{\large*}\csname the#1\endcsname\quad}%
\addtocontents{toc}{%
\let\protect\mtnumberline\protect\numberline%
\def\protect\numberline{%
\hskip0pt%
\global\let\protect\numberline\protect\mtnumberline%
\protect\llap{\normalfont\normalsize*}%
\protect\mtnumberline%
}%
}%
\csname #1\endcsname{#2}%
\def\@seccntformat##1{\csname the#1\endcsname\quad}%
}
\newcommand{\advsubsection}[2][subsection]{%
\def\@seccntformat##1{\protect\llap{\large*}\csname the#1\endcsname\quad}%
\addtocontents{toc}{%
\let\protect\mtnumberline\protect\numberline%
\def\protect\numberline{%
\hskip0pt%
\global\let\protect\numberline\protect\mtnumberline%
\protect\llap{\normalfont\normalsize*}%
\protect\mtnumberline%
}%
}%
\csname #1\endcsname{#2}%
\def\@seccntformat##1{\csname the#1\endcsname\quad}%
}
\makeatother
\begin{document}
\frontmatter
\tableofcontents
\newpage
\mainmatter
\chapter{My first chapter}
\section{My first section}
Blah
\advsection{My second section}
Blah
\section{My third section}
Blah
\advsection{My fourth section}
Blah
\subsection{My first subsection}
Blah
\advsubsection{My second subsection}
Blah
\subsection{My third subsection}
Blah
\advsubsection{My fourth subsection}
Blah
\section{My fifth section}
Blah
\subsection{My first subsection}
Blah
\end{document}
Antwort1
Das Problem ist die Zeile, in der Sie neu definiert haben \@seccntformat
. Ihr Code sieht so aus:
\def\@seccntformat##1{\protect\llap{\large*}\csname the#1\endcsname\quad}
the#1
Beachten Sie, dass Sie die Definition anstelle von eingegeben haben the##1
, und das Gleiche gilt für die Definition, die die ursprüngliche Definition von wiederherstellt \@seccntformat
. Da Sie den obigen Code schreiben konnten, können Sie wahrscheinlich herausfinden, warum dies ein Problem ist. Wenn Sie alle vier Vorkommen in ändern, the##1
funktioniert Ihr Code wie erwartet.