//SortieLatex.cpp #include #include #include #include #include typedef int Valeur; class Sommet; typedef Sommet* AB; void SortieLatex(AB Ar, std::string filepath); class Sommet { protected: Valeur racine; AB Pere,SAG,SAD; bool FGP; // Unused: // int hauteur,balanceGmoinsD; public: Sommet(Valeur v); Sommet(Sommet& s); AB remonterToutEnHaut(); void GrefferSAG(AB g); void GrefferSAD(AB d); void SupprimerSAG(); void SupprimerSAD(); bool FeuilleP(); void RemplacerPourLePerePar(AB); friend std::string* TikzRecursAB(int ligne,int gauche, int droite, int numeroPere, int typeFils, AB Ar); }; std::string* TikzRecursAB(int ligne,int gauche, int droite, int numeroPere, int typeFils, AB Ar); std::string * TikzRecursAB(int ligne,int gauche, int droite, int numeroPere, int typeFils, AB Ar){ std::ostringstream ossnum, osslign,osscol,ossnumPere, ossbal, ossnum2Pere,ossnumRac; std::string stres(""); if (Ar) { ossnumPere<racine << "})\\\\this=\\textcolor{red}{" <Pere << "} (FGP=\\textcolor{red}{" << (Ar->FGP?"Gauche":"Droit") <<"})"; if (Ar->Pere )ossnum2Pere<Pere->racine; else ossnum2Pere<<0; int numero; if (typeFils==-1) { numero=1; } else { numero= 2*numeroPere + typeFils; } ossnum<SAG) stres+=*TikzRecursAB(ligne-3,gauche,mil-13,numero,0,Ar->SAG); if (Ar->SAD) stres+=*TikzRecursAB(ligne-3,mil+13,droite,numero,1,Ar->SAD); } return new std::string(stres); } std::string * TikzAB(AB Ar){ return TikzRecursAB(1,1,10,1,-1,Ar); } void SortieLatex(AB Ar, std::string filepath){ //don't insert garbage in filepath, its std::system-ised. std::ofstream fichier(filepath.c_str(), std::ios::out | std::ios::trunc); std::string preamb ("\\documentclass{article} \n \\usepackage{tikz} \n \\begin{document} \n \\resizebox{300pt}{!}{\n \\begin{tikzpicture}\n"); std::cout<&1 isnt enough to mute pdflatex... system_CARE << "mkdir pdflatex_temp > /dev/null 2>&1;" << "pdflatex -output-directory=\"./pdflatex_temp\" -interaction=nonstopmode \"" << filepath << "\" >/dev/null 2>&1;" << "mv ./pdflatex_temp/*.pdf ./ > /dev/null 2>&1;"; std::system(system_CARE.str().c_str()); return; } // g++ -c SortieLatex.cpp