下一个代码给出 5e-05\luaveclen{0.00003}{0.00004}
但是我需要一个小数如何获得十进制表示法?
\def\luaveclen#1#2{
\directlua{
x = #1;
y = #2;
r=(x*x+y*y)^0.5
tex.print(tostring(r))}
}
结果\luaveclen{0.0003}{0.0004}
为 0.0005。
我需要小数,因为这里veclen 的问题 我现在的答案是错误的。
我找到了一个使用 fpu 的解决方案,但它并不优雅:
%!TEX TS-program = lualatex
\documentclass[11pt]{article}
\usepackage{fontspec}
\usepackage{luatextra}
\usepackage{tikz}
\usetikzlibrary{decorations.markings,fpu}
\begin{document}
\makeatletter
\def\luaveclen#1#2{
\directlua{
x = #1;
y = #2;
r=(x*x+y*y)^0.5
tex.print(tostring(r))}
}
\pgfmathdeclarefunction*{veclen}{2}{%
\begingroup
\pgfkeys{/pgf/fpu,/pgf/fpu/output format=fixed}
\pgfmathparse{\luaveclen{#1}{#2}}
\edef\pgfmath@tmp{\pgfmathresult}
\pgfmath@returnone\pgfmath@tmp pt
\endgroup
}
\makeatother
\pgfmathparse{veclen(0.00003,0.00004)}
Vector length is: \pgfmathresult
\begin{tikzpicture}[decoration={markings, mark = at position .5 with
{\draw (-2pt,-2pt) -- (2pt,2pt) (2pt,-2pt) -- (-2pt,2pt);}}]
\draw [postaction={decorate}] (0,0) -- ++(146:1) arc (146:157:1) -- (0,0);
\end{tikzpicture}
\luaveclen{0.0003}{0.0004}
\end{document}
答案1
您可以使用该string.format
功能:
%!TEX TS-program = lualatex
\documentclass[11pt]{article}
\usepackage{fontspec}
\usepackage{luatextra}
\usepackage{tikz}
\usetikzlibrary{decorations.markings,fpu}
\usepackage{luacode}
\begin{document}
\makeatletter
\begin{luacode*}
function get_real_number(r)
return string.format("%f", r)
end
\end{luacode*}
\def\luaveclen#1#2{%
\directlua{
x = #1;
y = #2;
r=(x*x+y*y)^0.5
tex.print(get_real_number(r))
}}
\luaveclen{0.0003}{0.0004}
\end{document}