![将文件的最新日期与 Git 版本进行比较](https://linux22.com/image/295866/%E5%B0%86%E6%96%87%E4%BB%B6%E7%9A%84%E6%9C%80%E6%96%B0%E6%97%A5%E6%9C%9F%E4%B8%8E%20Git%20%E7%89%88%E6%9C%AC%E8%BF%9B%E8%A1%8C%E6%AF%94%E8%BE%83.png)
我有许多 TeX 文件用于获取它们的 PDF 版本,并且我在每个文件中添加了日期,如下所示最近更新时间数据。
\usepackage[yyyymmdd]{datetime}
updated \today
但这很棘手,因为每次我编译它们时,这个日期都会根据我编译的日期而改变。因此,因为我使用 Git 跟踪我的更改,所以我想用\today
文件提交的最后日期更改命令;文件可以在最后一次更改中提交或不提交。
我在 Windows 上使用 TeXLive 发行版,并且有一个make.bat
用于自动编译文件的文件:
@echo off
for %%G in ("*.tex") DO (call :singlefile "%%G")
goto :eof
:singlefile
echo compiling %1
latexmk -xelatex -bibtex- -silent -auxdir=output -outdir=output %1
goto :eof
我的 Git 版本:1.9.4.msysgit.0
答案1
检查了包的文档后gitinfo2
,我得到了这个文件/目录结构:
- 主目录
- 文件.tex
- 其他.tex
- gitexinfo.sty(复制自
gitinfo2
) - gitinfo2.sty(复制自
gitinfo2
) - 制作脚本
然后我更新了我的make.bat
文件以获取gitHeadInfo.gin
文件。通过此更改,我避免使用 git hooks;我只需将其重新格式化为批处理 Windows 样式:
@echo off
set GitInfoFormat=\usepackage[%%^
shash^={%%h},^
lhash^={%%H},^
authname^={%%an},^
authemail^={%%ae},^
authsdate^={%%ad},^
authidate^={%%ai},^
authudate^={%%at},^
commname^={%%an},^
commemail^={%%ae},^
commsdate^={%%ad},^
commidate^={%%ai},^
commudate^={%%at},^
refnames^={%%d},^
firsttagdescribe^={$FIRSTTAG},^
reltag^={$RELTAG}^
]{gitexinfo}
git --no-pager log -1 --date=short --pretty=format:"%GitInfoFormat%" HEAD > .git/gitHeadInfo.gin
for %%G in ("*.tex") DO (call :singlefile "%%G")
goto :eof
:singlefile
echo compiling %1
latexmk -xelatex -bibtex- -silent -auxdir=output -outdir=output %1
goto :eof
目前,$FIRSTTAG
和$RELTAG
不适用于此,但我目前不需要它们。而且我认为我可以使用提交日期。
在此环境下,工作流程将是:
- 做出改变。
- 用 测试结果
make.bat
。 - 提交更改。
- 用 编译
make.bat
。
谢谢。
答案2
这是与一起运行的替代解决方案gitinfo2
。因此我真的很喜欢gitinfo2
;所提出的钩子机制从未让我满意。
Lie Phersho,我最终制作了 Makefile 和 shell 脚本,但它们无法被我的 LaTeX 编辑器正确处理,并且无法在所有平台上运行。
最后,我最终为 编写了一种插件latexmk
。latexmk
这是一款出色的工具,可以很好地处理 LaTeX 的多次编译运行以及参考书目。最后但并非最不重要的是,latexmk
它可以与大多数 LaTeX 编辑器配合使用。
gitinfo2-latexmk
此插件名为GitHub
免责声明:我是该插件的作者。
设置非常简单:
- 下载插入
gitinfo2.pm
(Perl 模块) .latexmkrc
在您的文件中添加一行
一旦完成这两个小步骤,就不再需要样板了。每次您或您的 LaTeX 编辑器运行 时latexmk
,git 信息就已为包准备好了gitinfo2
。