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
:
\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 usardatatool
para 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 date
dentro de la journal
base 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
.
\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 \DTLpar
lí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}