[GiNaC-list] LaTeX Output

Vladimir V. Kisil V.Kisil at leeds.ac.uk
Tue Apr 18 23:09:55 CEST 2023


	Hello,

	Please note that attempting to change expressions in  symtab
  vars you create new copies of them, which are not connected to symbols
  in the initial expression.

  To get the desired result you need to substitute original symbols in
  the expression with their alterations. Here is the code: 

int main(){
	GiNaC::parser reader;
	GiNaC::ex  e =  reader("2*x_1+sin(y_2)");
	GiNaC::symtab & vars = reader.get_syms();
	std::cout << GiNaC::latex;
	exmap em;
	for (std::pair<std::string, GiNaC::ex> var : vars) {
// loop through each symbol then texify and use "set_TeX_name()"
		em[var.second] = symbol(var.first, addTeXbrackets(var.first));
	} //<- Not sure how to add latex to the output yet
	std::cout << e.subs(em) <<std::endl;
	// -> 2 x_{1}+\sin(y_{2})
}

	Best wishes,
	Vladimir
-- 
Vladimir V. Kisil                 http://www1.maths.leeds.ac.uk/~kisilv/
  Book:      Geometry of Mobius Maps       https://doi.org/10.1142/p835
  Soft:      Geometry of cycles         http://moebinv.sourceforge.net/
  Jupyter notebooks:        https://github.com/vvkisil?tab=repositories
>>>>> On Tue, 18 Apr 2023 10:38:48 -1000, Charles White <whitece6 at hawaii.edu> said:

    CW> Hi GiNaC!  I love the library! Keep up the good work!

    CW> Currently though I am having trouble with LaTeX output; I would
    CW> like to parse an expression, then set the LaTeX name to the
    CW> symbols that were generated from the reader. I can do that, but
    CW> the expression doesn't change when I print it. Here is an
    CW> minimal example:

    CW> #include <ginac/ginac.h> std::string addTeXbrackets(std::string
    CW> const& in) { std::string ret = in; std::string::size_type pos =
    CW> 0; while((pos = ret.find('_', pos)) != std::string::npos) {
    CW> ret.replace(pos, 1, "_{"); pos += 1; // move past the dot (and
    CW> the extra '\n') ret.push_back('}'); }

    CW>    return ret; } int main(){ GiNaC::parser reader; GiNaC::ex e =
    CW> reader("2*x_1+sin(y_2)"); GiNaC::symtab & vars =
    CW> reader.get_syms(); std::cout << GiNaC::latex; for
    CW> (std::pair<std::string, GiNaC::ex> var : vars) { // loop through
    CW> each symbol then texify and use "set_TeX_name()"
    CW> GiNaC::ex_to<GiNaC::symbol
    CW> &>(var.second).set_TeX_name(addTeXbrackets(var.first));
    CW> std::cout<<var.second<<std::endl; } //<- Not sure how to add
    CW> latex to the output yet std::cout<<e<<std::endl; } //output is:
    CW> x_{1} y_{2} 2 x_1+\sin(y_2)

    CW> Thanks!  Charles


More information about the GiNaC-list mailing list