Algorithm: Nummerierung

Formelsatz für Mathematik, Naturwissenschaften und Technik


blink182

Algorithm: Nummerierung

Beitrag von blink182 »

Hallo zusammen,

mein Anliegen passt von allen Foren wohl am ehesten in dieses. Aktuell schreibe ich an meiner Diplomarbeit, in der ich eine fortlaufende Nummerierung der Sätze, Definitionen etc. durch

Code: Alles auswählen

\theoremstyle{plain}\newtheorem{Lemma}{Lemma}
\theoremstyle{plain}\newtheorem{Satz}[Lemma]{Satz}
...
vornehme. Nun verwende ich auch das algorithm-Packet, um Quellcode übersichtlich darzustellen. Ich würde die Nummerierung der Algorithmen gerne in die fortlaufende Nummerierung der Sätze, Definitionen etc. integrieren. Dazu habe ich bereits ein wenig mit dem Befehl

Code: Alles auswählen

\numberwithin{algorithm}{XYZ}
herumgespielt, aber nie das gewünschte Eregbnis erzielt. Ich würde mich freuen, wenn ihr mir weiterhelfen könntet, wie ich diese Art der Nummerierung realisieren kann.

Gruß, blink182

DonCube
Forum-Guru
Forum-Guru
Beiträge: 292
Registriert: So 29. Jun 2008, 21:17
Wohnort: Bocholt

Beitrag von DonCube »

Hey Blink,
deine Frage hört sich durchaus lösbar an. Nur weiß ich das aus dem Kopf ohne probieren leider auch nicht. Könntest du ein Minimalbeispiel posten. Dann wäre die Beantwortung leichter.

Gruß
DonCube
Schau mal hier rein goLaTeX-Wiki, und gaaaanz wichtig Minimalbeispiel

blink182

Minimalbeispiel

Beitrag von blink182 »

DonCube, vielen Dank für deine schnelle Antwort. Hier ist ein Minimalbeispiel:

Code: Alles auswählen

\documentclass[12pt,a4paper]{report}
\usepackage[latin1]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{amsthm}
\usepackage{algorithm,algorithmic}

\theoremstyle{plain}\newtheorem{Lemma}{Lemma}
\theoremstyle{plain}\newtheorem{Satz}[Lemma]{Satz}
\theoremstyle{definition}\newtheorem{Definition}[Lemma]{Definition}

%% Mit diesem Befehl kann man die Nummerierung
%% der Algorithmen anpassen
%% Wird er weggelassen, werden die Algorithmen
%% separat durchnummeriert
\numberwithin{algorithm}{Lemma}

\begin{document}

\begin{Definition}
Eine Flüßigkeit, die nach Wolkenbildung vom Himmel fällt, heißt \emph{Regen}.
\end{Definition}

\begin{Satz}
Fällt Regen vom Himmel, wird die Straße naß.
\end{Satz}

\begin{algorithm}
\caption{Regenalgorithmus}
\label{algo-regen}
\begin{algorithmic}[1]
\WHILE{Regen}
\STATE Nässe
\ENDWHILE
\end{algorithmic}
\end{algorithm}

Der Regenalgorithmus sollte mit der Zahl $3$ nummeriert werden, er
erhält aber die Zahl \ref{algo-regen}.

\end{document}
Mir ist die genaue Verwendung des Befehls

Code: Alles auswählen

\numberwithin
leider nicht geläufig, aber ich denke, dass es damit gehen sollte...

Gruß, blink182

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2641
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Beitrag von KOMA »

Ich glaube Du suchst:

Code: Alles auswählen

\makeatletter
\let\c@algorithm\c@Lemma% Zähler algorithm ist ein Alias für Zähler Lemma
\makeatother

blink182

Beitrag von blink182 »

Herzlichen Dank, KOMA - jetzt funktioniert die Nummerierung wie gewünscht!
Könntest du mir bitte deine Codezeilen erklären und auf darauf hinweisen, falls es ggf. Seiteneffekte geben könnte? Das wäre nett.

DonCube
Forum-Guru
Forum-Guru
Beiträge: 292
Registriert: So 29. Jun 2008, 21:17
Wohnort: Bocholt

Zähler und Counter miteinander verknüpfen

Beitrag von DonCube »

Hallo Blink,
ich vermute du beziehst dich mit deiner Frage hauptsächlich auf das
\makeatletter \makeatother. Die andere Zeile ist ja durch den Kommentar erklärt. Hier wird der eine Zähler sozusagen mit dem anderen verknüpft. Wie bei Pointern in C die auf die gleiche Referenz verweisen an sich aber völlig unterschiedlich sind.

Allerdings bin ich mir bei einer Erklärung für die \let Anweisung nicht sicher. Die fehlt übrigens auch noch im Wiki.

Die \make-Anweisungen findest du im goLaTeX-Wiki-makeatletter

Gruß
DonCube

PS: Bei einer Rückfrage bitte den richtigen Status setzen.
Schau mal hier rein goLaTeX-Wiki, und gaaaanz wichtig Minimalbeispiel

blink182

Beitrag von blink182 »

Vielen Dank, DonCube! Der Artikel im goLaTeX-WIKI ist übrigens ausgezeichnet.

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2641
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Re: Zähler und Counter miteinander verknüpfen

Beitrag von KOMA »

DonCube hat geschrieben:Allerdings bin ich mir bei einer Erklärung für die \let Anweisung nicht sicher. Die fehlt übrigens auch noch im Wiki.
\let gibt es jetzt auch im Wiki. Hatte ich eigentlich schon einmal im Zusammenhang mit \def und \edef geschrieben, dann aber blöderweise Ctrl-W (emacs-Standardtastenkürzel bei Copy&Paste) gedrückt, was den Browser veranlasst hatte, den Tab ohne Nachfrage zu schließen. Ich hatte dann keine Zeit mehr, die ganze Erklärung nochmal neu zu schreiben. Das habe ich jetzt nachgeholt.
blink182 hat geschrieben:Der Artikel im goLaTeX-WIKI ist übrigens ausgezeichnet.
:D

Kleine Ergänzung zur Erklärung noch: \c@Zählername ist die interne TeX-Repräsentation für den LaTeX-Zähler Zählername. Dieses Makro ist dann i. d. R. wiederum definiert als \countZählernummer. Lässt man sich beispielsweise per

Code: Alles auswählen

\makeatletter\show\c@page\makeatother
oder

Code: Alles auswählen

\expandafter\expandafter\expandafter\show\value{page}
einmal die Definition für den Zähler page anzeigen, so erfährt man, dass das \count0 ist, also das Zählerregister 0. Die drei \expandafter braucht man an der Stelle übrigens, weil \value{page} zunächst nur zu \csname c@page\endcsname und erst im zweiten Schritt zu \c@page expandiert und man weder die Definition von \value noch die von \csname ausgegeben haben will. Achja, die Ausgabe von \show erfolgt auf dem Terminal und in die log-Datei.

Antworten