Sie sind hier

Vorgabe style=... bei \DeclareSectionCommand

Eine _Anfängerin_ aus meinem aktuellen LaTeX-Kurs fragt mich, ob das richtig sei, dass optionale Argumente
nicht angeben werden _müssen_. Ja, meinte ich, deswegen gehören sie bei LaTeX meistens auch in den Teil
mit den eckigen Klammern. Daraufhin fragt sie mich, warum dann

\DeclareSectionCommand{subsubsubsection}

eine Fehlermeldung liefert? Da dachte ich, dass sie eigentlich recht hat und obiges nicht _zuerst_ einen Fehler
wegen fehlendem style= liefern sollte. Wichtiger wäre, dass _zuerst_ ein fehlendes level angemahnt
wird, denn den Rest könnte man irgendwie mit sinnvollen Vorgaben übernehmen.

Kurzum: Vielleicht sollte man die interne Bearbeitung dieses Makros so gestalten,
dass nur bei fehlendem level= eine Fehlermeldung kommt, anderenfalls (nur) eine Warnung und
die Übernahme der Werte, die dem Typ style=section entsprechen.

forum: 
Bild von Markus Kohm

Welche fehlende Option zuerst gemeldet wird ist doch wohl ziemlich egal.

Warum sollte in jedem Fall style=section die richtige Voreinstellung sein? Theoretisch ist schon die Frage, ob level überhaupt notwendig ist, vom Stil abhängig. Deshalb muss zuerst auf den Stil geprüft werden und deshalb wird ein fehlender Stil auch zuerst gemeldet. Irgendwo logisch oder?

Und warum sollte style=section immer die Voreinstellung sein? Da kommt dann irgendwann einer, der sagt, wenn er seinen Befehll superpart nennt, ist doch eigentlich klar, dass der den Stil part und irgendwo oberhalb von part angesiedelt sein muss. An anderer kommt dann und erklärt, dass er wenn er level=0 angibt, es doch klar ist, dass die Voreinstellung für den Stil chapter sein muss (den es bei scrartcl gar nicht gibt)

Und wieder einer kommt dann und sagt, dass es doch logisch ist, dass die korrekte Voreinstellung für level immer der kleinste positive Wert ist, der noch nicht verwendet wurde. Und wieder einer kommt und will stattdessen den nächsten Wert, relativ zum zuletzt verwendeten (den man am Anfang als Anwender eigentlich gar nicht kennt, weil man die Reihenfolge der Implementierung in KOMA-Script nicht kennt).

Und wie ist das mit den Voreinstellungen für die Abstände und die übrigen Einstellungen? Woher sollen die kommen?

Ich in ziemlich sicher, dass es immer irgendjemanden geben wird, dem eine Voreinstellung nicht passt. Tatsächlich werde ich immer wieder gefragt, warum die Voreinstellungen so und nicht anders sind.

Ich habe mir das in dem Fall schon ziemlich gut überlegt und bin zu dem Schluss gekommen, dass es für vieles in Wirklichkeit keine wirklich guten Voreinstellungen gibt und es besser ist, dem Anwender zu sagen, was fehlt. Bei den Verzeichniseinträgen ist das tatsächlich ein wenig anders. Dort kann man aus dem Namen in gewissen Grenzen gute neue Werte ableiten. Vermutlich wäre es statt über den Namen auch über die numerische Ebene möglich, aber die Werte sind über die Namen gespeichert. Bei den Verzeichniseinträgen ist dafür der Stil in der Tat kein optionales Argument mehr. Als ich das implementiert habe, hatte ich bereits dazugelernt.

Übrigens: Was optional ist oder nicht, hängt davon ab, was bereits bekannt ist oder nicht. So funktioniert \DeclareSectionCommand{section} beispielsweise ganz ohne optionales Argument. Wann das gut ist? Lade mal titlesec. Soll ich jetzt wirklich zwei Befehle machen, einen mit einem optionalem und zwei obligatorischen Argumenten und einen mit einem optionalen und einem obligatorischen Argument und jeder muss die nur noch optionalen Optionen im optionalen Argument angeben und die noch obligatorischen Optionen im ersten obligatorischen Argument des Befehls mit den zwei obligatorischen Argumenten? Da wäre es doch leichter zu erklären, dass man im optionalen Argument nur die Optionen setzen muss die noch unbekannt sind oder die man ändern will und ggf. auch das komplette Argument weglassen kann, wenn bereits alle Optionen bekannt und korrekt voreingestellt sind. Generelle Regeln sind eben manchmal doch nicht ganz so einfach, wie sie auf den ersten Blick erscheinen. Bzw. die korrekte Regel für das optionale Argument lautet vielleicht schlicht ein wenig anders: Optionale Argumente dienen dazu, die Voreinstellung zu modifizieren. Wenn die Voreinstellung bereits den Anforderungen entspricht, kann man es daher weglassen. Wenn aber die Voreinstellung nicht den Anforderungen entspricht (und die Voreinstellung unbekannt entspricht eben nie den Anforderungen), dann muss man das optionale Argument eben verwenden.

Wow, soviel Text habe ich noch nie auf dem Tablet getippt!

Comments for "Vorgabe style=... bei \DeclareSectionCommand" abonnieren