使用 Lua 定义的绘图函数不执行任何操作

使用 Lua 定义的绘图函数不执行任何操作

希望你能帮助我。

我尝试用 Tikz 和 Lua 按照以下方式绘制函数

\documentclass[14pt]{book}
\usepackage{marginnote}
\usepackage{amsmath}
\usepackage{multicol}
\usepackage{tikz}
\usetikzlibrary{trees}
\usetikzlibrary{matrix}
\usetikzlibrary{calc}
\usetikzlibrary{positioning,shapes}
\usetikzlibrary{tikzmark} 
\usetikzlibrary{arrows}
\usetikzlibrary{intersections}
\usepackage{pgfplots}
    \pgfplotsset{compat=newest}

\tikzstyle{abstract}=[rectangle, draw=black, rounded corners,
text centered, anchor=north, text=black, text width=2.7 cm]
\tikzstyle{comment}=[rectangle, draw=black, rounded corners, fill=green, 
text centered, anchor=north, text=white, text width=3cm]
\tikzstyle{myarrow}=[->, >=open triangle 90, thick]
\tikzstyle{line}=[-, thick]

\usepackage{luacode}

\begin{luacode*}
function factorial(n)
    if (n == 0) then
        return 1
    else
        return n*factorial(n-1)
    end
end

function binom(n,k)
    return factorial(n) / (factorial(n-k) * factorial(k))
end

function nbin(t)
    res = 0
    for k = 0, math.floor(t), 1 do
        res = res + (binom(k+2,2) * 1/8 * (1/2)^k)
    end
    return res
end

\end{luacode*}

\begin{document}
\input{code.tex}
\sloppy
\end{document}

图片在 code.tex 中使用

\begin{tikzpicture}[
 declare function={nbin(\t) = \directlua{nbin(\t)};}
  ]
  \begin{axis}[
    use fpu=false,
    height=8 cm,
    width = 8 cm,
    samples at={0,1,...,40},
    ]
    \addplot{nbin(x)};
  \end{axis}
\end{tikzpicture}

我对所有 Tikz 的东西都不太熟悉,但我在这里找不到解决方案 :-/ 这只会打印一个白色框,轴上有 0、0.2、...、1,没有错误。这里出了什么问题?

我编辑了我的问题,因为它在独立环境中运行,但不在我的设置中运行。

答案1

你没有将 Lua 结果传递给 TeX。你必须使用tex.sprint(参见Henri Menke 的这个问题提供了一些想法和常见错误)。我不会讨论您对阶乘的方法,但我认为您应该在 Lua 函数中使用局部变量:

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepackage{luacode}
\begin{luacode*}

function factorial(n)
    if (n == 0) then
        return 1
    else
        return n*factorial(n-1)
    end
end

function binom(n,k)
    return factorial(n) / (factorial(n-k) * factorial(k))
end

function nbin(t)
    local res = 0
    for k = 0, math.floor(t), 1 do
        res = res + (binom(k+2,2) * 1/8 * (1/2)^k)
    end
    return res
end

\end{luacode*}
\begin{document}
\begin{tikzpicture}[
 declare function={nbin(\t) = \directlua{tex.sprint(nbin(\t))};}
  ]
  \begin{axis}[
    use fpu=false,
    height=8 cm,
    width = 8 cm,
    samples at={0,1,...,40},
    ]
    \addplot{nbin(x)};
  \end{axis}
\end{tikzpicture}
\end{document}

我认为 PGF 提供了一些数学函数,但我不知道它们。

在此处输入图片描述

相关内容