不使用钩子插入 git 提交日期

不使用钩子插入 git 提交日期

有没有办法将最后的 git 提交日期插入到文档中而不必添加 git 钩子(就像 gitinfo 包所做的那样)?

我不是 100% 确定 LaTeX 包如何工作,但如果它们可以在编译时访问当前目录,并且如果它们可以执行外部命令,那么这应该很容易实现......

答案1

在此处输入图片描述

但任何命令行都是svn一样的。

根据您的配置,您可能需要

pdflatex --enable-write18 filename

使其能够\write18成为执行 shell 命令的钩子。

这将使用 shell escape 写入临时文件,然后输入

\documentclass{article}

\begin{document}

\immediate\write18{svn info \jobname.tex | grep "Changed Date" > \jobname.info }
\fbox{\input{\jobname.info}}

\end{document}

答案2

我最终使用自定义 Makefile 来插入修订信息。

当创建 Makefile 而不是使用--enable-write18编译器标志时,您需要人们使用特定的编译方法。这很糟糕。但 write18 也是如此,因为人们必须配置他们的编译器以允许可能不安全的系统访问。通过使用 Makefile,write18 的安全风险会降低,同时提供一种几乎跨平台的文档编译方法(Make在 Windows 上使用 cygwin 时可用;cygwin 通常随 git 一起提供)。要(智能地)编译文档本身,您可以使用latexmk在 Linux 和 OS X 上(自带 TeXLive)和特克化在 Windows 上(附带 MiKTeX)。

这是 Makefile:

TARGET=main.pdf
LL=latexmk -pdf
CLEAN=latexmk -C

all: revision.tex $(TARGET)

pdf: revision.tex $(TARGET)

.PHONY : clean revision.tex $(TARGET)

revision.tex:
    echo "% Autogenerated, do not edit" > revision.tex
    echo "\\newcommand{\\revisiondate}{`git log -1 --format=\"%ad\" --date=short`}" >> revision.tex
    echo "\\newcommand{\\revision}{`git log -1 --format=\"%h\"`}" >> revision.tex

$(TARGET): $(TARGET:%.pdf=%.tex) $(SRC)
    $(LL) $<

clean:
    $(CLEAN)
    rm -f revision.tex

如果人们想直接从他们最喜欢的 IDE 构建 PDF,他们可以告诉 IDE 触发“make”。这应该适用于大多数软件。例如,当您使用 vim 时,您可以使用如下映射:

map <leader>m :w<CR> :!make<CR><CR>

Makefile 创建一个名为的文件revision.tex,如下所示:

% Autogenerated, do not edit
\newcommand{\revisiondate}{2012-10-17}
\newcommand{\revision}{e8e5238}

要将其插入到主文档中,只需使用\input{revision},然后在所需位置插入\revisiondate或。\revision

答案3

这是与一起运行的替代解决方案gitinfo2。因此我真的很喜欢gitinfo2;所提出的钩子机制从未让我满意。

我最终编写了 Makefile 和 shell 脚本,但它们无法被我的 LaTeX 编辑器正确处理,并且无法在所有平台上运行。

最后,我最终为 编写了一种插件latexmk

gitinfo2-latexmk此插件名为GitHub

免责声明:我是该插件的作者。

设置非常简单:

  • 下载插入 gitinfo2.pm(Perl 模块)
  • .latexmkrc在您的文件中添加一行

一旦完成这两个小步骤,就不再需要样板了。每次您或您的 LaTeX 编辑器运行 时latexmk,git 信息就已为包准备好了gitinfo2

答案4

我用了达尼洛的方法,但是我在 Windows 上使用 makefile,因此需要进行一些调整才能创建修订文件。

我分享它是为了让任何人受益并改进:

revision.tex:
    powershell "echo '\newcommand{\revisiondate}{' | Out-File revision.tex -NoNewLine -Encoding UTF8"
    powershell 'git log -1 --format="%ad" --date=short | Out-File revision.tex -Append -NoNewLine -Encoding UTF8'
    powershell "echo '}' | Out-File source\_revision.md -Append -Encoding UTF8"
    powershell "echo '\newcommand{\revision}{' | Out-File revision.tex -Append -NoNewLine -Encoding UTF8"
    powershell "git describe --always --tags | Out-File revision.tex -Append -NoNewLine -Encoding UTF8"
    powershell "echo '}' | Out-File revision.tex -Append -Encoding UTF8"

相关内容