Definieren Sie `\section*` neu, sodass es sich *genau* wie `\section` verhält, außer dass die Nummer weggelassen wird

Definieren Sie `\section*` neu, sodass es sich *genau* wie `\section` verhält, außer dass die Nummer weggelassen wird

Die Frage „Wie bekomme ich meine nicht nummerierten Abschnitte in das Inhaltsverzeichnis?“ gibt es in zahlreichen Varianten …

und keine der Antworten hilft mir weiter, weil sie alle das Einfügen von \addcontentslineund 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 articlefür Entwürfe und werde irgendwann die Klasse eines Journals einfügen müssen.

Anmerkung 2 (aus Kommentaren zu einem Antwortversuch): Eine \secnumdepthglobale Anpassung wird bei mir nicht funktionieren, weil (a) ich weiterhin die normale Abschnittsnummerierung ohne Sternchen \sectionusw. 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 \sectiondie 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.

Bildbeschreibung hier eingeben

\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}

xparsebietet eine einfache Schnittstelle zum (Neu-)Definieren von Befehlen, die eine sgetarnte Version sowie ein ooptionales Argument haben können.

verwandte Informationen