Hallo, liebe Leute!
Ich habe mehrere Fragen hauptsächlich die Pakete hyperref, ntheorem und algorithm betreffend.
Ich hoffe, es ist in Ordnung, wenn ich hier meine ganzen Probleme zusammenwerfe. Wenn nicht, gebt bitte Bescheid, dann werde ich die Nebensächlichkeiten in eigenen Threads auslagern. Hauptsächlich geht es jedenfalls um Nummerierung und Referenzierung.
Schaut euch bitte folgendes Beispiel an. Ist nicht gerade ein Minimalbeispiel, lässt sich aber kaum noch kürzen, wenn alle meine Probleme erfasst sein sollen.
Code:
\begin{filecontents}{literatur.bib}
@incollection{hasse1930,
author = {Helmut Hasse},
title = {{Arithmetische Theorie der kubischen Zahlkörper auf klassenkörpertheoretischer Grundlage}},
booktitle = {Mathematische Zeitschrift},
publisher = {Leon Lichtenstein},
year = {1930},
series = {31},
pages = {565–582}
}
\end{filecontents}
\documentclass[ngerman]{scrbook}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{hyperref}
\hypersetup{colorlinks=false}
\usepackage{amsmath}
\usepackage{enumerate}
\usepackage[standard, thref, thmmarks]{ntheorem}
\usepackage{algorithmic}
\usepackage[Algorithmus]{algorithm}
\usepackage{listings}
\numberwithin{Satz}{chapter}
\begin{document}
\chapter{Grundlagen}
\section{Polynom- und Körperdiskriminanten}
\label{sec:disk}
\begin{Definition}
Die Diskrimiante von $f$ ist definiert als
\end{Definition}
\begin{Bemerkung}
Dies ist der Abschnitt „\autoref{sec:disk}“.
\end{Bemerkung}
\begin{Satz}
Sei $O$ eine Ordnung.
\begin{enumerate}[(i)]
\item Die Diskriminante ist $d(O)$.
\item $D(f)$ ist ein quadratisches Vielfaches\label{satz:quad_viel}.
\end{enumerate}
\end{Satz}
\begin{Beweis}
Sei
\begin{align}
D = df^2 \label{eq:equat}
\end{align}
\end{Beweis}
Siehe auch \cite{hasse1930} sowie \eqref{eq:equat}.
\begin{Satz}[Stickelbergerscher Diskriminantensatz]\label{satz:stickelberger}
Die Diskriminante $D$ eines algebraischen Zahlkörpers ist kongruent zu $0, 1 \mod 4$.
\end{Satz}
Die Fälle lauten wegen Theorem „\thref{satz:quad_viel}“:
\begin{enumerate}[a)]
\item $f = p$ \label{case:a}
\item $f = q$ \label{case:b}\\
und in diesem Falle darüber hinaus
\begin{enumerate}[\ref{case:b}$_1$)]
\item $d = 0$ \label{case:b1}
\item $d = 1$ \label{case:b2}
\end{enumerate}
\end{enumerate}
Im Falle \ref{case:b} muss einer der Fälle \ref{case:b1} oder \ref{case:b2} gegeben sein.
\begin{algorithm}
\caption{Anzahl nicht-isomorpher kubischer Zahlkörper}
\begin{algorithmic}
\REQUIRE $D \in Z$
\ENSURE Anzahl
\begin{description}
\item[1. Schritt]Prüfe \nameref{satz:stickelberger}\\
\IF{$D = 2, 3$}
\RETURN $0$
\ENDIF
\item[2. Schritt]Prüfe Hassebedingung\\
\STATE $d, f$
\begin{description}
\item[Schritt 2.1]Bestimmung der $\rho_i$
\STATE $\rho_i = 3$
\item[Schritt 2.2]Bestimmung der $e_k$
\IF{$d > 0$}
\STATE $e_k$ Grundeinheit von $O$
\ENDIF
\end{description}
\end{description}
\end{algorithmic}
\end{algorithm}
\appendix
\chapter{Programme}
\begin{lstlisting}[caption=NumberOfCubicFieldsWithDisc.k]
Prog := function(D)
return 0;
\end{lstlisting}
\listofalgorithms
\bibliography{literatur}
\bibliographystyle{alpha}
\end{document}
Ich möchte also die Theoreme Satz, Definition, Bemerkung, Lemma etc. benutzen. Die Nummerierung dieser soll kapitelweise zusammen mit Gleichungen und Algorithmen fortlaufen, also „Definition 1.1, Bemerkung 1.2, Satz 1.3, [Gleichung] (1.4), Satz 1.5, Algorithmus 1.6“. Zur Zeit ist die Nummerierung „1, 1, 1.1, (1.1), 1.2, 1“, also jeder für sich. Ich würde es noch hinkriegen, dass jeder für sich kapitelweise nummeriert (also 1.8 statt einfach nur 8), aber was ich nicht möchte, ist alle Theoreme neu zu definieren. Zum Beispiel per
Code:
\renewtheorem{Lemma}[Satz]{Lemma}
damit Lemma den Zähler von Satz verwendet.
Das Problem ist nämlich, dass ich dann die ganze Formatierung auch neu machen müsste – Lemmas, Sätze und Korollars stehen z. B. anders als etwa Definitionen in Kursivschrift, andere Klassen von Theoremen sind wieder ganz anders. Bei Gleichungen weiß ich gar nicht, wie ich das hinkriege.
Und die Algorithmen sollen sich auch nahtlos in die Nummerierung einfügen, diese Umgebung kann man auch nicht ohne Weiteres neudefinieren, da sie noch von horizontalen Linien umschlossen wird und ich am Ende List of Algorithms verwenden möchte. Kann man all diese Zähler irgendwie direkt ansprechen und verändern?
Die Referenzierungen sind nicht einfacher. Hier würde ich gerne einen Befehl, der mir „Theoremtyp Nummer“ liefert, also automatisch z. B. „Lemma 3.5“. Mit \thref sollte das gehen, aber diese Funktion hat zusammen mit dem Paket hyperref irgendwie Probleme. (Die rot umrandeten Links, die beim Ausdrucken verschwinden, sollen genau so bleiben.)
Bei \nameref{satz:stickelberger} würde ich gerne „Stickelbergerscher Diskriminantensatz“ statt dem Namen des Abschnitts haben und \thref{satz:quad_viel} sollte idealerweise vollautomatisch „Satz 1.1, (ii)“ liefern.
Auch die Referenzierungen auf die Fälle a), b), b₁), b₂) klappen nicht perfekt, statt „b1“ hätte ich gerne „b₁)“, also genau so, wie es in der Aufzählung schon dargestellt wird.
Und dann noch ein paar andere Sachen:
- Mit
Code:
pdflatex min
bibtex min
pdflatex min
pdflatex min
erhält man eine schönes Literaturverzeichnis. Da ist aber noch etwas englisch drin! Nämlich „page 565–582“. Bei anderen Quellen ist das auch so, z. B. PhD thesis statt Doktorarbeit. Kann man das komplett deutsch machen? - Am Ende von Theoremen stehen kleine Vierecke, am Ende von Beweisen nichts – es soll genau andersherum sein!
- Im Anhang soll statt „Listing A.1“ besser „Programm A.1“ stehen.
Und speziell zum Algorithmus:
- Ich habe eigentlich einen sehr langen Algo, der mehr als eine Seite braucht. Wie kann man einen Seitenumbruch erlauben?
- Die Nummerierung im Algo sollte auch besser automatisch sein, aber mit
Code:
\begin{enumerate}[1. Schritt]
hatte ich Probleme, da dann mit fast jedem Zeilenumbruch automatisch ein neuer Schritt kommt, auch wenn item nicht gesetzt ist.
Ich habe schon viele Dokus gelesen, bin aber langsam am Ende meiner Fähigkeiten angelegt. Wäre sehr dankbar, wenn ihr noch ein paar Tipps hättet.
Gruß
Frank
Lesezeichen