正在获取所包含文件的 {docdatetime}

编程语言 2026-07-09

我正在使用AsciiDoc构建一个由多名贡献者共同协作的复杂文档,我想记录每个章节的最后修改日期。为此,我为每个章节创建了一个文件,并把它们全部包含在一个 top.adoc 文件中。然而,{docdatetime} 得到的却是顶层文件的最后修改时间。

是否有变通的方法,可以获取在使用 {docdatetime} 的那个文件的最后修改时间?

解决方案

这可以通过一个小脚本来实现,该脚本会挂钩到每个include文件并定义一个 {incdatetime}

require 'asciidoctor'

Asciidoctor::Extensions.register do
  include_processor do
    process do |document, reader, target, attributes|
      inc_path = document.normalize_system_path target, reader.dir, nil, target_name: 'include file'
      next unless File.exist?(inc_path)

      content = File.read(inc_path)
      incdatetime = File.mtime(inc_path).utc.strftime('%Y-%m-%dT%H:%M:%SZ')

      content = ":incdatetime: #{incdatetime}\n\n#{content}"
      reader.push_include content, inc_path, target
      true
    end
  end
end

然后,我只需要像下面这样编译:

bundle exec asciidoctor-pdf -r ./incdatetime.rb ...
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章