[Tex/LaTex] Own mathematical function f(x)

macrosmath-mode

  • I'd like to define an custom function f(x).

  • For example \f{3}
    should print ln(3) + 3 if the function is set to ln(x) + 3.

  • One should be able change the function:
    \setfunc{sin(\x}}.

  • This should only affect future uses of \f{...}

  • And it should be possible to define the first three derivatives..

The commands do not have do be this way. There may be a more elegant/practical way.
Warning: It should work in this environment:
https://tex.stackexchange.com/a/299720/101053

Edit: Changed derivate to derivative; It's unclear what "define the derivative" should mean. I tried to say that I can simply add other functions (whether derivative or nor).

Best Answer

If this works generally, I just got lucky. EDITED to do derivatives.

EDITED To be more true to math mode. EDITED to allow different function names with use of optional argument (default \f). EDITED to use more natural syntax \f(3) rather than \f{3}. EDITED to provide \listfunc macro. EDITED to work with amsmath.

Finally, EDITED to allow a more general syntax that can include primes, subscripts etc. in the function name itself.

\documentclass{article}
\usepackage{amsmath}% BREAKS ORIGINAL CODE; REQUIRES \protected@edef IN \setfunc
\makeatletter
\newcommand\setfunc[2][f]{\expandafter\protected@edef\csname#1\endcsname(##1){#2}}
\makeatother
\def\func#1(#2){\csname#1\endcsname(#2)}
\def\listfunc#1(#2){#1(#2)=\func#1(#2)}
\newcommand\x{(##1)}
\begin{document}
\setfunc{\sin\x} I can list the function: $\listfunc f(3)$\par
or I can just print out $\f(x+y)$.\par
or with a general input syntax: $\func f(x+y)$\par
\setfunc[g'_y]{\ln\x + 3\x^2} Now we can have $\listfunc g'_y(7)$\par
\medskip
Derivatives:\par
\setfunc[y]{4\x^5 - 2\x^2 +3}
\setfunc[y']{20\x^4 - 4\x}
\setfunc[y'']{80\x^3 - 4}
\setfunc[y''']{240\x^2}
\setfunc[y^{iv}]{480\x}
$\listfunc y(2)$\par
$\listfunc y'(2)$\par
$\listfunc y''(2)$\par
$\listfunc y'''(2)$\par
$\listfunc y^{iv}(2)$\par
\end{document}

enter image description here

NOTE: Joel noted that the method can get confused if the evaluation value itself contains a term in parentheses, for example, $\f ( \ln(a + 1.5) )$. The workaround for this is to embrace the inner argument, such as $\f({\ln(a + 1.5)})$ or $\listfunc y''({\ln(a + 1.5)})$.