我正在写出方程式,很多方程式的参数发生了变化,但基本结构却重复了。
我把这个问题简化为如下的一个假设例子。
if (condition ==2) {
p = 2*(x^2)
} else if (condition ==3) {
p = 3*(x^3)
}
print(p)
请注意,存储和检索都是必需的功能。我不确定是否可以实现LaTeX
,但我相信的作者LaTeX
(作为计算机科学家)一定考虑过这一点。
答案1
如果您可以使用 LuaLaTeX 而不是 pdfLaTeX 或 XeLaTeX,那么可以按照您提供的示例以及使用所需输入调用 Lua 函数的 TeX“包装器宏”直接设置 Lua 函数。
% !TEX TS-program = lualatex
\documentclass{article}
%% Lua-side code
\usepackage{luacode}
\begin{luacode}
function pfunc ( cond , x )
local p = 0
x = tonumber ( x )
if cond == "2" then
p = 2*x^2
elseif cond == "3" then
p = 3*x^3
end
tex.sprint ( p )
end
\end{luacode}
%% TeX-side code
\newcommand\pfunc[2]{\directlua{ pfunc ( \luastring{#1} , \luastring{#2})}}
\begin{document}
\pfunc{2}{2}, \pfunc{3}{3}, \pfunc{1}{111}
\end{document}
答案2
和functional
包中,可以编写如下代码:
\documentclass{article}
\usepackage{functional}
\begin{document}
\IgnoreSpacesOn
\PrgNewFunction \MyFunc {m} {
\FpCompareTF {\cond} = {2} {
\TlSet \p {\FpEval{2*(#1)^2}}
} {
\FpCompareTF {\cond} = {3} {
\TlSet \p {\FpEval{3*(#1)^3}}
} { }
}
}
\IgnoreSpacesOff
\def\cond{2} \MyFunc{5} \p
\def\cond{3} \MyFunc{5} \p
\end{document}