Menu

HowTo_ListOfEquations

Wie ein Formelverzeichnis ähnlich einem Abbildungsverzeichnis oder einem Tabellenverzeichnis erstellt werden kann

In mathematischem Lehrmaterial kommt es öfter vor, dass Gleichungen oder Formeln mit ihrem Namen in einem Formelverzeichnis ganz ähnlich dem Abbildungsverzeichnis oder dem Tabellenverzeichnis aufgeführt werden. Da die KOMA-Script-Klassen bereits das KOMA-Script-Paket tocbasic nutzen, kann man ein solches Verzeichnis sehr einfach mit \DeclareNewTOC erzeugen:

\DeclareNewTOC[listname={Formelverzeichnis},type=equation]{loe}

Nun kann bereits mit \addxcontentsline{loe}{equation}[<Nummer>]{<Text des Eintrags>} ein Eintrag in dieses Verzeichnis erzeugt werden. loe ist die Dateierweiterung der Hilfsdatei, in der die Einträge für den nächsten LaTeX-Lauf gespeichert werden. Diese ist das letzte Argument von \DeclareNewTOC und das erste Argument von \addxcontentsline. equation ist der Typ der Einträge im optionalen Argument von \DeclareNewTOC und der Name der Ebene im zweiten Argument von \addxcontentsline. Formelverzeichnis ist die Überschrift des Verzeichnisses, das mit \listofequations ausgegeben wird. Diese Anweisung wird von \DeclareNewTOC ebenfalls definiert.

Wenn Sie eine solche \addxcontentsline innerhalb einer equation-Umgebung verwenden, with <Nummer> üblicherweise \thequation sein. <Text des Eintrags> ist der Text, der im Formelverzeichnis angezeigt werden soll. Ein erstes Beispiel könnte damit so aussehen:

\documentclass[ngerman]{scrartcl}

\usepackage{babel}

% Für ein Formelverzeichnis wird einfach ein neue TOC-Datei angelegt:
\DeclareNewTOC[listname={List of Equations},type=equation]{loe}

\begin{document}
\listofequations
\section{Beispiele}
\begin{equation}
  \addxcontentsline{loe}{equation}[\theequation]{Quadratische Gleichung}
  (a+b)^{2} = a^{2} + 2ab + b^{2}
\end{equation}
\end{document}

Allerdings ist es etwas unbequem jedes Mal dieselben drei Argumente für \addxcontentsline anzugeben. Daher ist es nützlich, sich eine neue Anweisung für die Erzeugung des Eintrags zu definieren:

\documentclass[ngerman]{scrartcl}

\usepackage{babel}

