\DocumentMetadata mit KOMA-Script nutzen kannDerzeit sind die meisten KOMA-Script-Pakete und die KOMA-Script-Klassen nicht auf Tagging oder die Verwendung von \DocumentMetadata eingerichtet. Das hat viel damit zu tun, dass für KOMA-Script über die Jahre viele internen Anweisungen, die LaTeX für Klassen- und Paketautoren bereitstellt, durch Eigenentwicklungen ersetzen musste, um die Vielzahl an Möglichkeiten überhaupt bereitstellen zu können. Bei Verwendung von \DocumentMetadata – mittlerweile Voraussetzung für Tagging – werden viele LaTeX-Interna durch latex-lab ersetzt. Vieles davon ist noch nicht in Stein gemeißelt. Dieser halbfertige Zustand hat in der Vergangenheit mehrfach dazu geführt, dass bereits begonnene Entwicklungen hauptsächlich verschwendete Zeit waren. Gleichzeitig überschreibt allein das Laden von latex-lab viele Definitionen von KOMA-Script, so dass einiges sicher nicht mehr so funktioniert, wie in der Anleitung dokumentiert.
Dennoch arbeitet Marei Peischl bereits an Tagging-Unterstützung in KOMA-Script. Daneben bietet KOMA-Script diverse Hooks, über die für einzelne Dokumente und einzelne Elemente Tagging realisiert werden kann.
Das hier gezeigte Beispiel für das Tagging von Überschriften in den KOMA-Script-Klassen basiert auf Code, den Ulrike Fischer in der Diskussion mit den KOMA-Script-Entwicklern bereitgestellt hat. Es basiert auf neusten Versionen des LaTeX-Kerns und von latex-lab. Daher wird die Verwendung von lualatex-dev für die Übersetzung empfohlen. Selbstverständlich kann auch nicht garantiert werden, dass das mit zukünftigen Versionen von KOMA-Script oder dem LaTeX-Kern oder latex-lab noch genauso funktionieren wird. Im Gegenteil ist spätestens, wenn KOMA-Script selbst Tagging für Überschriften bieten wird, eher garantiert, dass das so nicht mehr funktioniert.
\DocumentMetadata{uncompress,tagging=on}
\documentclass{scrbook}
% See https://sourceforge.net/p/koma-script/wiki-de/HowTo_Tagging for more information an up-to-date code.
\ExplSyntaxOn\makeatletter
\int_new:N\l__scr_sec_level_int
\NewTaggingSocket{scr/heading/init}{1}
\NewTaggingSocketPlug{scr/heading/init}{default}
{
\int_set:Nn\l__scr_sec_level_int{\use:c{toclevel@#1}}
\UseTaggingSocket{sec/end}{\int_use:N\l__scr_sec_level_int}
\UseTaggingSocket{sec/begin}
{{\int_use:N\l__scr_sec_level_int}{tag=\UseStructureName{sec/\int_use:N\l__scr_sec_level_int}}}
\if@startsection@runin
\UseTaggingSocket{sec/title/init}{\int_use:N\l__scr_sec_level_int}
\fi
}
\AssignTaggingSocketPlug{scr/heading/init}{default}
\NewTaggingSocket{scr/heading/begin}{1}
\NewTaggingSocketPlug{scr/heading/begin}{default}
{
\pdf_purify:nN{\@currenttocentry}\l__scr_sec_tmpa_tl
\int_set:Nn\l__scr_sec_level_int{\use:c{toclevel@#1}}
\if@startsection@runin
\else
\tagstructbegin{tag=\UseStructureName{sec/\int_use:N\l__scr_sec_level_int/title},title-o=\l__scr_sec_tmpa_tl}%
\tagmcbegin{}\tagpdfparaOff
\fi
}
\AssignTaggingSocketPlug{scr/heading/begin}{default}
\NewTaggingSocket{scr/heading/end}{1}
\NewTaggingSocketPlug{scr/heading/end}{default}
{
\if@startsection@runin
\UseTaggingSocket{sec/title/split}
\else
\tagmcend\tagstructend
\fi
}
\AssignTaggingSocketPlug{scr/heading/end}{default}
\AddtoDoHook{heading/preinit}{\@startsection@runinfalse\@gobble}% because styles chapter and part do not use \scr@startsection
\AddtoDoHook{heading/postinit} {\UseTaggingSocket{scr/heading/init}}
\AddtoDoHook{heading/begingroup}{\UseTaggingSocket{scr/heading/begin}}
\AddtoDoHook{heading/endgroup} {\UseTaggingSocket{scr/heading/end}}
%\AddtoDoHook{heading/postinit} {\__scr_sec_show_runin:n}
\cs_new:Nn \__scr_sec_show_runin:n
{
\if@startsection@runin \tl_show:n{#1:~runin}\else \tl_show:n{#1:~display}\fi
}
\ExplSyntaxOff
\begin{document}
\tableofcontents
\part{Part}
\chapter{blub}
\section{section}
some text
\subsection{subsection}
some text\footnote{hallo}
\section{section}
some text
\paragraph{bla} hallo world
\paragraph{blub}\begin{itemize}\item a \end{itemize}
blbl
\part*{Part}
\chapter*{blub}
\section*{section}
some text
\subsection*{subsection}
some text\footnote{hallo}
\section*{section}
some text
\paragraph*{bla} hallo world
\paragraph*{blub}\begin{itemize}\item a \end{itemize}
blbl
\end{document}
Das gezeigte Beispiel hat noch ein paar Einschränkungen, beispielsweise:
\part hat am Anfang eine leere Struktur, die da eigentlich nicht hin gehört.\DocumentMetadata und des aktivierten Taggings.scraddr (Hier gibt es nichts zu taggen.)scrbase (Hier gibt es nichts zu taggen.)scrdate (ACHTUNG: Ist ab KOMA-Script 3.49.3 nicht mehr in KOMA-Script enthalten.)scrfontsize (Hier gibt es nichts zu taggen.)scrlfile (Erzeugt keine Ausgaben, also muss auch nichts getaggt werden.)scrlogo (Hier gibt es nichts zu taggen, es könnte allenfalls ein ALT-Text generiert werden.)scrtime (ACHTUNG: Ist ab KOMA-Script 3.49.3 nicht mehr in KOMA-Script enthalten.)typearea (Hier gibt es nichts zu taggen.)
Issues: #59
Issues: #89
Wiki (Deutsch): HowTo_CompatibilityIssues