![LuaLatex 包:\dofile 导致错误“没有这样的文件或目录”](https://linux22.com/image/257474/LuaLatex%20%E5%8C%85%EF%BC%9A%5Cdofile%20%E5%AF%BC%E8%87%B4%E9%94%99%E8%AF%AF%E2%80%9C%E6%B2%A1%E6%9C%89%E8%BF%99%E6%A0%B7%E7%9A%84%E6%96%87%E4%BB%B6%E6%88%96%E7%9B%AE%E5%BD%95%E2%80%9D.png)
我编写了一些宏,可以从数据库中随机选择问题以包含在考试中。我的.sty
文件开头如下:
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{randqs}[2012/10/23 ver 0.1]
\RequirePackage{xparse}
\directlua{dofile('randqs.lua')}
在我的文档中,当我打电话时
\documentclass[answers]{exam}
\usepackage{randqs}
randqs.lua
LuaTex (或任何人)在文件目录中.tex
而不是在文件目录中搜索,.sty
因为如果.lua
在前者中,则会找到它,而如果在后者中,则不会找到它。我猜这不是解决办法,所以我的问题是:我如何确保 LuaTex (或任何人) 在目录中而不是目录dofile
中查找文件?.sty
.tex
答案1
dofile()
是Lua 命令并查找具有给定路径的文件,在您的情况下是randqs.lua
在当前目录中,因为您给出了相对路径。这里有两个选择:
- 给出样式文件的相对路径(或绝对路径),但这当然是不可移植的。
- 或者使用
require('randqs')
(不带.lua
) 加载文件。但要注意:require()
使用特殊的搜索路径,请参阅我对另一个问题的回答:“Lua 树”(texmf 树的类似物) - Khaled 表示:第三个选项是使用 kpse 库来定位文件,例如
dofile(kpse.find_file("randqs.lua"))