这个问题与前一个:我曾尝试测试代码这个答案,它使用 LuaTeX 和 pgfplots。在 Linux Ubuntu 18.04 上使用 TeXstudio 2.12.6 和 Qt 5.9.5,在代码之前我放了一行
% !TeX program = lualatex
这会产生一个错误:
Package PGF Math Error: Could not parse input '' as a floating point number, sorry. The unreadable part was near ''. (in 'BesselJ(0,x)'). }.
LuaLaTeX 运行时:
lualatex -synctex=1 --shell-escape -interaction=nonstopmode %.tex
PdfLaTeX 运行时:
pdflatex -synctex=1 --shell-escape -interaction=nonstopmode %.tex
请注意代码在这个答案中可以使用相同的设置。
我已经安装了所有软件包gsl-*
。
如何解决这个问题?
这是 MWE,可以从问题中简单推断出来。
% !TeX program = lualatex
\documentclass{article}
\usepackage{pgfplots}
\usepackage{luacode}
\begin{luacode*}
local ffi = require("ffi")
gsl = ffi.load("gsl")
ffi.cdef[[
double gsl_sf_bessel_Jn(int n, double x);
double gsl_sf_bessel_Yn(int n, double x);
double gsl_sf_bessel_In(int n, double x);
double gsl_sf_bessel_Kn(int n, double x);
]]
\end{luacode*}
\newcommand\declarebesselfunction[1]{%
\pgfmathdeclarefunction{Bessel#1}{2}{%
\pgfmathfloatparsenumber{%
\directlua{tex.print(gsl.gsl_sf_bessel_#1n(
\pgfmathfloatvalueof{##1},\pgfmathfloatvalueof{##2}))}%
}%
}%
}
\declarebesselfunction{J}
\declarebesselfunction{Y}
\declarebesselfunction{I}
\declarebesselfunction{K}
\begin{document}
\begin{tikzpicture}
\begin{axis}[samples=100,no marks,restrict y to domain=-3:3]
\pgfplotsinvokeforeach{0,...,5}{
\addplot+[domain=0:10] {BesselJ(#1,x)};
\addplot+[domain=.001:10] {BesselY(#1,x)};
\addplot+[domain=0:10] {BesselI(#1,x)};
\addplot+[domain=.001:10] {BesselK(#1,x)};
}
\end{axis}
\end{tikzpicture}
\end{document}
答案1
我无法重现您在 Ubuntu 18.04 Docker 容器中遇到的问题。我使用以下命令启动容器
docker run -it --rm -v `pwd`:/test ubuntu:bionic
然后在容器内运行
cd /test
sudo apt-get update
sudo apt-get install --no-install-recommends texlive-binaries texlive-pictures texlive-latex-base texlive-luatex libgsl-dev
lualatex --shell-escape test.tex
一切运行正常。pdfinfo
在主机系统上运行生成的 PDF 时,显示
$ pdfinfo test.pdf
Creator: TeX
Producer: LuaTeX-1.0.4
[...snip...]
以下是 PDF 的截图: