在最新更新到 MiKTeX 2.9 后,我的 luatex 安装似乎已损坏。我尝试跟踪错误,但不确定这是错误还是其他奇怪的问题。
生成的文件lualibs.lua
如下所示:
--
-- This is file `lualibs.lua',
-- generated with the docstrip utility.
--
-- The original source files were:
--
-- lualibs.dtx (with options: `lualibs')
-- This is a generated file.
--
-- Copyright (C) 2009 by PRAGMA ADE / ConTeXt Development Team
--
-- See ConTeXt's mreadme.pdf for the license.
--
-- This work consists of the main source file lualibs.dtx
-- and the derived file lualibs.lua.
--
-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
By default, \identifier{lualibs} will not load the libraries individually.
Instead, it includes two \emphasis{merged packages} that have been compiled
from the original files.
This is achieved by means of \identifier{mtx-package}, a script for bundling
\LUA code shipped with \CONTEXT.
This concatenates the code of several \LUA files into a single file that is
both easier to distribute and loading (marginally) faster.
\identifier{mtx-package} ensures that the code from each file gets its
own closure and strips newlines and comments, resulting in a smaller payload.
Another package that relies on it heavily is the font loader as contained in
\identifier{luaotfload} and \identifier{luatex-fonts}.
If \CONTEXT is installed on the system, the merge files can be created
by running:
\begin{quote}\begin{verbatim}
mtxrun --script package --merge lualibs-basic.lua
mtxrun --script package --merge lualibs-extended.lua
\end{verbatim}\end{quote}
\noindent
Of course there is a make target for that:
\begin{quote}\begin{verbatim}
make merge
\end{verbatim}\end{quote}
\noindent
will take care of assembling the packages from the files distributed with
\identifier{lualibs}.
For this to work, the syntax of the \LUA file needs to be well-formed:
files that should be merged must be included via a function
\verb|loadmodule()|.
It doesn’t matter if the function actually does something; a dummy will
suffice.
Also, the argument to \verb|loadmodule()| must be wrapped in parentheses.
This rule is quite convenient, actually, since it allows excluding files
from the merge while still using \verb|loadmodule()| consistently.
\begin{quote}\begin{verbatim}
...
loadmodule("my-lua-file.lua") -- <= will be merged
loadmodule('my-2nd-file.lua') -- <= will be merged
loadmodule "my-3rd-file.lua" -- <= will be ignored
...
\end{verbatim}\end{quote}
Note that there is one exception to the packaging:
\fileent{lualibs-util-jsn.lua} cannot be successfully packaged because
it follows a different coding convention, returning a \LUA table on exit.
Therefore, the file is loaded separately as part of the \identifier{extended}
set like any other \LUA module.
-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
lualibs = lualibs or { }
lualibs.module_info = {
name = "lualibs",
version = 2.00,
date = "2013/04/30",
description = "ConTeXt Lua standard libraries.",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL & Elie Roux & Philipp Gesang",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "See ConTeXt's mreadme.pdf for the license",
}
config = config or { }
config.lualibs = config.lualibs or { }
if config.lualibs.prefer_merged == nil then
lualibs.prefer_merged = true
end
if config.lualibs.load_extended == nil then
lualibs.load_extended = true
end
config.lualibs.verbose = config.lualibs.verbose == false
local dofile = dofile
local kpsefind_file = kpse.find_file
local stringformat = string.format
local texiowrite_nl = texio.write_nl
local find_file, error, warn, info
do
local _error, _warn, _info
if luatexbase and luatexbase.provides_module then
_error, _warn, _info = luatexbase.provides_module(lualibs.module_info)
else
_error, _warn, _info = texiowrite_nl, texiowrite_nl, texiowrite_nl
end
if lualibs.verbose then
error, warn, info = _error, _warn, _info
else
local dummylogger = function ( ) end
error, warn, info = _error, dummylogger, dummylogger
end
lualibs.error, lualibs.warn, lualibs.info = error, warn, info
end
if luatexbase and luatexbase.find_file then
find_file = luatexbase.find_file
else
kpse.set_program_name"luatex"
find_file = kpsefind_file
end
local loadmodule = loadmodule or function (name, t)
if not t then t = "library" end
local filepath = find_file(name, "lua")
if not filepath or filepath == "" then
warn(stringformat("Could not locate %s “%s”.", t, name))
return false
end
dofile(filepath)
return true
end
lualibs.loadmodule = loadmodule
if lualibs.basic_loaded ~= true then
loadmodule"lualibs-basic.lua"
loadmodule"lualibs-compat.lua" --- restore stuff gone since v1.*
end
if lualibs.load_extended == true
and lualibs.extended_loaded ~= true then
loadmodule"lualibs-extended.lua"
end
--- This restores the default of loading everything should a package
--- have requested otherwise. Will be gone once there is a canonical
--- interface for parameterized loading of libraries.
lualibs.load_extended = true
-- vim:tw=71:sw=2:ts=2:expandtab
-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--
-- End of File `lualibs.lua'.
据我所知,这不是一个有效的 lua 文件,因此所有依赖于此的文件(例如)都会失败。我尝试从 CTANmkluatexfontdb
获取当前版本并启动,但最终得到的是相同的文件。lualibs
tex lualibs.dtx
lualibs.lua
这是一个错误还是其他什么?