为什么 texdoc 会调用 luatex

为什么 texdoc 会调用 luatex

为什么调用texdoc会运行,其中包括luatex?它有什么用处?

答案1

我将首先解答您的问题中的“如何”和“什么”部分,并将“为什么”部分推迟到这个答案的末尾。

TeXLive 和 MikTeX 都包含该texdoc实用程序。(我不知道其他 TeX 发行版是否也包含该实用程序。)以下内容适用于基于 MacTeX 的系统;我认为其他 TeXLive 系统的设置非常相似。恐怕我无法提供关于如何texdoc在基于 MikTeX 的系统中实现的详细信息。

在 MacTeX2014 上,可执行文件texdoc位于目录中

/usr/local/texlive/2014/bin/x86_64-darwin

在该目录中运行后ls -l texdoc发现该文件texdoc是所谓的符号链接:

lrwxr-xr-x [...] texdoc -> ../../texmf-dist/scripts/texdoc/texdoc.tlu

切换到/usr/local/texlive/2014/texmf-dist/scripts/texdoc并输入ls -l texdoc.tlu产生

-rwxr-xr-x [...] texdoc.tlu

即,它是一个状态为“全球可执行”(和“全球可读”)的普通文件。

输入cat texdoc.tlu结果:

#!/usr/bin/env texlua

-- texdoc.tlu: small wrapper around main.tlu
-- (makes it easier to install a new version of texdoc in TEXMFHOME)

kpse.set_program_name(arg[-1], 'texdoc')
require('texdoc.main')

第一行显示texlua——不是 luatex-- 通过 启动/usr/bin/env。尽管texlua只不过是 的一个符号链接luatex(两者都位于/usr/local/texlive/2014/bin/x86_64-darwin),但它们并不相同。手册页说:“如果 [luatex] 被称为 texlua,它将充当 Lua 解释器”。LuaTeX 参考指南第 3.1.1 节指出,“如果可执行文件被命名为 ”,LuaTeX 的行为就像一个独立的 Lua 解释器 [...]。texlua因此,texlua只能作为 Lua 解释器运行。

另外:Lua 的众多非常有用的特性之一是它是多平台的,这意味着同一组 Lua 脚本(通常……)会产生相同的结果不管运行平台。虽然不能假设lua(可执行文件)在任何给定系统上都可用,但当然可以texdoc假设texlua在任何具有 的系统上都可用texdoc

一旦texlua启动,就会调用两个 lua 函数:kpse.set_program_name,这是 luatexkpse库中提供的(请查看 LuaTeX 参考手册第 4.6.1 节以了解该kpse.set_program_name函数的作用),以及require,这是一个内置的 lua 函数。

main.tlu函数加载的文件require包含另一个 Lua 脚本(在 MacTeX2014 中,此脚本由 79 行代码组成),该脚本完成大部分“实际工作”。如果texdoc调用时不带任何参数或 为texdoc -h,则会生成帮助屏幕。如果texdoc调用时带有一个或多个“实际”参数,则会启动进一步的 Lua 脚本以调用适当的程序(通常但不一定是 pdf 查看器)来显示参数。例如,如果我输入

texdoc hyperref cleveref

hyperref和软件包的用户指南cleveref已在我的 pdf 文件查看程序中启动。


到目前为止,我只检查了什么 texdoc但我还没有给出理由为什么 texdoc使用texlua-- 而不是,例如perl,这是另一个多平台脚本实用程序。我还没有与该texdoc实用程序的作者(Manuel Pégourié-Gonnard)核实过,但我强烈怀疑这是因为,如前所述,每个提供该texdoc实用程序的 TeX 发行版还包含texlua一个功能齐全的 Lua 解释器。相比之下,期望perl安装在所有用户的系统上可能不是一个好主意。

相关内容