Classificação automática de ambientes por parâmetros (por exemplo, por data)

Classificação automática de ambientes por parâmetros (por exemplo, por data)

Desejo algum tipo de sistema fácil para manipular "seções" ou ambientes com base em dados adicionais, como datas. Fiz uma pesquisa preliminar no Google e não consegui encontrar nada porque não consigo colocar em palavras, mas vou tentar o meu melhor para formar um exemplo. Não tenho certeza se o LaTeX permite isso em geral, pois só posso compará-lo ao bibtex.

Quero poder ter "entradas" ou "seções" muito parecidas com o estilo de um diário que tenha um argumento para uma "data" ou algum outro critério pelo qual possam ser classificadas. Algum 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}

O objetivo seria então ter --- quando compilar --- as entradas seriam automaticamente classificadas por data. Ou seja, a segunda entrada (como aparece no código) apareceria antes da primeira.

Existe alguma biblioteca ou algo que possa ajudar a realizar essa tarefa? É mais ou menos como o bibtex classifica apesar da ordem do código. Qualquer coisa próxima disso também é apreciada, seja por meio de seccionamento ou de ambientes. O objetivo é classificar por algum tipo de “tag”, como uma data. Qualquer conselho é apreciado, obrigado!

Responder1

Para reordenar algumas seções semelhantes, eu criaria subdocumentos como 19280328.tex, 17770430.tex, etc., e depois inseriria em um documento principal com

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

Então, qualquer bom editor pode resumir isso rapidamente na ordem correta

No caso de pequenas entradas serem mostradas como um ambiente tipo descrição, uma opção poderia ser o pacote 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}

Observe que uma vez salvo este arquivo, dito para test.tex,compilá-lo, você deve executar:

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

Responder2

Você pode usardatatoolpara armazenar, classificar e imprimir seus lançamentos contábeis manuais.

Como você está usando uma representação sensata AAAA-MM-DD para as datas, combinei-as em um único campo chamado datedentro do journalbanco de dados. A classificação é obtida usando \DTLsort{date}{journal}, após a qual a impressão é feita percorrendo o banco de dados usando \DTLforeach.

insira a descrição da imagem aqui

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

Observe que se as entradas contiverem parágrafos, você terá que usar \DTLparem vez de linhas/quebras de linha vazias. Como um exemplo,

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

informação relacionada