按參數(例如按日期)自動對環境進行排序

按參數(例如按日期)自動對環境進行排序

我希望有某種簡單的系統來根據日期等附加資料來操作「部分」或環境。我做了初步的谷歌搜索,但無法想出任何東西,因為我無法用語言表達,但我會盡力形成一個例子。我不確定 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}

然後,目標是在編譯時將條目自動按日期排序。也就是說,第二個條目(如程式碼所示)將出現在第一個條目之前。

有沒有任何圖書館或任何東西可以幫助完成這項任務?這有點像 bibtex 的排序方式,儘管程式碼順序不同。任何接近於此的東西都值得讚賞,無論它是通過切片還是環境進行操作。目標是按某種“標籤”(例如日期)進行排序。任何建議表示讚賞,謝謝!

答案1

要重新排序一些類似的部分,我會將子文檔製作為19280328.tex17770430.tex等,然後使用 插入到主文檔中

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

然後任何優秀的編輯都可以按照正確的順序快速縮短它

如果小條目顯示為類似描述的環境,選項可能是套件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}

相關內容