LaTeX命令用于最后修改时间

15

有没有一个 LaTeX 命令可以打印出实际文档的“最后修改”日期?由于 LaTeX 项目由多个文件组成,因此该命令理想情况下应打印实际文件的日期,而不是项目的日期。


你可以在 \date{} 字段中输入一个日期,不一定是 \today。这并不完全自动化... 或者你可以使用这个 Python 脚本,它从操作系统中获取修改日期:http://www.sudosu.net/getcreationdate.safe -- 稍微修改一下脚本,然后编写一个小的 bash 脚本将其附加到你的 tex 文件顶部。 - Mica
更正一下,\today 使用的是构建的数据而不是有关文件修改日期的数据。顺便说一句,这是一个问题。我一直在使用构建日期或手动管理的值。 - dmckee --- ex-moderator kitten
哇,谢谢你的链接,Mica。很高兴看到有人在我的网站上找到了价值! - Schof
6个回答

10

filemod似乎正好可以满足您的需求。要获取文件的最后修改日期,只需按照通常的方式包含该包:

\usepackage{filemod}

当前文档的修改时间可通过以下方式打印:

\filemodprintdate{\jobname}

你还可以打印修改时间,而且有许多选项可以格式化输出。


10

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年以来已被修改)。


Xetex 也支持这个功能。我相当确定 Etex 不支持。 - Charles Stewart
实际上,我认为XeTeX不支持\pdffilemoddate命令;XeTeX只与pdfTeX的“新”原语部分重叠(请参阅texdoc xetexref)。eTeX也不支持它,但是只有旧版本的发行版将eTeX用作LaTeX引擎。(即使在DVI模式下,现在也使用pdfTeX。) - Will Robertson

3
很遗憾,TeX没有提供这样的信息命令;唯一获取此类信息的方法是:
  1. 在运行LaTeX之前运行一个非TeX脚本来创建一个TeX文件,并以某种方式将此文件包含在您的主LaTeX文档中,或者
  2. 从TeX中运行外部脚本(仅在启用所谓的write18或shellescape功能时才有效;您必须查阅您的TeX实现手册,而不是拥有固执的系统管理员)。
可能扩展的TeX支持文件信息命令(例如luaTeX),但这不是TeX本身的一部分。

1
现在基本上没有人使用Knuth的原始TeX来处理LaTeX文档;pdfTeX在这方面是有帮助的。请见下面我的回答。 - Will Robertson

3
如果您正在使用自动化构建系统,您可以要求它生成一个文件(可能名为today.sty),该文件依赖于所有源文件。
在make中可能会看起来像这样:
today.sty: $LATEX_SRCS
        echo "\date{" > $@
        date +D >> $@
        echo "}" >> $@

并使用\usepackage{today.sty}

它将使用文件更改后的第一个构建日期,并且在您删除today.sty或更改另一个源文件之前不会更新。


1

感谢 dmckee

LATEX_SRCS = test.tex

define moddate
date +%Y%m%d%H%M%S
endef

today.sty: $(LATEX_SRCS)
    @echo "\def\moddate{"$(shell $(moddate))"}"> $@

1

这里有一个名为getfiledate的LaTeX包(默认情况下它已经包含在我的LaTeX发行版中)。它似乎是设计用于自动输出如下段落:

The date of last modification of file misc-test1.tex was 2009-10-11  21:45:50.

有一些能够调整输出的能力。你肯定可以只获取日期。然而,我无法弄清楚如何消除日期周围的换行符以及如何更改日期格式。老实说,我认为作者们恰好按照他们需要的单一目的来实现它,对于一般用途来说相当繁琐。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接