Clasificación automática de entornos por parámetros (por ejemplo, por fecha)

Clasificación automática de entornos por parámetros (por ejemplo, por fecha)

Deseo algún tipo de sistema sencillo para manipular "secciones" o entornos basados ​​en datos adicionales como fechas. Hice una búsqueda preliminar en Google y no encontré nada porque no puedo expresarlo con palabras, pero haré lo mejor que pueda para dar un ejemplo. No estoy seguro de si LaTeX permite esto en general, ya que solo puedo compararlo con bibtex.

Quiero poder tener "entradas" o "secciones" muy parecidas al estilo de una revista que tengan un argumento para una "fecha" o algún otro criterio por el que puedan ordenarse. Algún pseudocódigo:

\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}

El objetivo entonces sería tener, cuando se compila, las entradas se ordenarían automáticamente por fecha. Es decir, la segunda entrada (tal y como aparece en el código) aparecería antes de la primera.

¿Existe alguna biblioteca o algo que pueda ayudar a realizar esta tarea? Es algo así como bibtex ordena a pesar del orden del código. También se agradece cualquier cosa parecida a esto, ya sea que funcione mediante seccionamiento o entornos. El objetivo es ordenar por algún tipo de "etiqueta", como una fecha. Se agradece cualquier consejo, ¡gracias!

Respuesta1

Para reordenar algunas secciones similares, crearía subdocumentos como 19280328.tex, 17770430.tex, etc., y luego los insertaría en un documento principal con

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

Entonces cualquier buen editor puede acortar esto rápidamente en el orden correcto.

En caso de que las entradas pequeñas se muestren como un entorno similar a una descripción, una opción podría ser el paquete 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}

Tenga en cuenta que una vez guardado este archivo, para test.tex,compilarlo, debe ejecutar:

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

Respuesta2

Puedes usardatatoolpara almacenar, clasificar e imprimir las entradas de su diario.

Como estás usando una representación sensata AAAA-MM-DD para las fechas, las he combinado en un solo campo llamado datedentro de la journalbase de datos. La clasificación se logra usando \DTLsort{date}{journal}, después de lo cual la impresión se realiza recorriendo la base de datos usando \DTLforeach.

ingrese la descripción de la imagen aquí

\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}

Tenga en cuenta que si las entradas contendrán párrafos, deberá utilizar \DTLparlíneas/saltos de línea en lugar de líneas vacías. Como ejemplo,

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

información relacionada