文件创建日期

文件创建日期

当我写笔记时(我实际上使用 lyx,但这并不重要),我喜欢添加一个标题,其中包含文件的名称和文件编译的日期。我使用 fancyhdr 包和

\pagestyle{fancy}
\lhead{\texttt{\jobname}}
\rhead{\textsf{\today}}

(说实话在 lyx 中我必须使用\jobname.lyx,但是,这又没关系)。

重点是,如果能够打印文件首次创建的日期。在 TeX/LaTeX 中是否有方法可以访问 latex 文件的时间信息?我知道答案可能取决于操作系统。我实际上使用的是 Linux 发行版。我查看了许多其他论坛/常见问题解答,但到目前为止找不到答案。

答案1

这将在 Linux 上运行,并\write18启用;即使用以下命令运行pdftex --shell-escape

{\catcode`\%=12
\immediate\write18
 {/usr/bin/stat --format '\string\foo\space %yZ' \jobname.tex >\jobname.date}
 \def\foo#1 #2Z{\gdef\filedate{#1}}
 \input\jobname.date
}
The file is dated \filedate.
\bye

正如我在上面的评论中所述,您无法获取文件创建日期。这将为您提供文件修改日期。

答案2

更新:与此同时,我发表了filemod包可以显示和比较文件修改日期。通过此包,可以使用 打印主文件的修改日期\filemodprint{\jobname}


pdfTeX 提供了可扩展的原语\pdffilemoddate,它将相关文件名作为参数:

\pdffilemoddate{filename.tex}

或者

\pdffilemoddate{\jobname.tex}

它适用于所有文件,而不仅仅是 PDF(如名称所示)。它扩展为文件修改日期。格式类似于D:20110228133815Z,然后可以使用宏进行解析。请注意,此字符串的所有字符都有 catcode其他不是

以下代码定义了一个宏,它读取返回字符串的每个数字,最后将其传递给可以自由重新定义的格式宏。有关格式化日期的帮助,请参阅这个问题或其他带有标签的问题

\newcommand*{\filedate}[1]{%
    \expandafter\filedateX\pdffilemoddate{#1}\relax
}
\def\filedateX#1#2#3#4#5#6#7#8{%
    \filedateXX{#3#4#5#6}{#7#8}
}
\def\filedateXX#1#2#3#4#5#6#7#8{%
    \filedateXXX{#1}{#2}{#3#4}{#5#6}{#7#8}%
}
\def\filedateXXX#1#2#3#4#5#6#7#8\relax{%
    \formatdate{#1}{#2}{#3}{#4}{#5}{#6#7}%
}

\newcommand*{\formatdate}[6]{%
   #1-#2-#3\ #4:#5:#6%
}

\filedate{\jobname.tex}

答案3

按照定义,您编写的每个文档的创建日期都不会改变。

这意味着将日期硬编码进去是完全可以接受的。例如,

\rhead{\textsf{28\textsuperscript{th} Febuary, 2011}}

或者按照您想要的方式格式化。这样可以保留创建日期,因为每次编译文档时它不需要动态更改。

如果我误解了您想要做的事情,请告诉我。

答案4

如果您在修改日期之后,则套餐文件模式似乎完全符合您的需要。要获取文件的最后修改日期,只需以通常的方式包含包即可:

\usepackage{filemod}

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

\filemodprintdate{\jobname}

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

相关内容