![文件创建日期](https://linux22.com/image/235070/%E6%96%87%E4%BB%B6%E5%88%9B%E5%BB%BA%E6%97%A5%E6%9C%9F.png)
当我写笔记时(我实际上使用 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}
您还可以打印修改时间,并且有许多选项可以格式化输出。