根据参数自动对环境进行排序(例如按日期)

根据参数自动对环境进行排序(例如按日期)

我希望有某种简单的系统可以根据日期等附加数据来操作“部分”或环境。我进行了初步的谷歌搜索,但找不到任何东西,因为我无法用语言表达,但我会尽力举一个例子。我不确定 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}

相关内容