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