Sie sind hier

Ebenenspezifisches \At@startsection?

Auch diese Frage ist im Zusammenhang mit biblatex entstanden. In https://github.com/LukasCBossert/biblatex-archaeologie/issues/139 bin ich darauf hingewiesen worden, dass eine biblatex-Option mit den KOMA-Klassen nicht so funktioniert, wie sie soll. In der Tat tut z.B. citereset=section nicht, was es soll: https://github.com/plk/biblatex/issues/713.

Der Quell des Problems scheint mir zu sein, dass biblatex (für KOMA) die Befehle \scr@sect und \@startsection zu patchen versucht, diese finden aber in den neuesten Versionen von KOMA-Script keine Anwendung mehr. Das reine biblatex-Problem wäre wohl zu lösen, wenn wir nun einfach \scr@startsection patchen würden. Allerdings scheint mir das nach einem kurzen Blick in die Dokumentation nicht gewollt: "Die beiden Anweisungen [\SecDef und \scr@startsection] sollten jedoch nicht umdefiniert werden" (scrguide v3.24, S. 510). Stattdessen wird \At@startsection angeboten. Das bietet aber keinen komfortablen Weg, den Code nur für eine bestimmte Gliederungsebene (\chapter, \section) auszuführen. Man kann da sicher mit etwas Getrickse etwas deichseln, da der Ebenenname und die Ebene ja in #1 und #2 in \scr@startsection bekannt sind. Mir fehlt da allerdings das tiefere Wissen über Category codes und TeX-Interna. Gibt es also eine Möglichkeit, \At@startsection ebenenspezifisch zu befüllen?

Ich hätte also gern, dass ich im folgenden MWE einen eigenen \typeout-Text für \section und einen für \subsection bekomme.

\documentclass{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
 
\makeatletter
\At@startsection{\typeout{hullo}}
\makeatother
 
\begin{document}
\section{Foo}
\subsection{Bronto}
\section{Bar}
\subsection{Stegano}
\end{document}
forum: 

Man könnte natürlich \sectionlinesformat und \subsectionlinesformat stattdessen verwenden. Aber dann funktioniert das wiederum nicht mehr, sobald ein Anwender diese Anweisungen umdefiniert. Man könnte also genauso gut \section selbst patchen (beispielsweise mit \xpretocmd aus xpatch). Das funktioniert dann auch nur so lange, solange niemand \RedeclareSectionCommand auf \section anwendet. Das ist alles nicht optimal. Einen offiziellen, idealen Weg kann ich im Augenblick leider nicht nennen. Ich kann nur einen für die Zukunft in Aussicht stellen. Für KOMA-Script 3.25 wird das aber ebenfalls höchstens inoffiziell und (von mir) ungetested möglich sein.

Dann werde ich es fürs Erste mit einer nicht ganz optimalen Lösung probieren. Wenn es dann eine offizielle Schnittstelle gibt, werde ich dazu übergehen.

Seit heute gibt es in den Quellen ein paar neue Befehle, die man nun innerhalb von \At@startsection nutzen kann, beispielsweise:

\documentclass{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
 
\makeatletter
\At@startsection{\typeout{This level is named ``\startsection@sectionname''}}
\makeatother
 
\begin{document}
\section{Foo}
\subsection{Bronto}
\section{Bar}
\subsection{Stegano}
\end{document}

Näheres ist scrkernel-section.dtx Revision 2982 zu entnehmen.

Herzlichen Dank! Das funktioniert soweit zumindest für meine Zwecke hervorragend.

Comments for "Ebenenspezifisches  \At@startsection?" abonnieren