Чтение файла из корневого каталога проекта в Lua (для Quarto/Pandoc)

У меня есть книга, которую я переношу из набора инструментов Bookdown в Quarto. Очень просто, оба инструмента генерируют книгу из ароматизированной уценки с использованием Pandoc. Pandoc позволяет использовать сценарии Lua для систематического изменения контента; У меня их несколько, и они необходимы для рабочего процесса.

Один из этих скриптов автоматически создает ссылки на глоссарий всякий раз, когда он идентифицирует термин в глоссарии. Для этого скрипт (glossary.lua) загружает список терминов (из glossary.yml).

Структура каталогов следующая:

      .
├── glossary.yml
├── index.qmd
├── ...
├── scripts
│   ├── glossary.lua
│   └── ...
└── contents
    ├── preface.qmd
    ├── section1
    │   ├── file1.qmd
    │   └── ...
    ├── section2
    └── ...

Ключевые биты глоссария.lua:

      glossary_file = "glossary.yml"

-- Load glossary file
local function loadGlossary(filename)
  file = io.open(filename, "rb")
  if not file then
    error("Cannot find the glossary file")
  else
    local glossary = file:read("*all")
    return glossary
  end
end

local glossary = exports.eval(loadGlossary(glossary_file))

Раньше (в Bookdown) это работало, потому что (насколько я могу судить) скрипт каждый раз вызывался из корневого каталога, и глоссарий загружался без проблем. Однако в Quarto кажется, что скрипт вызывается из каталога обрабатываемого файла, поэтому после загрузки файла происходит сбой. index.qmd.

Это можно продемонстрировать, добавив:

      cwd = debug.getinfo(1).short_src;
print(cwd)

Вызов Quarto из командной строки в корневом каталоге книги завершается ошибкой после обработки индексного файла:

      [1/5] index.qmd                                                                                                                                                                                                                                                        
scripts/glossary.lua                                                                                                                                                                                                                                                   
[2/5] content\preface.qmd                                                                                                                                                                                                                                            
../scripts/glossary.lua                                                                                                                                                                                                                                                
Error running filter ../scripts/glossary.lua:                                                                                                                                                                                                                          
../scripts/glossary.lua:600: Cannot find the glossary file 

Как я могу заставить Lua каждый раз читать файл глоссария из корневого каталога?

0 ответов

Другие вопросы по тегам