PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Definition von eigenen Referenzen



xaMax
11-02-2010, 11:32
Hallo,

ich bin momentan auf der Suche nach einer Möglichkeit, mit der ich eigene Referenzen aufbauen kann, ähnlich einem Literaturverzeichnis.

Ich möchte bspw. im Anhang eine Übersicht über Interviewpartner haben (in einer Tabellenumgebung) und die einzelnen Einträge mit einem "label" versehen. Im Text möchte ich dann auf diese Einträge in der Tabelle verweisen mit einem einfachen Befehl wie z.B. \ref{interviewpartner1}.


Als Beispiel:
Tabelle: Max Mustermann\label{interviewpartner1} - Chef des Unternehmens - Interview am 01.01.2010

Text: Ich habe ein Interview mit \ref{interviewpartner1} geführt. = Ich habe ein Interview mit Max Mustermann geführt

Vorteile sehe ich darin, dass man sehr schnell die Angaben austauschen kann. Wenn jemand z.B. später doch anonym bleiben möchte, reicht es in der Tabelle aus "Max Mustermann" ein "Anonym" zu machen und überall im Text steht automatisch "Anonym".

Vielen Dank für Hinweise und Tipps.

u_fischer
11-02-2010, 12:10
\documentclass{scrreprt}
\newcommand\defInterviewPartner[2]{%#1=Key, #2=Name
\expandafter\def\csname IPname.#1\endcsname{#2}}

\newcommand\useIPname[1]{\csname IPname.#1\endcsname}

\defInterviewPartner{M1}{Max Mustermann}
\defInterviewPartner{A1}{Alfred Abel}
\begin{document}

ich sprach mit \useIPname{M1} und mit \useIPname{A1}

\end{document}

Anmerkung: \csname ist nur dafür da, um interne Befehle der Form IPname.M1 etc zu erzeugen. Der Präfix und der Punkt schützt sie vor versehentlichem Überschreiben durch andere Pakete. Die Liste der Namen kannst du in eine externe Datei auslagern, die du dann mit \input lädst.

mechanicus
11-02-2010, 12:36
Hi,

alternativ kannst du dich auch das glossaries-Paket nutzen. Hier hast du automatisch eine Sortierung.

Gruß
Marco

xaMax
11-02-2010, 12:49
Hallo,
vielen Dank für die Antwort.

Das Glossary Paket hatte ich mir mal angesehen, fand es aber nicht direkt passend.

Die Lösung unten sah schon sehr gut aus, aber es besteht keine automatische Verlinkung auf die definierte Textzeile (die zudem nicht ausgegeben wird).

Ich habe den Code daraufhin erweitert (mit hypertarget und hyperlink), es funktioniert dann wunderbar in reinem Text - jedoch nicht in einer Tabellenumgebung. Da wird dann der Verweis im Text einfach leer gelassen.




\documentclass{scrreprt}
\usepackage{hyperref}

\newcommand\defInterviewPartner[2]{\hypertarget{#1}{#2}%#1=Key, #2=Name
\expandafter\def\csname IPname.#1\endcsname{#2}}

\newcommand\useIPname[1]{\hyperlink{#1}{\csname IPname.#1\endcsname}}


\begin{document}

\begin{table}[htdp]
\begin{tabular}{ c c }
\defInterviewPartner{M1}{Max Mustermann} & \defInterviewPartner{A1}{Alfred Abel}
\end{tabular}
\end{table}

ich sprach mit \useIPname{M1} und mit \useIPname{A1}

\end{document}

mechanicus
11-02-2010, 15:17
Hi,


\documentclass{scrreprt}
\usepackage{hyperref}

\newcommand\defInterviewPartner[2]{\hypertarget{#1}{#2}%#1=Key, #2=Name
\expandafter\gdef\csname IPname.#1\endcsname{#2}}

\newcommand\useIPname[1]{\hyperlink{#1}{\csname IPname.#1\endcsname}}


\begin{document}

\begin{table}[htdp]
\begin{tabular}{ c c }
\defInterviewPartner{M1}{Max Mustermann} & \defInterviewPartner{A1}{Alfred Abel}
\end{tabular}
\end{table}

ich sprach mit \useIPname{M1} und mit \useIPname{A1}

\end{document}

Gruß
Marco

PS: glossaries hat extra longtable-Umgebungen zur Ausgabe.

xaMax
11-02-2010, 16:06
Danke!! (Es hat eine Weile gedauert, aber dann habe ich das zusätzliche "g" vor dem "def" gefunden ;) ) Jetzt funktioniert es einwandfrei!


PS: glossaries hat extra longtable-Umgebungen zur Ausgabe.
Ich habe mir das Paket mal angesehen und ich nehme an, es wäre auch damit möglich. Aber da ich mehrere unterschiedliche Tabellen erstellen möchte (z.B. InterviewPartner, Workshops, usw.) und ich die Tabellen auch einheitlich zu meinen anderen Tabellen gestalten möchte, bleibe ich bei der anderen Möglichkeit - mit \intervieparter und \definterviewpartner geht es ja auch recht schnell :) Ehe ich mich jetzt in glossaries eingearbeitet habe, müsste ich die Arbeit auch schon abgeben ;)
Aber für das nächste Mal werde ich dran denken! Sieht recht umfangreich aus das Paket! Danke!

xaMax
12-02-2010, 12:28
Hallo,

es funktioniert leider doch noch nicht 100%ig.

Die Tabellen mit der Definition stehen im Anhang. Wenn ich nun vorher mit \useIPname auf die entsprechenden Einträge zugreifen möchte, funktioniert es nicht. Es sieht so aus, als ob zuerst die Definition stehen muss und diese erst danach verwendet werden können. Wie kann man das umgehen, wenn die Definition erst im Anhang erfolgen soll?

Minimalbeispiel:

\documentclass{scrreprt}
\usepackage{hyperref}

\newcommand\defInterviewPartner[2]{\hypertarget{#1}{#2}%#1=Key, #2=Name
\expandafter\def\csname IPname.#1\endcsname{#2}}

\newcommand\useIPname[1]{\hyperlink{#1}{\csname IPname.#1\endcsname}}


\begin{document}


ich sprach mit \useIPname{M1} und mit \useIPname{A1}


\begin{table}[htdp]
\begin{tabular}{ c c }
\defInterviewPartner{M1}{Max Mustermann} & \defInterviewPartner{A1}{Alfred Abel}
\end{tabular}
\end{table}

\end{document}

tral
12-02-2010, 12:29
zweimal kompilieren?

Christian.

xaMax
12-02-2010, 12:32
zweimal kompilieren?
Dachte ich auch zuerst - aber hilft leider nicht :/
(Auch nicht drei, oder viermal ;) )

u_fischer
12-02-2010, 13:36
So geht das nicht. Die \defInterviewPartner müssen natürlich am Anfang stehen, die füllen ja sozusagen die Datenbank. Wenn du anschließend den definierten Namen auf zwei verschiedene Arten nutzen willst, definiere dir zwei \use-Befehle, z.B. \useIPnamemitAnker und \useIPnamemitLink.

ctansearch
12-02-2010, 13:59
Schau mal dort.
Läßt sich bestimmt für Deine Zwecke anpassen.
http://www.mrunix.de/forums/showthread.php?t=67255

xaMax
12-02-2010, 14:34
So geht das nicht. Die \defInterviewPartner müssen natürlich am Anfang stehen, die füllen ja sozusagen die Datenbank. Wenn du anschließend den definierten Namen auf zwei verschiedene Arten nutzen willst, definiere dir zwei \use-Befehle, z.B. \useIPnamemitAnker und \useIPnamemitLink.
Kann man nicht mit einem ersten Kompilieren die Datenbank füllen und mit einem zweiten dann abrufen?

Die Idee hinter dem ganzen ist, dass ich an beliebigen Stellen: \defInterviewPartner{A1}(Max Mustermann} setzen kann, dort "Max Mustermann" ausgeschrieben wird und ich dann an beliebigen anderen Stellen mit \InterviewPartner{A1} einen Link zu dieser Stelle erhalte und als Text wiederum nur "Max Mustermann" dort steht.

@ctansearch: Der Link sieht nach viel Bastelarbeit aus.
Da werde ich wohl wirklich eher Richtung useAnker und useText gehen und dann immer zwischen Dokumenten hin und herwechseln, wenn ich neue Interviepartnerdefinieren möchte.

Danke schonmal an alle!!

ps: falls es noch jemanden interessiert, mit zwei Befehlen sieht das ganze so aus:


\documentclass{scrreprt}
\usepackage{hyperref}

\newcommand\defInterviewPartner[2]{%#1=Key, #2=Name
\expandafter\def\csname IPname.#1\endcsname{#2}}

\newcommand\ankerIPname[1]{\hypertarget{#1}{\csname IPname.#1\endcsname}}
\newcommand\useIPname[1]{\hyperlink{#1}{\csname IPname.#1\endcsname}}

%Definitionen
\defInterviewPartner{M1}{Max Mustermann}
\defInterviewPartner{A1}{Alfred Abel}

\begin{document}


ich sprach mit \useIPname{M1} und mit \useIPname{A1}


\begin{table}[htdp]
\begin{tabular}{ c c }
\ankerIPname{M1} & \ankerIPname{A1}
\end{tabular}
\end{table}

\end{document}

u_fischer
12-02-2010, 14:50
Kann man nicht mit einem ersten Kompilieren die Datenbank füllen und mit einem zweiten dann abrufen?

Natürlich kann man. Genau so das tun Pakete wie biblatex, glossaries, acronym, todonotes, ....

Ich würde allerdings nicht, die Daten der Interviewpartner über das ganze Dokument verteilen, sondern sie in einer Datei oder ev. sogar in einer Datenbank sammeln.

xaMax
12-02-2010, 15:04
Natürlich kann man. Genau so das tun Pakete wie biblatex, glossaries, acronym, todonotes, ....

Ich würde allerdings nicht, die Daten der Interviewpartner über das ganze Dokument verteilen, sondern sie in einer Datei oder ev. sogar in einer Datenbank sammeln.
Hm gut, für die nächste Arbeit werde ich dann wie oben geschrieben mir wirklich glossaries und co genauer ansehen.

Verteilt werden sollten die Definitionen auch nicht direkt. Ich wollte sie direkt in Tabellen im Anhang definieren (siehe Ausgangspost).

Jetzt ist es wie gesagt eine definitionen.tex geworden, die ich im header einbinde und in den Tabellen wird der "Anker" gesetzt und im Text das "use". Nicht super schön, aber selten :)