Чтение файла из корневого каталога проекта в 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 каждый раз читать файл глоссария из корневого каталога?