PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Literaturverzeichnis per Macro



digitaldonky
03-01-2006, 19:32
Hallo,

ich habe mir ein Macro erstellt um meine Links dierkt im Text mit eingeben zu können:



% #1:Wort #2:URL #3:local-file (CD-Version) #4:Beschreibung
\newcommand\myref[4]{
%\href {Url}{Text}
\href{#2}{#1}
\footnote{
%%%%
% wenn beschreibung gegeben, wird die Beschreibung bevorzugt.
% Sonst wird Wort verwendet, wenn auch nicht gegeben wird nur die URL angegeben.
%wenn Beschreibung leer, Wort verwenden
\ifthenelse{\equal{#4}{}}{\ifthenelse{\equal{#1}{} }{}{#1\ifthenelse{\equal{#2}{}}{}{: \\}}}{#4 \ifthenelse{\equal{#2}{}}{}{: \\}}
%URL Einfügen
\ifthenelse{\equal{#2}{}}{}{\href{#2}{#2}}
% Local-Url einfügen, wenn vorhanden
%\ifthenelse{\equal{#3}{}}{}{CD-Link :\href{#3}{#3}}
}
%%% EIGENE LINKLISTE

%wie Footnote inhalt (Kopie)
}



Sieht verwirrend aus, funktioniert aber sehr gut.

Mein Problem:
Ich will genau das was in der Footnote steht im Anhang als eine Art Literaturverzeichnis haben. Eine Nummerierung wäre gut, (die fußnoten sind durchgehend nummeriert), da ich aber keine "nicht-macro" Fußnoten verwende, könnte man in dem Verzeichnis einfac fortlaufende nummern verwenden.

Wie kann ich mit meinem Macro an eine andere Stelle des Dokuments schreiben???

Ich dachte eigentlich einfach in eine externe Datei zu Schreiben und diese (beim nächsten Aufruf) mit Include (o.ä.) einzufügen.

Alternativ:
Wie könnte ich automatisch (also mit meinem Macro) bibtexeinträge erstellen??

So sehr ich Latex mag. Es gibt keine verwirrend dokumentiertere Anwendung auf dieser Welt!!

rais
03-01-2006, 21:23
Hallo und Herzlich Willkommen,
Du könntest z.B. mit \addtocontents{xxx}{bla} das Ganze in eine extra-Datei schreiben, wobei xxx dann für die Erweiterung steht.
Dann könntest Du Dir eine Ausgaberoutine ähnlich \listoffigures bauen, in der Du dann mit \@starttoc{xxx} Deine so erstellte Liste wieder einsammelst.
Und wenn Du zu der schreibfaulen Sorte gehörst, dann kannst Du Dir auch so etwas bauen:
\newcommand{\myfootnote}[1]{%
\footnote{#1}
\addtocontents{xxx}{\thefootnote\hspace{1EM}#1}
}
dann brauchst Du in Deinem \myref nur \myfootnote statt \footnote aufzurufen, und brauchst hinterher nicht an zwei Stellen zu ändern, falls Dir nochwas für die Ausgabe der Fußnote bei \myref einfällt;)

Hier (http://mrunix.de/forums/showthread.php?t=41126) findest Du ein Beispiel (wenn auch nicht minimal), wie man eine eigene Datei zusammenstricken kann - und hinterher auch wieder im Text erscheinen lassen kann (auch wenn das in dem thread nicht erwünscht war).
MfG,

digitaldonky
03-01-2006, 22:46
Erst mal danke für die schnelle Antwort.

Also ich habe in meinem Arbeitsverzeichnist eine Datei mit dem gleichen Name, wie mein Tex-Dokument angelegt: DiplomArbit.lit und meinem Macro


\addtocontents{lit}{test}

hinzugefügt.
Leider Klappt das nicht. (hatte das vorher schon erfolglos mit \addcontentsline ebenso erfolglos versucht. Muß ich noch irgend einen Makeirgendwas aufrufen oder ein Paket Laden??

Kann ich auch das ganze fertig formatiert in die .list Datei schreiben und sie dann einfach mit import-fil (o.ä.) includen?

rais
03-01-2006, 23:15
Hallo,
mit \addtocontents{lit}{bla blubb} wird zunächst so etwas

\@writefile{lit}{bla blubb} in die aux-Datei geschrieben. Wenn Du nirgends im Dokument auf foo.lit lesend zugreifst, dann wird diese Schreibanweisung im foo.aux auch ignoriert (ähnlich lof/lot/toc, wenn die entsprechenden Befehle \listoffigures/\listoftables u/o \ableofcontents fehlen: die Anweisungen stehen zwar in der aux, wenn aber z.B. kein TOC erstellt zu werden braucht, dann wird auch die Datei foo.toc nicht angelegt.
Und für TOC-artige Listen heißt der Befehl zum Einlesen \@starttoc{}, vgl. in der von Dir verwendeten Klasse mit \tableofcontents o.ä.
Anders sieht die Sache aus, wenn Du z.B. mit \immediate\write arbeitest - da müsstest Du aber erst die Datei zum Schreiben öffnen, schreiben, Datei schließen und hinterher ginge dann aber auch ein \input (je nachdem, was geau Du da denn reingeschrieben hast)
MfG,

digitaldonky
12-01-2006, 01:09
In der DiplomArbeit.aux stehen die Einträge wie mit \addtocontents{lit}{#2} angegeben.

\@writefile{lit}{http://www.coloreal.com }
\@writefile{lit}{http://www.gretagmacbeth.com}
\@writefile{lit}{http://www.seyboldreports.com/SRIP/subs/0207/IP020714.HTM }
\@writefile{lit}{http://www.seyboldreports.com/SRPS/subs/2904/html/news-comments.html }
\@writefile{lit}{http://iccview.de/download/ICCView-Colormanagement.pdf}

Aber trotz eines \@starttoc{lit} am Ende der Datei gibt wird nichts in die DiplomArbeit.lit geschrieben.

Stattdessen gibt es Fehlermeldungen:


! You can't use `\spacefactor' in vertical mode.
\@->\spacefactor
\@m
l.1477 \@
starttoc{lit}
Sorry, but I'm not programmed to handle this case;
I'll just pretend that you didn't ask for it.
If you're in the wrong mode, you might be able to
return to the right one by typing `I}' or `I$' or `I\par'.

! Missing $ inserted.
<inserted text>
$
l.1477 \@
starttoc{lit}
I've inserted a begin-math/end-math symbol since I think
you left one out. Proceed, with fingers crossed.

! Missing $ inserted.
<inserted text>
$
l.1478

I've inserted a begin-math/end-math symbol since I think
you left one out. Proceed, with fingers crossed.


Was kann das den nun wieder heissen?

Grüße
Thorsten

rais
12-01-2006, 14:30
Hallo,
Die Fehlermeldung deutet auf ein direkt verwendetes \@starttoc hin.
\@starttoc{} ist ein interner Befehl und darf außerhalb von Paketen nicht ohne weiteres verwendet werden, also z.B.


\makeatletter
\newcommand{\printmylit}[1]{%
\chapter*{#1}\markboth{#1}{#1}
\@starttoc{lit}
}
\makeatother in der Präambel und


\printmylit{Wie-auch-immer-das-Teil-heißt}
an der Stelle, wo's hinsoll.
MfG,

digitaldonky
16-01-2006, 17:04
Erst mal vielen Dank für die bisherige Hilfe. Dafür gibt es eine kurze Zusammenfassung für alle anderen Interessiereten


% Im text verwende ich folfende Funktion:
% #1:Wort #2:URL #3:local #4:Beschreibung
\newcommand\myref[4]{
%\href {Url}{Text}
\href{#2}{#1}
\footnote{\myLit{#1}{#2}{#3}{#4}}%
%in der folgenden Zeile steckt das Problem
%\addtocontents{lit}{\myLit{#1}{#2}{#3}{#4}}%
}

\newcommand{\myLit}[4]{%
% wenn beschreibung gegeben, wird die Beschreibung bevorzugt.
% Sonst wird Wort verwendet, wenn auch nicht gegeben wird nur die URL angegeben.
%wenn Beschreibung leer, Wort verwenden
\ifthenelse{\equal{#4}{}}{\ifthenelse{\equal{#1}{} }{}{#1\ifthenelse{\equal{#2}{}}{}{: \\}}}{#4 \ifthenelse{\equal{#2}{}}{}{: \\}}
%URL Einfügen
\ifthenelse{\equal{#2}{}}{}{\href{#2}{#2}}
% Local-Url einfügen, wenn vorhanden
%\ifthenelse{\equal{#3}{}}{}{CD-Link :\href{#3}{#3}}
}%END myLit

% Vorbereitungen für die Ausgabe
\makeatletter
\newcommand{\printmylit}[1]{%
\section{#1}\markboth{#1}{#1}
\@starttoc{lit}
}


% Ausgabe der Literatur
\newpage
\printmylit{Literaturverzeichnis}


Danke klappt soweit gut aber die "programmierfähigkeiten" von Latex Lassen mich immer noch verzweifeln.
Ich habe das Macro umgeschrieben:
- Meine if/else Konstrukte stehen jetzt in einer eigenen Funktion myLit




\footnote{\myLit{#1}{#2}{#3}{#4}}%
\addtocontents{lit}{\myfootnote{#1}{#2}{#3}{#4}}%

\newcommand{\myLit}[4]{%
% wenn beschreibung gegeben, wird die Beschreibung bevorzugt.
% Sonst wird Wort verwendet, wenn auch nicht gegeben wird nur die URL angegeben.
%wenn Beschreibung leer, Wort verwenden
\ifthenelse{\equal{#4}{}}{\ifthenelse{\equal{#1}{} }{}{#1\ifthenelse{\equal{#2}{}}{}{: \\}}}{#4 \ifthenelse{\equal{#2}{}}{}{: \\}}
%URL Einfügen
\ifthenelse{\equal{#2}{}}{}{\href{#2}{#2}}
% Local-Url einfügen, wenn vorhanden
%\ifthenelse{\equal{#3}{}}{}{CD-Link :\href{#3}{#3}}
}%END myLit


Für die Fußnoten funktioniert das super. Sobald ich aber versuche etwas bestimmtes in DiplomArbeit.lit zu schreiben geht nix mehr:



% funktioniert mit Nummerierung, aber es werden für Leere Parameter Leerzeilen eingefügt
\addtocontents{lit}{$[$\thefootnote$]$\hspace{1EM}#4\newline\href{#2}{#2}\newline}%
% geht nicht
\addtocontents{lit}{\myfootnote{#1}{#2}{#3}{#4}}%


Ich kann in \addcontents weder per If/else bestimmen was rein soll, noch kann ich es über die Funktion einfügen. !!! Wie denn???
:eek:
:(
:confused:
:mad:

rais
16-01-2006, 19:17
Hallo,
addtocontents lässt Dein Argument zerbrechen, versuch's mal so:


\newcommand\myref[4]{
%\href {Url}{Text}
\href{#2}{#1}
\footnote{\myLit{#1}{#2}{#3}{#4}}%
%in der folgenden Zeile steckt das Problem nicht mehr :)
\addtocontents{lit}{\protect\myLit{#1}{#2}{#3}{#4} }%
}

MfG,

digitaldonky
16-01-2006, 23:11
Du bist mein Held !
Jetzt funktionierts.
Dafür gibt es auch alles nochmal in Kurzfassung:

%% IM HEADER
\usepackage{hyperref}
\usepackage{ifthen}

% hyperref - soll als letztes Paket eingebunden sein!
% noch ein parra Hyperref Optionen (sonst sieht es furchtbar aus.
\usepackage{color}
\definecolor{darkred}{rgb}{0.5,0,0}
\definecolor{darkgreen}{rgb}{0,0.5,0}
\definecolor{darkblue}{rgb}{0,0,0.5}
\usepackage{hyperref}
\hypersetup{colorlinks
,linkcolor=darkblue
,filecolor=darkgreen
,urlcolor=darkred
,citecolor=darkblue
}
% end Optionen Hyperref


%% Ein Macro erstellen, daß Links als \href ausgibt und eine mit \href verlinkte Fußnote erstellt
% und einen Eintrag in die Literaturliste vornimmt
% Parameter :{Titel} {LinkAdresse}{Local-Url}{Beschreibung}
% Benutzung :\myref{Wort}{URL}{Local-Url}{Beschreibung}
% #1:Wort #2:URL #3:local #4:Beschreibung
\newcommand\myref[4]{
%\href {Url}{Text}
\href{#2}{#1}
\footnote{\myLit{#1}{#2}{#3}{#4}}%
%\addtocontents{lit}{\myLit{#1}{#2}{#3}{#4}}%
\addtocontents{lit}{\thefootnote \hspace{1EM} \protect\myLit{#1}{#2}{#3}{#4}\newline\newline}%
}
\newcommand{\myLit}[4]{%
% wenn beschreibung gegeben, wird die Beschreibung bevorzugt.
% Sonst wird Wort verwendet, wenn auch nicht gegeben wird nur die URL angegeben.
%wenn Beschreibung leer, Wort verwenden
\ifthenelse{\equal{#4}{}}{\ifthenelse{\equal{#1}{} }{}{#1\ifthenelse{\equal{#2}{}}{}{: \\}}}{#4 \ifthenelse{\equal{#2}{}}{}{: \\}}
%URL Einfügen
\ifthenelse{\equal{#2}{}}{}{\href{#2}{#2}}
% Local-Url einfügen, wenn vorhanden
%\ifthenelse{\equal{#3}{}}{}{CD-Link :\href{#3}{#3}}
}% end myLit

%$[$\thefootnote$]$\hspace{1EM}#4\newline\href{#2}{#2}\newline}%

%% ENDE Macro erstellen


% Funktion, die die lit datei ausliest und daraus eine Literaturliste macht (s.u.)
% Ich habe eine \section als Überschrift!
\makeatletter
\newcommand{\printmylit}[1]{%
\section{#1}\markboth{#1}{#1}
\@starttoc{lit}
}


%% IM HAUPTTEIL
% kann das Macro so verwendet werden:

bla bla \myref{Diplomarbeit von Tobias Huneke.}{http://iccview.de/download/ICCView-Colormanagement.pdf}{}{Tobias Huneke, Internetseite zur visualisierung von ICC Profilen mit Hilfe von 3D-Farbraummodellen, FH-Köln, Juni 2002}

%% AN DER STELLE; WO DAS LINKVERZEICHNIS ERSCHEINEN SOLL
% Hier wird beim zweiten Rendern des Latex Dukuments die lit Datei eingelesen.
\newpage
\@starttoc{lit}
\begin{flushleft}
\printmylit{Literaturverzeichnis}
Lorem Ipsum in pleites und geiers
\end{flushleft}


Erklärung

Die Zeile:


\addtocontents{lit}{\thefootnote \hspace{1EM} \protect\myLit{#1}{#2}{#3}{#4}\newline\newline}%

erzeugt aus jedem \myref in der Dokument.aux Datei Einträge, wie den folgenden:


\@writefile{lit}{27\hspace {1EM} \myLit {Diplomarbeit von Tobias Huneke.}{http://iccview.de/download/ICCView-Colormanagement.pdf}{}{Tobias Huneke, Internetseite zur visualisierung von ICC Profilen mit Hilfe von 3D-Farbraummodellen, FH-K\"oln, Juni 2002}\newline \newline }


Der Befehl:

\begin{flushleft}\printmylit{Literaturverzeichnis}
fügt beim zweiten Kompilieren alles wieder ein und erstellt die \section Überschrift. Wenn plötzlich viele Fehler aufttauchen die lit Datei leeren (weiß nicht warum, aber ist ein paar mal vorgekommen)

:D