PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Definitionen im Text und wiederholt am Ende



slowfox
29-07-2009, 11:32
Ich habe im Text mehrere Blöcke mit Definitionen. Diese Definitionen (mit Titel und Inhalt) möchte ich mir am Ende des Dokumentes im Überblick auflisten lassen. Bislang schaffe ich es leider nur, mir analog zu Abbildungs- und Tabellenverzeichnis ein Definitionsverzeichnis ausgeben zu lassen (siehe Beispiel 1). Nun Frage ich mich, ob ich überhaupt ausgehend von diesen Definitionsblöcken eine Definitionsliste (ähnlich der Description-Umgebung) irgendwie automatisiert erstellen lassen kann, oder ob das manuelle Erstellen der einzig mögliche Weg ist (siehe Beispiel 2). Das manuelle Erstellen würde ich gerne umgehen, da dies bei mehreren Dutzend Definitionblöcken fehlerträchtig ist, da ich jede Definition doppelt im Text stehen hätte.

Über Ideen würde ich mich sehr freuen.

Beispiel 1

\documentclass[english]{scrartcl}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{blindtext}
\usepackage{tocbasic} % needed for the "list of definitions"

%%% environment for definitions
\newtheorem{defbase}{Definition}
\newenvironment{definition}[1][]%
{\begin{defbase}[#1]\addcontentsline{definition}{section}%
{\protect\numberline{\thedefbase}{#1}}}
{\end{defbase}}

\begin{document}

\section{Test}
\blindtext
\begin{definition}[Test]
\blindtext
\end{definition}
\blindtext

\listoftoc[List of Definitions]{definition}

\end{document}

Beispiel 2

\documentclass[english]{scrartcl}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{blindtext}

%%% environment for definitions
\newtheorem{definition}{Definition}

\begin{document}

\section{Test}
\blindtext
\begin{definition}[Test]
\blindtext
\end{definition}
\blindtext

\section*{List of Definitions}
\begin{description}
\item[Test] \blindtext
\end{description}

\end{document}

cookie170
29-07-2009, 12:12
Hallo,

ich brauchte mal 2007 eine Liste der Empfehlungen, woraufhin mir Rainer (rais) folgenden Code schrieb:


%%%%%%%%%%%%%%%%
\newcommand\lorname{\mdseries\textit{Liste der Empfehlungen:}}%list of recommendations
\newcommand\lorext{lor} %Dateierweiterung
\newcommand\lortmp{}
\newcounter{Empfehlungen}
\newcommand{\Empf}[2][\empty]{%
\textit{Empfehlung \refstepcounter{Empfehlungen}\theEmpfehlungen:}%
\vspace{-0.75\baselineskip} \begin{framed} #2 \end{framed}%
\ifx#1\empty\renewcommand\lortmp{\footnotesize #2 }\else\renewcommand\lortmp{\footnotesize #1}\fi%
\addcontentsline{\lorext}{subsection}{\theEmpfehlu ngen\quad\lortmp}
}
\makeatletter
\newcommand\listofrecommendations{%
\footnotesize
\section*{\lorname}
\markboth{\lorname}{}
\@starttoc{\lorext}
}
\makeatother
%%%%%%%%%%%%%%%%%%%%%%%%%

Gruß,
Alexander

u_fischer
29-07-2009, 12:35
Nun, natürlich geht es. LaTeX und Pakete wie endfloat oder answers schippen doch jetzt schon diversen Text von einem Teil des Dokuments in einen anderen.

Ganz einfach wird es, wenn du die Definitionen von Anfang an in externen Dateien hast (die kannst du zum Beispiel mit filecontents erstellen). Dann kannst du sie sooft du willst mit \input einladen.

bobmalaria
29-07-2009, 13:00
hi,

ich würde einfach die funktionalität von ntheorem verwenden


\documentclass[ngerman]{scrreprt}
\usepackage{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{ntheorem}
\newtheorem{mydef}{Definition}
\theoremstyle{changebreak}

\begin{document}

\begin{mydef}[Title]
Some text goes here

\end{mydef}

\addchap{Liste der Definitionen}
\listtheorems{mydef}
\end{document}

gruss

u_fischer
29-07-2009, 13:34
hi,

ich würde einfach die funktionalität von ntheorem verwenden



\listtheorems{mydef}



Die Frage lautet aber "Diese Definitionen (mit Titel und Inhalt) möchte ich mir am Ende des Dokumentes im Überblick auflisten lassen."

slowfox
30-07-2009, 08:35
Danbe Alexander, Ulrike und bobmalaria für die Antworten.

@bobmalaria: Wie Ulrike auch schon festgestellt hat, dein Tipp ging leider etwas an meiner Frage vorbei. Nichtsdestotrotz ist Dein Tipp eine Vereinfachung gegenüber meinem Beispiel 1.

@Ulrike: Auslagerung der Definitionen in externe Dateien ist sicherlich der flexibelste Weg. Allerdings besteht eine Definition ja immer aus dem zu definierenden Term und der Erläuterung, also zwei Variablen, die unterschiedlich gespeichert werden müssten, da sie je nach Verwendung unterschiedlich formatiert werden. Dies scheint mir mit der Datei-Idee nicht umsetzbar, hier lege ich in der externen Datei das Layout ja bereits mit fest.

@Alexander: Am weitesten hat mich Dein Tipp gebracht. Nach ein paar Modifikationen habe ich nun folgendes:


\documentclass[english]{article}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{blindtext}

%%% environment for definitions
\newtheorem{defbase}{Definition}

%%% Workaround um Verzeichnis zu erstellen
\newcommand\defext{def}
\newcommand{\definition}[2]{%
\begin{defbase}[#1]#2\end{defbase}%
\addcontentsline{\defext}{section}{#1\quad\textmd{ #2}}%
}
\makeatletter
\newcommand\listofdefinitions{%
\section*{List of definitions}%
\@starttoc{\defext}%
}
\makeatother

\begin{document}

\section{Test}
\blindtext
\definition{Test}{\blindtext}
\blindtext

\listofdefinitions

\end{document}

Leider ergänzt mir dieser Weg bei jeder Definition die Seitenzahl, auf der diese auftaucht. Auf diesen ergänzenden Hinweis würde ich gerne verzichten. Hat jemand eine Idee, wie ich die Seitenzahl beseitigen kann? Oder gibt es noch weitere Umsetzungsideen? Herzlichen Dank.

u_fischer
30-07-2009, 08:59
Du legst in einer externen Datei das Layout nicht fest. Du kannst dort z.B. einfach schreiben:


\def\meintitel{Bla}
\def\meinuntertitel{blub}
\begin{meininhalt}
blablabal
\end{meininhalt}


Und in deinem Dokument definierst du dir vor dem Einladen die Umgebung, wie du willst.

Mit \addtocontents oder \addcontentsline kann man natürlich auch Text in eine externe Datei schreiben, allerdings solltest du dir im Klaren sein, dass zerbrechliche Befehle wie \footnote, \cite usw mit \protect geschützt werden müssen.

slowfox
30-07-2009, 11:12
Hallo Ulrike,

ich muss zugeben, ich habe ein bisschen Zeit gebraucht bis ich Deine Anregung vollständig verstanden habe. Nun aber einen herzlichen Dank dafür, denn es scheint zu funktionieren. Ich habe mal ein Beispiel zusammen gebaut:


\documentclass[english]{article}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{blindtext}
\usepackage{filecontents}

%%% environment for definitions
\newtheorem{defbase}{Definition}
\newenvironment{definition}%
{\begin{defbase}[\deftitle]}%
{\end{defbase}}

\begin{document}

\section{Test}

\blindtext

\begin{filecontents}{def1.tex}
\def\deftitle{Test}
\begin{definition}
\blindtext
\end{definition}
\end{filecontents}

\input{def1}

\blindtext

\section*{List of Definitions}

\renewenvironment{definition}{\item[\deftitle]}{}

\begin{description}
\input{def1}
\end{description}

\end{document}

Mit diesem Ergebnis kann ich arbeiten. Einziger Haken ist die Unmenge an Hilfsdateien (bspw. def1.tex), die auf diese Weise entstehen.