全新安装 TL2018:未找到 tikz 图形绘制库

全新安装 TL2018:未找到 tikz 图形绘制库

在 Linux 上全新安装 TL 2018 时,找不到 tikz 图形绘制库。

例如文件texlive/2018/texmf-dist/tex/generic/pgf/graphdrawing/tex/pgflibrarygraphdrawing.trees.code.tex就在那里。

\documentclass{scrartcl}


\usepackage{tikz}
\usetikzlibrary{graphdrawing}
\usegdlibrary{trees}



\begin{document}

Hello World

\end{document}

使用 lualatex 进行编译 ! Package pgf Error: Graph drawing library 'trees' not found.

答案1

详情如下https://github.com/u-fischer/luaotfload/issues/6,与 ConTeXt 一起使用时pgf_lookup_and_require错误地用于resolvers.findfile查找图形绘制库。此错误在luaotfload升级时出现,现在此resolvers.findfile功能也已升级。

问题显然出在 PGF 上,因为resolvers.findfile它要查找字体而不是 TeX 树中的任意文件。在修复此问题之前,您可以pgf_lookup_and_require使用自己的变体覆盖该函数,该变体可以执行正确的操作。

\documentclass{article}

\usepackage{luacode}
\usepackage{tikz}
\usetikzlibrary{graphdrawing}

\begin{luacode*}
function pgf_lookup_and_require(name)
    local sep = package.config:sub(1,1)
    local function lookup(name)
        local sub = name:gsub('%.',sep)  
        if kpse.find_file(sub, 'lua') then
            require(name)
        elseif kpse.find_file(sub, 'clua') then
            collectgarbage('stop') 
            require(name)
            collectgarbage('restart')
        else
            return false
        end
        return true
    end
    return
        lookup('pgf.gd.' .. name .. '.library') or
        lookup('pgf.gd.' .. name) or
        lookup(name .. '.library') or
        lookup(name) 
end
\end{luacode*}

\usegdlibrary{trees}

\begin{document}

Hello World

\end{document}

在我看来,PGF 中的 Lua 代码并没有经过深思熟虑,因为这个简单的函数已经表现出一些 Lua 反模式,例如通过require返回表而不是停止并重新启动垃圾收集器来污染全局环境,这会强制进行收集循环。此外,这种笨拙的确定路径分隔符的方式,而不是使用package.config确实应该避免。

相关内容