最后修改的LaTeX命令

时间:2010-01-22 17:03:03

标签: date latex

是否有LaTeX命令打印实际文档的“上次修改”日期?由于LaTeX项目由多个文件组成,因此该命令理想地打印实际文件的日期,而不是项目的日期。

6 个答案:

答案 0 :(得分:10)

pdfTeX提供原始\pdffilemoddate来查询文件的此信息。 (LuaTeX使用自己的Lua函数进行同样的操作。)由于pdfTeX在过去几年中(至少)在所有LaTeX发行版中默认使用,因此除非您处理的是旧版本的生产,否则使用新功能没有任何损害系统。这是一个例子:

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

答案 1 :(得分:6)

filemod似乎完全符合您的需要。要获取文件的最后修改日期,您只需按常规方式包含该包:

\usepackage{filemod}

并且当前文档的修改时间打印为:

\filemodprintdate{\jobname}

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

答案 2 :(得分:3)

不幸的是,TeX没有提供此类信息的命令;获得此类信息的唯一途径是

  1. 通过运行非TeX脚本在运行LaTeX之前创建TeX文件并以某种方式在主LaTeX文档中包含此文件,或者
  2. TeX运行外部脚本(仅当启用了所谓的write18或shellescape功能时才有效;您必须查阅TeX实现的手册,而不是有一个顽固的系统管理员。)
  3. 扩展的TeX可能支持文件信息命令(也许是luaTeX?),但它不是TeX本身的一部分。

答案 3 :(得分:3)

如果您使用的是自动构建系统,您可以要求它生成一个文件(可能名为today.sty),该文件取决于所有源文件。

在make中可能看起来像:

today.sty: $LATEX_SRCS
        echo "\date{" > $@
        date +D >> $@
        echo "}" >> $@

\usepackage{today.sty}

在文件更改后,将使用 first 构建的日期,并且在您删除today.sty或更改其他源文件之前不会更新。

答案 4 :(得分: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))"}"> $@

答案 5 :(得分:1)

getfiledate LaTeX包(默认情况下它是我的LaTeX发行版的一部分)。它似乎被设计为自动输出如下的段落:

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

有一点调整输出的能力。你绝对可以得到日期。但是,我无法弄清楚如何摆脱日期周围的换行以及如何更改日期格式。说实话,我认为作者完全按照他们需要的单一目的来实现它,而且对于一般用途来说相当麻烦。