% Für ein Formelverzeichnis wird einfach ein neue TOC-Datei angelegt:
\DeclareNewTOC[listname={Formelverzeichnis},type=equation]{loe}
% Und eine Anweisung zur Erzeugung der Verzeichniseinträge:
\newcommand*{\setequationentry}[1]{%
  \addxcontentsline{loe}{equation}[\theequation]{#1}%
  \ignorespaces
}

\begin{document}
\listofequations
\section{Beispiele}
\begin{equation}
  \setequationentry{Quadatische Gleichung}
  (a+b)^{2} = a^{2} + 2ab + b^{2}
\end{equation}
\end{document}

Hinweis: Wenn Sie Umgebungen von amsmath wie align verwenden, dann wird der Zähler equation nicht bereits mit dem Start der Umgebung erhöht, sondern erst mit \\ oder nach dem Ende der Umgebung. Verwendet man daher \setequationentry vor dem ersten \\, wird in das Verzeichnis eine um eins zu kleine Nummer eingetragen. Man könnte nun \setequationentry nach dem zugehörigen \\ verwenden. Allerdings würde das Einfügen eines zusätzlichen \\ am Ende der Gleichung eine weitere Gleichungszeile mit einer weiteren Nummer erzeugen. Man braucht also eine Variante von \setequationentry, bei der eine Erhöhung des equation-Zählers angegeben werden kann, um sie wie:

\documentclass[ngerman]{scrartcl}

\usepackage{babel}
\usepackage{amsmath}

% Für ein Formelverzeichnis wird einfach ein neue TOC-Datei angelegt:
\DeclareNewTOC[listname={Formelverzeichnis},type=equation]{loe}
% Und eine Anweisung zur Erzeugung der Verzeichniseinträge:
\newcommand*{\setequationentry}[2][0]{%
  \begingroup
    \advance \value{equation} by #1\relax
    \addxcontentsline{loe}{equation}[\theequation]{#2}%
  \endgroup
  \ignorespaces
}

\begin{document}
\listofequations
\section{Beispiele}
\begin{align}
  (a+b)^{2} &= a^{2} + 2ab + b^{2} \\
  \setequationentry{Binomische Formel $(a+b)^{2}$}
  (a-b)^{2} &= a^{2} - 2ab + b^{2}
  \setequationentry[1]{Binomische Formel $(a-b)^{2}$}
\end{align}

\end{document}

oder besser:

\documentclass[ngerman]{scrartcl}

\usepackage{babel}
\usepackage{amsmath}

% Für ein Formelverzeichnis wird einfach ein neue TOC-Datei angelegt:
\DeclareNewTOC[listname={Formelverzeichnis},type=equation]{loe}
% Und eine Anweisung zur Erzeugung der Verzeichniseinträge:
\newcommand*{\setequationentry}[2][0]{%
  \begingroup
    \advance \value{equation} by #1\relax
    \addxcontentsline{loe}{equation}[\theequation]{#2}%
  \endgroup
  \ignorespaces
}

\begin{document}
\listofequations
\section{Beispiele}
\begin{align}
  \setequationentry[1]{Binomische Formel $(a+b)^{2}$}
  (a+b)^{2} &= a^{2} + 2ab + b^{2} \\
  \setequationentry[1]{Binomische Formel $(a-b)^{2}$}
  (a-b)^{2} &= a^{2} - 2ab + b^{2}
\end{align}

\end{document}

zu verwenden.

Da eigentlich immer entweder nichts oder eine 1 zum Zähler equation zu addieren ist, schlage ich die Verwendung einer Anweisung mit Sternform vor:

\documentclass[ngerman]{scrartcl}

\usepackage{babel}
\usepackage{amsmath}

% Für ein Formelverzeichnis wird einfach ein neue TOC-Datei angelegt:
\DeclareNewTOC[listname={Formelverzeichnis},type=equation]{loe}
% Und eine Anweisung zur Erzeugung der Verzeichniseinträge:
\NewDocumentCommand{\setequationentry} {sm} {%
  \begingroup
    \IfBooleanT {#1}{\advance \value{equation} by 1\relax}%
    \addxcontentsline{loe}{equation}[\theequation]{#2}%
  \endgroup
  \ignorespaces
}

\begin{document}
\listofequations
\section{Beispiele}
\begin{align}
  \setequationentry*{Binomische Formel $(a+b)^{2}$}
  (a+b)^{2} &= a^{2} + 2ab + b^{2} \\
  \setequationentry*{Binomische Formel $(a-b)^{2}$}
  (a-b)^{2} &= a^{2} - 2ab + b^{2}
\end{align}

Außerdem existiert eine dritte Form:
\begin{equation}
  \setequationentry{Binomische Formel $(a+b)\times(a-b)$}
  (a+b)\times(a-b) = a^{2} - b^{2}
\end{equation}

\end{document}

Man kann aber auch den Namen der aktuellen Umgebung verwenden, um nur bei Bedarf den equation-Zähler automatisch zu erhöhen:

\documentclass[ngerman]{scrartcl}

\usepackage{babel}
\usepackage{amsmath}

% Für ein Formelverzeichnis wird einfach ein neue TOC-Datei angelegt:
\DeclareNewTOC[listname={Formelverzeichnis},type=equation]{loe}
% Und eine Anweisung zur Erzeugung der Verzeichniseinträge:
\makeatletter% wegen `@' in `\@currenvir` und `\@ne`
\newcommand{\setequationentry}[1]{%
  \begingroup
    \Ifstr{\@currenvir}{equation}{}{%
      \advance \value{equation} by \@ne\relax%
    }%
    \addxcontentsline{loe}{equation}[\theequation]{#1}%
  \endgroup
  \ignorespaces
}
\makeatother% wegen `\makeatletter' oben


\begin{document}
\listofequations
\section{Beispiele}
\begin{align}
  \setequationentry{Binomische Formel $(a+b)^{2}$}
  (a+b)^{2} &= a^{2} + 2ab + b^{2} \\
  \setequationentry{Binomische Formel $(a-b)^{2}$}
  (a-b)^{2} &= a^{2} - 2ab + b^{2}
\end{align}

Außerdem existiert eine dritte Form:
\begin{equation}
  \setequationentry{Binomische Formel $(a+b)\times(a-b)$}
  (a+b)\times(a-b) = a^{2} - b^{2}
\end{equation}

\end{document}

Es wäre ebenfalls möglich, das Schreiben des Eintrags an die Ausgabe der Formelnummer zu knüpfen. Eine solche Lösung wäre aber ebenfalls davon abhängig, ob amsmath verwendet wird.

Soll der Name einer Formel nicht nur in ein Verzeichnis eingetragen werden, sondern soll er zusätzlich als Titel im Dokument ausgegeben werden, sei auf die KOMA-Script-Anleitung und auf das KOMA-Script-Buch verwiesen. In der Erklärung zu \DeclareNewTOC gibt es das Beispiel einer remarkbox-Umgebung, das einfach zur Definition einer Gleitumgebung namedequation oder einer nicht gleitenden Umgebung namedequation- angepasst werden kann. Die Definition min. einer dieser Umgebungen ist auch notwendig, um ggf. \captionof verwenden zu können.


Related

Wiki (Deutsch): HowTo_Floats

MongoDB Logo MongoDB