Seite 1 von 1

Algorithm: Nummerierung

Verfasst: Mi 10. Dez 2008, 21:34
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
\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
\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

Verfasst: Do 11. Dez 2008, 08:15
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

Minimalbeispiel

Verfasst: Do 11. Dez 2008, 10:24
von blink182
DonCube, vielen Dank für deine schnelle Antwort. Hier ist ein Minimalbeispiel:
\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
\numberwithin
leider nicht geläufig, aber ich denke, dass es damit gehen sollte...

Gruß, blink182

Verfasst: Do 11. Dez 2008, 11:01
von KOMA
Ich glaube Du suchst:
\makeatletter
\let\c@algorithm\c@Lemma% Zähler algorithm ist ein Alias für Zähler Lemma
\makeatother

Verfasst: Do 11. Dez 2008, 19:03
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.

Zähler und Counter miteinander verknüpfen

Verfasst: Do 11. Dez 2008, 22:49
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.

Verfasst: Fr 12. Dez 2008, 10:06
von blink182
Vielen Dank, DonCube! Der Artikel im goLaTeX-WIKI ist übrigens ausgezeichnet.

Re: Zähler und Counter miteinander verknüpfen

Verfasst: Fr 12. Dez 2008, 10:40
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
\makeatletter\show\c@page\makeatother
oder
\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.