Prüfen, ob ein Counter bereits definiert wurde

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


DerArbeitenschreiberling
Forum-Anfänger
Forum-Anfänger
Beiträge: 33
Registriert: Fr 31. Mär 2017, 18:28

Prüfen, ob ein Counter bereits definiert wurde

Beitrag von DerArbeitenschreiberling »

Hallo!
Ich habe mich mal an ein erstes "Programmierungsbeispiel" zu \LaTeX rangesetzt. Ich möchte die Nummern, welche vor jeder \chapter stehen, bei bestimmten überschriften entfernen. Dazu habe ich folgende Umgebung implementiert:
\let\defaultthechapter=\thechapter
\newenvironment{nochapternumber}{\newcounter{beforechap} \setcounter{beforechap}{\value{chapter}} \renewcommand{\thechapter}{}}
	{\setcounter{chapter}{\value{beforechap}} \renewcommand{\thechapter}{\defaultthechapter}}
Kurz erklärt: Zuerst wird die implementation von \thechapter gespeichert. Dann wird, in der neuen Umgebung, die momentane Chapternummer in einen Counter gespeichert, und die implementation von \thechapter auf gar nichts gesetzt. Damit sind die Nummern weg.
In der Umgebung schreibt der Nutzer dann selbst seine \chapter. Ob ich das mit ins Kommando einarbeite, überlege ich noch. Am Ende der Umgebung wird der Counter für das Chapter auf den vorhergehenden Wert gesetzt und \thechapter wiederhergestellt.

Das Problem: Die Umgebung kann man auf diese Art und Weise nur einmal je Dokument benutzen, da der Counter "beforechap" dann natürlich schon definiert ist. Also möchte ich eine If-Abfrage verwenden, um zu prüfen, ob der Counter nicht schon definiert ist:
\newenvironment{nochapternumber}{\ifundefined{beforechap}\newcounter{beforechap}\fi\setcounter{beforechap}{\value{chapter}} [usw.]
Problem: LaTeX kennt angeblich das Kommando \ifundefined nicht (undefined control sequence). Was kann ich nun machen? Habt ihr Ideen?

Gast

Beitrag von Gast »

Warum verwendest Du nicht einfach entweder \chapter* oder \addchap (benötigt eine KOMA-Script-Klasse) oder setzt secnumdepth auf -1?

Außerdem wäre eine einfache Lösung natürlich \newcounter nicht innerhalb der Umgebung aufzurufen, sondern nur einmal außerhalb der Umgebung.

DerArbeitenschreiberling
Forum-Anfänger
Forum-Anfänger
Beiträge: 33
Registriert: Fr 31. Mär 2017, 18:28

Beitrag von DerArbeitenschreiberling »

Anonymous hat geschrieben:Warum verwendest Du nicht einfach entweder \chapter* oder \addchap (benötigt eine KOMA-Script-Klasse) oder setzt secnumdepth auf -1?

Außerdem wäre eine einfache Lösung natürlich \newcounter nicht innerhalb der Umgebung aufzurufen, sondern nur einmal außerhalb der Umgebung.
Ich kenne nicht allzu viele Kommandos in LaTeX; deswegen habe ich solche Lösungen auch nicht gleich auf dem Schirm.
\chapter*{} versteckt bei mir die Nummerierung leider nicht, sondern zählt bloß nicht weiter hoch. (Das kann an weiteren Formatierungen liegen, die ich im Dokument vorgenommen habe). Aber dadurch kann ich mir natürlich das Speichern des Counters sparen..
Auch \setcounter{secnumdepth}{-1} bringt bei mir nicht das gewünscht Ergebnis - In der Inhaltsangabe werden keine Zahlen angezeigt, aber im Text steht ständig eine 0 vor den Überschriften.

Aber du hast Recht, ich kann den Counter einfach außerhalb der Umgebung definieren. Dann läuft auch alles - danke sehr!

Gast

Beitrag von Gast »

Deine Beschreibungen passen nicht zum normalen Verhalten von LaTeX mit allen mir bekannten Klassen. Das riecht also sehr nach selbstverursachtem Problem, das man sicher beseitigen kann und sollte. Du solltest ein echtes Minimalbeispiel machen.

Antworten