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}
Derzeit AFAIK nicht
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.Vielen Dank
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.
Erster Versuch
Seit heute gibt es in den Quellen ein paar neue Befehle, die man nun innerhalb von
\At@startsection
nutzen kann, beispielsweise:Näheres ist scrkernel-section.dtx Revision 2982 zu entnehmen.
Herzlichen Dank
Herzlichen Dank! Das funktioniert soweit zumindest für meine Zwecke hervorragend.
Zweiter Versuch
Zukünftig stehen weitere Hooks zur Verfügung, die mit
\AddtoDoHook
mit Code versehen werden können. Ich gehe davon aus, dass min. einer davon passen wird.\AddtoDoHook
Für den Fall, dass hier Interessierte mitlesen, die die Entwicklung bei
biblatex
nicht mitverfolgt haben. Der Plan ist, die neuen Hooks in der nächsten Version zu verwenden (insbesondere auch im Hinblick auf https://github.com/plk/biblatex/issues/857). Die relevanten Änderungen sind noch in https://github.com/plk/biblatex/compare/dev...moewew:68f4396 zu finden und zur Zeit noch nicht gemerged.Die Idee ist
zu nutzen. Der Vorteil für
biblatex
ist dabei, dass dassection
inheading/begingroup/section
ganz einfach auf andere Ebenen geändert werden kann. So entfällt das mühsame Patchen interner Bestandteile der einzelnen Abschnittsbefehle, die sich je nach Ebenenart, Klasse und weiteren geladenen Paketen unterscheiden können.Die genaue Platzierung des Patches, also die Auswahl des passenden Hooks, war für die beabsichtigten Befehle nicht ganz einfach. Am Ende fiel die Wahl auf
heading/begingroup
(der nicht zu\At@startsection
äquivalent ist, das wäre laut https://komascript.de/node/2225heading/postinit
), da mir das in meinen Experimenten am schönsten schien und weil ich für alle Anwendungsfälle denselben Hook nutzen wollte.Vielen Dank für diese nützliche Änderung. Ich bin gespannt, wie sehr sie genutzt werden wird.
Vielleicht
Es sei lediglich darauf hingewiesen, dass es vorkommt, dass Benutzer weitere Überschriftenarten beispielsweise auf chapter-Ebene definieren, weil sie abweichende Inhaltsverzeichniseinträge o. ä. beispielsweise im Anhang haben wollen. Daher wäre es eventuell besser, den hook heading/begingroup zu verwenden und dann zu testen, ob eine command sequence #1tocdepth definiert ist und deren numerischer Wert gleich
\chaptertocdepth
oder\sectiontocdepth
oder was auch immer ist.Wie gesagt: vielleicht. Wirklich beurteilen kann ich das nämlich nicht.
Danke für den Hinweis
Vielen Dank für den Hinweis. Ich werde es im Hinterkopf behalten, falls sich jemand beschwert. Fürs Erste werde ich aber wohl bei der expliziten Angabe des Überschriftnamens bleiben. Ich bin der Meinung, dass
biblatex
zumindest in dieser Hinsicht nicht für jeden spezialgelagerten Sonderfall eine automatische Lösung bereitstellen muss (oder kann). Zumal mir nicht klar ist, ob es überhaupt immer gewünscht wäre, allechapter
-ähnliche Ebenen so zu behandeln wiechapter
.