Mit TeX automatisch ein Abstract-Buch mit sortierten Einträgen erstellen

Mit TeX automatisch ein Abstract-Buch mit sortierten Einträgen erstellen

Ich muss für eine Konferenz etwa 100 Tex-Dateien verarbeiten. Jede Datei enthält eine Zusammenfassung einer Präsentation und hat einen Autor. Nehmen wir an, dass die relevanten Teile jeder Datei Argumente der folgenden TeX- oder LaTeX-Makros (Befehle oder Umgebungen) sind:

TITLE% der Titel des Papiers

AUTHOR% der Autor (angegeben als: Nachname, Vorname)

AFFILIATION% die Zugehörigkeit des Autors (einschließlich E-Mail-Adresse)

ABSTRACT% die Zusammenfassung der Präsentation

REFERENCES% kurze Literaturliste eingeleitet mit\bibitem

Ich möchte ein Dokument erhalten, das die Abstracts der Vorträge, sortiert nach dem Nachnamen des Autors, zusammen mit einem Inhaltsverzeichnis und einer sortierten Teilnehmerliste mit Angabe ihrer Zugehörigkeit enthält.

Ich habe darüber nachgedacht, zunächst die von den Autoren übermittelten Tex-Dateien zu entfernen und nur die relevanten Informationen (siehe oben) zu belassen, aber ich weiß nicht, wie ich dann auf „algorithmische“ Weise (ohne manuelle Sortierung oder andere „manuelle“ Methoden) vorgehen soll.

Ich habe mir eine ähnliche Frage angesehenHier, aber ich konnte keine Lösung für das Sortierproblem finden.

Antwort1

Inzwischen habe ich das Problem, bis auf den Sortierungsteil, teilweise gelöst und dachte daran, es mit Ihnen zu teilen, in der Erwartung Ihrer wertvollen Kommentare und Vorschläge.

Ich habe mich für eine „externe“ Sortierung entschieden und das Ergebnis direkt in die Haupt-Tex-Datei eingefügt, da dies die einfachste der Optionen zu sein schien. Ich dachte daran, das datatoolBundle zu verwenden, aber die Sortierung dauerte bei mir nur wenige Sekunden, als ich eine einfache Textsortierung außerhalb von TeX verwendete.

Die Daten werden von den Autoren mithilfe einer einfachen Textdatei mit folgender Struktur erhoben:

\AUTHOR{}{} %% <--- {LastName}{FirstName}
\EMAIL{}
\AFFILIATION{}
\TITLE{}
\ABSTRACT{}

Die Hauptdatei liest diese Dateien und erstellt den Inhalt des Abstract Book, wie im folgenden Minimalbeispiel (wo wir drei Dateien lesen), wobei die Makros in der externen abstractbook.styDatei definiert sind:

\documentclass[a4paper,12pt]{article}
\usepackage{abstractsbook}

\begin{document}

%% ++++++++++ Process submitted files ++++++++++++++++++

\begin{processfiles}
    %% ---------------------------------------
    \processfile{FirstAuthor}
    \processfile{SecondAuthor}
    \processfile{ThirdAuthor}
    %% First sorted alphabetically outside TeX
\end{processfiles}

\parindent 0pt
%% +++++++++++++++++++ List of Talks  ++++++++++++++++++

\listoftalks

%% +++++++++++++++++++ Abstracts ++++++++++++++++++++++

\abstracts

%% +++++++++++++++++++ Index of participants +++++++++++

\listofparticipants

%% +++++++++++++++++++++++++++++++++++++++++++++++++++++
\end{document}

Die abstractbook.styDatei definiert alle oben genannten Makros. Beim Verarbeiten von Dateien \processfile{NameOfFile}liest sie den Inhalt NameOfFile.texaus demselben Ordner wie die Haupt-Tex-Datei. Jedes \processfile{...}erhöht einen lokalen Zähler (zählt die Anzahl der gelesenen Dateien) und definiert die folgenden Makros:

\author-<x>-LastName

\author-<x>-FirstName

\affiliation-<x>

\email-<x>

\title-<x>

\abstract-<x>

wobei <x>der aktuelle Wert des Zählers ist.

Beim Setzen des Dokuments durchlaufen wir einfach alle Werte des Zählers und zeigen die erforderlichen Informationen an.

Nachfolgend finden Sie ein Minimalbeispiel für abstractbook.sty. Ich hoffe, es ist (nicht so schwer) lesbar:

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{abstractsbook}
%% ++++++++++++++++++++++++++++++++++++++++++++++++++++
\RequirePackage{ifthen}
%% ----- some shortcuts ------
\let\ea=\expandafter
\let\cs=\csname
\let\ecs=\endcsname
%% ++++++++++++++++++++++++++++++++++++++++++++++++++++

\newenvironment{processfiles}
    {\newcount\numabs % <--- TeX local counter that counts
                      %      the number of abstracts
     \numabs=0\relax
     \newcounter{numabs} % <--- LaTeX global counter
    }
    {\setcounter{numabs}{\the\numabs}
      % < --- saving the final (local) value of \numabs
    } %       for global later use

