注意:我是 Lua 编程的新手,而且我已经很难正常安装 Lua 模块了(VS Code 无法运行正确的代码,我不知道,我会在 StackOverflow 上问)。因此,就这个问题而言,请假设我很笨,除了 LaTeX 之外,我一生中从未使用过任何“编程语言”。
对于一个教学学校项目,我被要求开发一种资源来帮助学校学生提高他们的方程式求解技能。因此,我决定创建一组算法(但随机)生成的方程式及其解法,这些方程式将在编译时生成并打印在 TeX 文件中(在 .pdf 中)。然后,这些 .tex 文件将免费提供给教师,供他们编译。我听说 Lua 很适合做这个,因为它与 LuaLaTeX 很好地集成在一起,并且可以轻松地编写为单独的代码文件并输入
\directlua{ code.lua }
我的问题是我真的希望能够访问如下功能map
和函数编程语法LuaFun 库,但我甚至在自己的机器上安装它都遇到了很大的困难。
因为我希望 .tex 文件基本上是“即插即用”的(假设可以访问正确的 TeX 安装),这太麻烦了,会阻止人们使用我的项目。相反,我希望有一种简单的方法来访问map
等,而不需要每个用户都已经在他们的机器上安装了 Lua 和 LuaFun。
我尝试fun.lua
从GitHub 仓库并且只是在我的代码之前输入它,但这似乎不起作用。
那我该怎么办?最好的(即最简单、最轻量和最便携的)方法是什么?
或者整个企业从根本上来说存在缺陷,我应该使用类似这个python
包吗?
提前致谢!
答案1
当加载一个 Lua 文件时,LuaLaTeX 会搜索以下命令给出的位置:
lualatex '\directlua{print((package.path..";"..kpse.show_path("lua")):gsub("[;:]",string.char(10)):gsub("!",""):gsub("/+", "/").."")}\csname@@end\endcsname'
这给出了一个非常长的与系统相关的路径列表,但只有以下位置真正对您的目的有意义:
.
(当前目录):LuaTeX 将在当前目录中搜索任何已加载的文件,因此您可以将任何.lua
文件直接放在与主文件相同的文件夹中.tex
,两者之间不需要任何子目录。$TEXMFDIST/tex/lualatex/<packagename>/
:如果您计划将包上传到 CTAN,那么您可以将.lua
文件放在与您的文件相同的文件夹中.sty
。绝对路径:在测试包时,类似
require("/path/to/file.lua")
将会起作用,尽管这会使软件包的分发变得相当棘手。
我的问题是我真的希望能够从 LuaFun 库访问诸如 map 和函数编程语法之类的函数,但我甚至在自己的机器上安装它时也非常挣扎。
TeX Live 和 MiKTeX 已经包含包裹penlight
其中包含许多函数式编程函数如map
,,,等等filter
。zip
。根据文档,要加载包,你只需要运行
local penlight = require("penlight") -- Lua
或者
\usepackage[pl, import]{penlight} % LaTeX
因此,我决定创建一组算法(但随机)生成的具有可行解的方程,这些方程将在编译时生成并打印在 TeX 文件中(嗯,在 .pdf 中)。
这luacas
包裹可能会有帮助。