有没有一个 LaTeX 命令可以打印出实际文档的“最后修改”日期?由于 LaTeX 项目由多个文件组成,因此该命令理想情况下应打印实际文件的日期,而不是项目的日期。
包filemod似乎正好可以满足您的需求。要获取文件的最后修改日期,只需按照通常的方式包含该包:
\usepackage{filemod}
当前文档的修改时间可通过以下方式打印:
\filemodprintdate{\jobname}
你还可以打印修改时间,而且有许多选项可以格式化输出。
pdfTeX提供了原始命令\pdffilemoddate
,用于查询文件的修改日期信息(LuaTeX使用其自己的Lua函数执行同样的操作)。由于在最近几年的所有LaTeX发行版中默认使用pdfTeX(至少是这样),因此除非您正在处理非常旧的生产系统,否则使用新功能不会造成任何损害。下面是一个示例:
\documentclass{article} \begin{document} \def\parsedate #1:20#2#3#4#5#6#7#8\empty{20#2#3/#4#5/#6#7} \def\moddate#1{\expandafter\parsedate\pdffilemoddate{#1}\empty} this is the moddate: \moddate{\jobname.tex} \end{document}
(假设文件自2000年以来已被修改)。
\pdffilemoddate
命令;XeTeX只与pdfTeX的“新”原语部分重叠(请参阅texdoc xetexref
)。eTeX也不支持它,但是只有旧版本的发行版将eTeX用作LaTeX引擎。(即使在DVI模式下,现在也使用pdfTeX。) - Will Robertsontoday.sty
),该文件依赖于所有源文件。today.sty: $LATEX_SRCS
echo "\date{" > $@
date +D >> $@
echo "}" >> $@
并使用\usepackage{today.sty}
。
它将使用文件更改后的第一个构建日期,并且在您删除today.sty
或更改另一个源文件之前不会更新。
感谢 dmckee
LATEX_SRCS = test.tex
define moddate
date +%Y%m%d%H%M%S
endef
today.sty: $(LATEX_SRCS)
@echo "\def\moddate{"$(shell $(moddate))"}"> $@
这里有一个名为getfiledate的LaTeX包(默认情况下它已经包含在我的LaTeX发行版中)。它似乎是设计用于自动输出如下段落:
The date of last modification of file misc-test1.tex was 2009-10-11 21:45:50.
有一些能够调整输出的能力。你肯定可以只获取日期。然而,我无法弄清楚如何消除日期周围的换行符以及如何更改日期格式。老实说,我认为作者们恰好按照他们需要的单一目的来实现它,对于一般用途来说相当繁琐。
\today
使用的是构建的数据而不是有关文件修改日期的数据。顺便说一句,这是一个好问题。我一直在使用构建日期或手动管理的值。 - dmckee --- ex-moderator kitten