\long\def\processfile #1{%
                         \advance\numabs by 1\relax
                         \input{#1.tex}
                        }%

\long\def\AUTHOR #1#2{%
                     \ea\long\ea\gdef\cs author-\the\numabs-LastName\ecs{#1}%
                     \ea\long\ea\gdef\cs author-\the\numabs-FirstName\ecs{#2}%
                     }

\long\def\AFFILIATION #1{%
                        \ea\long\ea\gdef\cs affiliation-\the\numabs\ecs{#1}
                       }

\long\def\EMAIL #1{%
                  \ea\long\ea\gdef\cs email-\the\numabs\ecs{#1}
                 }
%%
\long\def\TITLE #1{%
                  \ea\long\ea\gdef\cs title-\the\numabs\ecs{#1}
                 }
%%
\long\def\ABSTRACT #1{%
                     \ea\long\ea\gdef\cs abstract-\the\numabs\ecs{#1}
                    }

% ++++++++++++++  List of Talks ++++++++++++++++++++++++++++++++++++++++++++++

\def\heading #1{\cleardoublepage{\LARGE\scshape #1}\par\hrulefill\vskip 6ex}

\long\def\listoftalks
    {
     \heading{List of Talks}
     \newcount\@i
     \@i=1\relax
     \whiledo{\the\@i<\numexpr \thenumabs+1\relax}
        {\begin{minipage}{\textwidth}
             \vskip 1.5ex
             \leftskip 0em
             \textsc{\cs author-\the\@i-FirstName\ecs}~\MakeUppercase{\cs author-\the\@i-LastName\ecs}
             \par\leftskip 2.5em
             \textit{\cs title-\the\@i\ecs}\dotfill\pageref{marker-\the\@i}
        \end{minipage}
        \advance \@i by 1\relax
        }%
     }

% ++++++++++++++  List of Participants  +++++++++++++++++++++++++++++++++++++

\long\def\listofparticipants
    {\heading{List of Participants}
     \newcount\@i
     \@i=1\relax
     \whiledo{\the\@i<\numexpr \thenumabs+1\relax}
        {\begin{minipage}{\textwidth}
                \textbf{\MakeUppercase{\cs author-\the\@i-LastName\ecs}},~\textbf{\cs author-\the\@i-FirstName\ecs}
                \vskip 1ex
                \textit{\cs affiliation-\the\@i\ecs}
                \vskip 0.25ex
                \texttt{\cs email-\the\@i\ecs}
         \end{minipage}
         \vskip 4ex
         \advance \@i by 1\relax
        }%
    }

% +++++++++++++++  Abstracts of Talks +++++++++++++++++++++++++++++++++++++++++

\long\def\abstracts
    {\heading{Abstracts of Talks}
     \newcount\@i
     \@i=1\relax
     \whiledo{\the\@i<\numexpr \thenumabs+1\relax}
        {%
         \begin{minipage}{\textwidth}
            \label{marker-\the\@i} % <--- used for later referencing of the page
            \begin{center}
                \textsc{\Large \cs title-\the\@i\ecs}
                \vskip 1.5ex
                \textbf{\Large \cs author-\the\@i-FirstName\ecs~\cs author-\the\@i-LastName\ecs}
                \vskip 1ex
                \normalsize{\cs affiliation-\the\@i\ecs}
            \end{center}
            \vskip 2.5ex
            \cs abstract-\the\@i\ecs
            \end{minipage}
            \vskip 8ex
            \vfill
            \advance \@i by 1\relax
        }%
     }

Beachten Sie auch die Minimalbeispiele der folgenden Abstract-Dateien:

FirstAuthor.tex

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\AUTHOR{First}{Author}% <--- {LastName}{FirstName}
%%
\EMAIL{[email protected]}
%%
\AFFILIATION{First University}
%%
\TITLE{The first title}
%%
\ABSTRACT{This is the abstract of the first talk.

And some math: $1+1=2$.

}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

SecondAuthor.tex

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\AUTHOR{Second}{Author}% <--- {LastName}{FirstName}
%%
\EMAIL{[email protected]}
%%
\AFFILIATION{Second University}
%%
\TITLE{The second title}
%%
\ABSTRACT{This is the abstract of the second talk.

And some math:

\[
E=m\mathrm{c}^2.
\]}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

ThirdAuthor.tex

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\AUTHOR{Third}{Author}% <--- {LastName}{FirstName}
%%
\EMAIL{[email protected]}
%%
\AFFILIATION{Third University}
%%
\TITLE{The third title}
%%
\ABSTRACT{This is the abstract of the second talk.

And some math:

\[
\mathrm{e}^{i\pi}+1=0.
\]}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Das Ergebnis dieses Minimalbeispiels ist folgende Datei:

Erste Seite

Zweite Seite

Dritte Seite

verwandte Informationen