Automatische Sortierung der Umgebungen nach Parametern (zB nach Datum)

Automatische Sortierung der Umgebungen nach Parametern (zB nach Datum)

Ich wünsche mir ein einfaches System zum Bearbeiten von „Abschnitten“ oder Umgebungen basierend auf zusätzlichen Daten wie Daten. Ich habe eine vorläufige Google-Suche durchgeführt und konnte nichts finden, weil ich es nicht in Worte fassen kann, aber ich werde mein Bestes geben, um ein Beispiel zu erstellen. Ich bin mir nicht sicher, ob LaTeX dies überhaupt im Allgemeinen zulässt, da ich es nur mit Bibtex vergleichen kann.

Ich möchte „Einträge“ oder „Abschnitte“ haben können, die dem Stil eines Tagebuchs ähneln und ein Argument für ein „Datum“ oder ein anderes Kriterium enthalten, nach dem sie sortiert werden können. Etwas Pseudocode:

\begin{entry}{1928}{3}{28}
  This is an entry.
\end{entry}

\begin{entry}{1777}{4}{30}
  This is another entry, but dated before the last one.
\end{entry}

Das Ziel wäre dann, dass beim Kompilieren die Einträge automatisch nach Datum sortiert werden. Das heißt, der zweite Eintrag (wie er im Code erscheint) würde vor dem ersten erscheinen.

Gibt es eine Bibliothek oder etwas, das bei dieser Aufgabe helfen würde? Es ist so ähnlich, wie Bibtex trotz der Codereihenfolge sortiert. Alles, was dem nahe kommt, ist ebenfalls willkommen, egal, ob es über Abschnitte oder Umgebungen funktioniert. Das Ziel ist, nach einer Art „Tag“ wie einem Datum zu sortieren. Jeder Ratschlag ist willkommen, danke!

Antwort1

Um einige ähnliche Abschnitte neu anzuordnen, würde ich Unterdokumente wie 19280328.tex, 17770430.tex, usw. erstellen und diese dann in ein Hauptdokument mit einfügen

\input{19280328}
\input{17770430}
...

Dann kann jeder gute Redakteur dies schnell in der richtigen Reihenfolge kürzen

Bei kleinen Einträgen, die als beschreibungsähnliche Umgebung angezeigt werden sollen, könnte das Paket eine Option sein nomencl:

MWE

\documentclass{article}
\usepackage{nomencl} 
\makenomenclature
\def\nomname{Cronology}
\begin{document}
\nomenclature{1928/03/28}{This is an entry.}
\nomenclature{1777/04/30}{This is another entry, but dated before the last one.}
\settowidth{\nomlabelwidth}{0000/00/00xx}
\printnomenclature
\end{document}

Beachten Sie, dass Sie nach dem Speichern dieser Datei (um test.tex,sie zu kompilieren) Folgendes ausführen sollten:

pdflatex test.tex
makeindex test.nlo -s nomencl.ist -o test.nls
pdflatex test.tex
pdflatex test.tex # really not needed for this simple example

Antwort2

Sie könnendatatoolzum Speichern, Sortieren und Drucken Ihrer Journaleinträge.

Da Sie für die Daten eine sinnvolle Darstellung im Format JJJJ-MM-TT verwenden, habe ich sie datein der journalDatenbank in einem einzigen Feld namens zusammengefasst. Die Sortierung erfolgt mit \DTLsort{date}{journal}, danach erfolgt der Ausdruck durch Durchlaufen der Datenbank mit \DTLforeach.

Bildbeschreibung hier eingeben

\documentclass{article}

\usepackage{datatool,environ}

\dtlexpandnewvalue
\NewEnviron{entry}[1]{%
  \DTLnewrow{journal}% Add new row to database
  \DTLnewdbentry{journal}{date}{#1}% Add date entry
  \DTLnewdbentry{journal}{entry}{\BODY}% Add entry body
}

\DTLnewdb{journal}

\newcommand{\printentries}{%
  \section*{Journal}
  \DTLsort{date}{journal}%
  \DTLforeach{journal}{%
    \entrydate=date,
    \entrybody=entry%
  }{%
    \subsection*{\entrydate}
    \entrybody
  }
}

\begin{document}

\begin{entry}{2018-01-02}
This is an entry.
\end{entry}

\begin{entry}{2017-01-05}
This is another entry.
\end{entry}

\printentries

\end{document}

\DTLparBeachten Sie, dass Sie, wenn die Einträge Absätze enthalten, anstelle von Leerzeilen/Zeilenumbrüchen verwenden müssen . Als Beispiel:

\begin{entry}{1234-56-78}
First paragraph.
\DTLpar
Second paragraph.
\end{entry}

verwandte Informationen