Lua代码识别texlua与luatex

Lua代码识别texlua与luatex

我有一些foo.lua代码,从 luatex 或 texlua 加载时需要稍微有不同的行为。这是我的示例文档。

%!TeX Program=LuaLaTeX
\documentclass{article}
\RequirePackage{luacode}
\begin{document}
\begin{luacode}
require("foo.lua")
\end{luacode}
\end{document}

这是foo.lua

if is_luatex then
  tex.sprint("Hello LuaTeX World!")
else
  print("Hello TeXLua World!")
end

如何定义is_luatex?我的第一个想法是解析,arg[0]但我确实需要一个非常强大的解决方案,涵盖最广泛的情况(99.999%)。

答案1

您可以测试您正在使用的功能


if tex.sprint then
  tex.sprint("Hello LuaTeX World!")
else
  print("Hello TeXLua World!")
end

luatex 排版

在此处输入图片描述

texlua 确实

$ texlua foo.lua 
Hello TeXLua World!

如果你首先测试了 tex 表,你还可以检测到 stock Lua 而不是 texlua

答案2

目前没有记录在案的直接标志来区分 LuaTeX 和 TeXLua,但我们可以利用 LuaTeX 定义命令序列而 TeXLua 没有定义的事实。定义的命令序列数量可通过以下方式获得status.cs_count

local is_luatex = status.cs_count > 0
if is_luatex then
  tex.sprint("Hello LuaTeX World!")
else
  print("Hello TeXLua World!")
end

相关内容