Die Frage „Wie bekomme ich meine nicht nummerierten Abschnitte in das Inhaltsverzeichnis?“ gibt es in zahlreichen Varianten …
- Erstellen von nicht nummerierten Kapiteln/Abschnitten (und Hinzufügen dieser zum Inhaltsverzeichnis und/oder zur Kopfzeile)
- \tableofcontents listet das nicht nummerierte Kapitel nicht auf
- Wie verwende ich \section*{something}, ohne es aus dem Inhaltsverzeichnis zu entfernen?
- ...
und keine der Antworten hilft mir weiter, weil sie alle das Einfügen von \addcontentsline
und vielleicht noch anderen Sachen ( \mark
, \phantomsection
, ...?) an genau der richtigen Stelle im Dokument beinhalten. In meinem Fall \section*
werden die Befehle von Paketen ausgegeben und sie geben mir keine Hooks, um Sachen genau an der richtigen Stelle einzufügen; außerdem ist nicht klar, welchen Satz „anderer Sachen“ ich genau brauche. Es wäre einfacher und robuster, wenn ich es einfach neu definieren könnte, \section*
sodass es sich genau so verhält wie die nicht mit Sternchen versehene Version, außer dass es keine Abschnittsnummer druckt.
Wie mache ichDas?
Hinweis: KOMA-Script-Klassen sind keine Option. Ich verwende derzeit Plain article
für Entwürfe und werde irgendwann die Klasse eines Journals einfügen müssen.
Anmerkung 2 (aus Kommentaren zu einem Antwortversuch): Eine \secnumdepth
globale Anpassung wird bei mir nicht funktionieren, weil (a) ich weiterhin die normale Abschnittsnummerierung ohne Sternchen \section
usw. haben möchte und (b) die Pakete, die Befehle ausgeben, nicht dazu überredet werden können, stattdessen \section*
„plain“ zu verwenden .\section
Antwort1
Sie können \section
die Erfassung neu definieren und die Bedingung festlegen, wann die markierte Version verwendet wird. Wenn Sie gefunden haben \section*
, geben Sie es genauso aus, wie Sie es tun würden \section
, aberEntfernen des Nummerndruckmechanismus durch entsprechende Einstellung des Zählerssecnumdepth
.
\documentclass{article}
\usepackage{xparse}
\let\oldsection\section
\makeatletter
\newcounter{@secnumdepth}
\RenewDocumentCommand{\section}{s o m}{%
\IfBooleanTF{#1}
{\setcounter{@secnumdepth}{\value{secnumdepth}}% Store secnumdepth
\setcounter{secnumdepth}{0}% Print only up to \chapter numbers
\oldsection{#3}% \section*
\setcounter{secnumdepth}{\value{@secnumdepth}}}% Restore secnumdepth
{\IfValueTF{#2}% \section
{\oldsection[#2]{#3}}% \section[.]{..}
{\oldsection{#3}}}% \section{..}
}
\makeatother
\begin{document}
\tableofcontents
\section{TestA}
\section*{TestB}
\end{document}
xparse
bietet eine einfache Schnittstelle zum (Neu-)Definieren von Befehlen, die eine s
getarnte Version sowie ein o
optionales Argument haben können.