I would like to customize the latex printing of sin, cos, and tan to be more concise. For example, for an expression like sin(delta), instead of the default: \sin(\delta) I would like it to print: s_{\delta} I read section 6.3.2 in the documentation about print methods for functions, in which there was an example for the "abs()" function. I am confused about what needs to go in abs_eval and abs_evalf -- I tried to run that example and wasn't able to get it to compile. If I only want to change the latex printing for sin/cos/tan, but leave everything else the same as the default, what approach should I take? Should I just copy the code from inifcns_trans.cpp into my own, or is there a way to call REGISTER_FUNCTION in a simple way that only modifies the latex printing? ~Luke
Hello, On Tue, May 3, 2011 at 11:56 PM, Luke <hazelnusse@gmail.com> wrote:
I would like to customize the latex printing of sin, cos, and tan to be more concise. For example, for an expression like sin(delta), instead of the default: \sin(\delta) I would like it to print: s_{\delta}
Quick and dirty solution: DECLARE_FUNCTION_1P(my_sin) static ex my_sin_eval(const ex& arg) { return my_sin(arg).hold(); } static void my_sin_print_latex(const ex& arg, const print_context& c) { c.s << "s_{"; c.print(arg); c.s << "}"; } REGISTER_FUNCTION(my_sin, eval_func(my_sin_eval). print_func<print_latex>(my_sin_print_latex)) And replace all instances of sin with my_sin before printing the expression, i.e. std::cout << latex << e.subs(sin(wild()) == my_sin(wild())) << std::endl;
I read section 6.3.2 in the documentation about print methods for functions, in which there was an example for the "abs()" function. I am confused about what needs to go in abs_eval and abs_evalf -- I tried to run that example and wasn't able to get it to compile.
Anything you like, i.e. static ex abs_eval(const ex& arg) { return arg; } static ex abs_evalf(const ex& arg) { return arg; } (it's not mathematically consistent, still it's good enough for that particular example).
If I only want to change the latex printing for sin/cos/tan, but leave everything else the same as the default, what approach should I take? Should I just copy the code from inifcns_trans.cpp into my own,
That would work, but it sounds like too much effort.
or is there a way to call REGISTER_FUNCTION in a simple way that only modifies the latex printing?
No. Best regards, Alexei
participants (2)
-
Alexei Sheplyakov
-
Luke