Einzelne Autornamen extrahieren und anderweitig verwenden

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


Schmantii
Forum-Anfänger
Forum-Anfänger
Beiträge: 22
Registriert: Sa 5. Dez 2015, 02:42

Einzelne Autornamen extrahieren und anderweitig verwenden

Beitrag von Schmantii »

Hallo liebe Leute,

ich arbeite derzeit in meinem Institut an einem jährlich erscheinenden Journal, für welches wir unsere Arbeitsroutinen verbessern bzw. weiter automatisieren möchten. Da wir die Artikel jeweils von den einzelnen Autoren zugeschickt bekommen, sind ich und mein Kollege dafür zuständig, die einzelnen *.tex-Dateien zu überarbeiten und entsprechend zum Gesamtband zusammenzusetzen (wir nutzen hierzu ein einfaches, globales *.-tex Dokument, das die einzelnen Teilartikel über \include{...} zusammenfügt).

Da wir die Dokumente allesamt im globalen Dokument kompilieren, möchten wir die Automatisierung unserer Arbeitsschritte weiter ausbauen, wenn es um das Labeln einzelner Abschnitte, Bilder etc. geht.

Unsere \label{...}-Befehle in einem Teilartikel folgen einer festen Struktur, die sich klassisch aus dem zu markierenden Objekt (fig, tab, sec etc.), dem Doppelpunkt und einer Zahl zusammensetzt, d.h.
\label{<Objektart>:<Nummer>}
Dieses Markieren von Objekten hat offensichtlich den Nachteil, dass ggf. doppelt besetzte Label vorkommen können. Um hier die Eindeutigkeit des Labels herzustellen, verwenden wir am Anfang des Label-Befehls den Nachnamen des ersten Autores, der am jeweligen Teilartikel beteiligt ist, d.h.
\label{<Autor-Nachname><Objektart>:<Nummer>}
Da sich der \author{...}-Befehl somit über alle Dokumente hin von Artikel zu Artikel ändert, war nun der Gedanke, den Inhalt des \author-Befehls
\author{Vorname1 Nachname1(zu extrahieren), Vorname2 Nachname2, Vorname3 Nachname3, ... and VornameN NachnameN}
via \@author zu extrahieren, den Inhalt auf den Nachnamen des ersten Autores zu beschneiden (d.h. das zweite Wort des Inhaltes zu extrahieren) und den Nachnamen dann entsprechend automatisiert im label{...}-Befehl einzusetzen (selbstverständlich dann auch in den Referenzbefehlen wie \ref{...}, \pageref{...} usw.).

Da ich mit der Be- und Verarbeitung von Strings mit LaTeX nicht so bewandert bin, habe ich zunächst folgenden Ansatz ausprobiert (gefunden unter https://tex.stackexchange.com/questions ... n-a-string)
\documentclass{scrartcl}	
	\usepackage{l3regex}

\ExplSyntaxOn
\newcommand{\extractWord}[2]{%
	% split the argument at spaces
	\seq_set_split:Nnn \l_tmpa_seq { ~ } { #1 }
	% get the first item
	\tl_set:Nx \l_tmpa_tl { \seq_item:Nn \l_tmpa_seq { #2 } }
	% remove a trailing period, semicolon or comma (\Z matches the end)
	\regex_replace_once:nnN { [.;,]\Z } { } \l_tmpa_tl
	% output the result
	\tl_use:N \l_tmpa_tl
}
\ExplSyntaxOff

\begin{document}
	\extractWord{Ludwig Wilhelm}{2}
\end{document}
was zumindest schon einmal für die Wort-Extraktion mit normalen Wordketten funktioniert. Das Einfügen von \@author und \makeatletter bzw. \makeatother funktioniert allerdings - zumindest, was meine Versuche angeht - nicht so ganz, als dass ich den extrahierten Namen dann auch direkt weiterverwenden könnte.

Die Frage ist nun
  • - wie ich den Namen vernünftig extrahiert bekomme, um ihn dann weiter zu verarbeiten und

    - wie ich diesen dann anschließend in die Label- bzw. Referenz-Befehl integrieren kann, so dass alles automatisch verknüpft wird.
Ich persönlich habe zunächst an einen Search-and-Replace-Algorithmus gedacht, der die einzelnen *.tex-Dateien nach den Label- / Referenz-Befehlen absucht und dann die Namen einpflegt (was schon ziemlich aufwendig und unübersichtlich werden könnte). Nach längerer Diskussion mit meinem Kollegen bin ich dann aber bei der Idee stehen geblieben, die Befehle ggf. mit \let zu kopieren und dann entsprechend mit \renewcommand neuzudefinieren, damit einfach nur das Label, mit dem zugehörigen Namen, in der *.aux-Datei gespeichert wird, was für die Verknüpfung ja schließlich ausreichend sein sollte, sofern die \ref-Befehle auch entsprechend verändert wurden.

Da ich von der genauen Definition der \label{...} bzw. \ref{...}-Befehle kaum Ahnung und mit der Neudefinition dieser Befehle keine Erfahrungen habe, wende ich mich nun an euch.

Hat hier vielleicht jemand eine Idee, wie man dieses Vorhaben möglichst geschickt umsetzen kann? Ich muss allerdings noch dazu sagen, dass unsere Fakultät für ihre Veröffentlichungen eine modifizierte Springer (Verlag)-Klasse verwendet, die auf der article-Klasse basiert; diese wird in allen Dokumenten gleich verwendet.

D.h. also zusammenfassend:
  • a) Extraktion des ersten Nachnamens eines Autors (die pro Teilartikel variieren), mit der Form \author{Vorname Nachname, Vorname Nachname ... and Vorname Nachname} und

    b) Weiterverarbeitung des Namens in den Befehlen \label{...}, \ref{...}, \pageref{...} usw.
Meine Kollegen verwenden u.a. auch Python-Skripte, um ihre LaTeX-Dokumente zu bearbeiten. Ein Search-and-Replace Algorithmus wäre hier vielleicht möglich - ich bin aber davon überzeugt, dass es in LaTeX (immerhin die Zielanwendung des ganzen Unterfangens) auf direktem Wege und einfacher funktionieren kann.

Vielen lieben Dank und ganz liebe Grüße! :)