希望你能帮助我。
我尝试用 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 提供了一些数学函数,但我不知道它们。