パラメータによる環境の自動ソート(日付によるなど)

パラメータによる環境の自動ソート(日付によるなど)

日付などの追加データに基づいて「セクション」または環境を操作するための何らかの簡単なシステムが欲しいです。予備的に Google 検索をしてみましたが、言葉で説明できないため何も思いつきませんでしたが、例を挙げてみます。LaTeX が一般にこれを許可しているかどうかはわかりません。bibtex としか比較できないからです。

私は、ジャーナルのスタイルに似た「エントリ」または「セクション」を作成できるようにしたいと考えています。これには、「日付」または並べ替えの基準となるその他の引数があります。いくつかの疑似コード:

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

目標は、コンパイル時にエントリが日付順に自動的にソートされるようにすることです。つまり、2 番目のエントリ (コードに表示される) が 1 番目のエントリの前に表示されます。

このタスクの達成に役立つライブラリなどはありますか? これは、コードの順序に関係なく bibtex がソートする方法に似ています。セクションまたは環境を介して操作するかどうかに関係なく、これに近いものも歓迎します。目標は、日付などの何らかの「タグ」でソートすることです。アドバイスがあれば、ぜひお願いします。ありがとうございます!

答え1

同様のセクションを並べ替えるには19280328.tex、、17770430.texなどのサブ文書を作成し、メイン文書に挿入します。

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

そうすれば、優れた編集者なら誰でも正しい順序でこれを素早く短縮できる

説明のような環境として表示される小さなエントリの場合、1 つのオプションとしてパッケージが考えられます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}

このファイルを保存したら、test.tex,コンパイルするには、次のコマンドを実行する必要があります。

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

答え2

使用できますdatatoolジャーナルエントリを保存、並べ替え、印刷します。

日付には適切な YYYY-MM-DD 表現を使用しているため、データベースdate内のという単一のフィールドにそれらを結合しましたjournal。 ソートは を使用して実行され\DTLsort{date}{journal}、その後、 を使用してデータベースを循環することで印刷が行われます\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}

エントリに段落が含まれる場合は、\DTLpar空行/改行の代わりに を使用する必要があります。例として、

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

関連情報