Menu

Warning_minitoc

Markus Kohm

Class scr… Warning: Usage of package `minitoc' … not recommended

Beim Laden von Paket minitoc geben die KOMA-Script-Klassen die Warnung:

Class scr Warning: Usage of package `minitoc' together
(scr)              with a KOMA-Script class is not recommended.
(scr)              Nevertheless, using requested
(scr)              package `minitoc' on input line 10.

aus. Der Grund für diese Warnung liegt in erster Linie darin, dass das Paket eigentlich diverse Möglichkeiten von KOMA-Script beschädigt. Um das zu verhindern, muss KOMA-Script seinerseits min. das interne Macro \stc@sect von minitoc quasi "zurückdrehen". Darüber hinaus enthält die Definition von minitoc (dort als Neudefinition von \@sect) einige Bugs, beispielsweise ein fehlendes \expandafter for \ifx\csname #1\endcsname\starsection. Selbstverständlich hat der KOMA-Script-Autor schon vor über 10 Jahren auf diesen Fehler hingewiesen.

Da nicht sichergestellt werden kann, dass die interne Definition sich in minitoc nicht irgendwann ändert, werden die Änderungen daran innerhalb von KOMA-Script nur ausgeführt, wenn die Definition aus minitoc v62 vorgefunden wird. Anderenfalls versagt KOMA-Script mit seinem Rettungsversuch. Die Verwendung von minitoc mit KOMA-Script-Klassen ist daher immer riskant.

Die minitoc-Warnung W0024:

Package minitoc(hints) Warning: W0049
(minitoc(hints))                You have attempted to insert 
(minitoc(hints))                empty secttocs.

beispielsweise bei Verwendung von KOMA-Script-Option listof=totoc ist übrigens kein Grund für obige Warnung der KOMA-Script-Klassen. Um sie zu beseitigen wird in der \minitoc-Anleitung die Verwendung von \mtcaddchapter bzw. \mtcaddsection nach \listoffigures, \listoftables etc. empfohlen. Man kann das bei KOMA-Script aber auch bereits in der Dokumentpräambel lösen:

\documentclass[listof=totoc]{scrartcl}
\AfterStartingTOC{%
  \Iftocfeature{\csname @currext\endcsname}{totoc}
    {\csname mtcaddsection\endcsname}% bei scrbook/scrreprt stattdessen mtcaddchapter
    {}%
}
\usepackage{minitoc}

\begin{document}
\dosecttoc
\tableofcontents
\listoftables
\listoffigures
\section{Section}
\secttoc
\subsection{Subsection}
\end{document}

Hier wird also mittels \AfterStartingTOC nach dem Einlesen jeder ToC-Datei, für die das Feature totoc gesetzt ist, automatisch \mtcaddsection ausgeführt. \csname mtcaddsection\endcsname wird übrigens statt \mtcaddsection im Code verwendet, damit der Code keinen Fehler produziert, falls jemand minitoc rauswirft.

Da explizit auf das Feature totoc getestet wird, funktioniert das auch, wenn dieses Feature nicht per Option listof=totoc gesetzt wird, sondern nur für einzelne TOC-Dateien oder für gar keine. Im letzteren Fall wird dann kein \mtcaddsection mehr ausgeführt.

Nicht berücksichtigt wird im Beispiel das Feature leveldown, auf das natürlich ebenfalls per \Iftocfeature zusätzlich getestet werden könnte. So könnte man beispielsweise für scrbook oder scrreprt den folgenden Code verwenden:

\AfterStartingTOC{%
  \Iftocfeature{\csname @currext\endcsname}{totoc}
  {%
    \Iftocfeature{\csname @currext\endcsname}{leveldown}
    {\csname mtcaddsection\endcsname}{\csname mtcaddchapter\endcsname}%
  }{}%
}

Dass KOMA-Script das nicht automatisch selbst \mtcaddsection bzw. \mtcaddchapter ausführt, liegt daran, dass dann alle Dokumente, die sich an die minitoc-Anleitung halten, fehlerhaft würden.

Bei Verwendung von bibliography=totoc oder index=totoc ist ggf. ebenfalls eine \mtcaddsection bzw. \mtcaddchapter notwendig.


Related

Wiki (Deutsch): Messages

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.