# This file defines Maple functions to generate various chunks of LaTeX to be # included in the main document for the project. ###################################################################### # LaTeX names for elements of the group G. #@ G_latex G_latex[1] := "1"; G_latex[L] := "\\lm"; G_latex[LL] := "\\lm^2"; G_latex[LLL] := "\\lm^3"; G_latex[M] := "\\mu"; G_latex[LM] := "\\lm\\mu"; G_latex[LLM] := "\\lm^2\\mu"; G_latex[LLLM] := "\\lm^3\\mu"; G_latex[N] := "\\nu"; G_latex[LN] := "\\lm\\nu"; G_latex[LLN] := "\\lm^2\\nu"; G_latex[LLLN] := "\\lm^3\\nu"; G_latex[MN] := "\\mu\\nu"; G_latex[LMN] := "\\lm\\mu\\nu"; G_latex[LLMN] := "\\lm^2\\mu\\nu"; G_latex[LLLMN] := "\\lm^3\\mu\\nu"; ###################################################################### # Latex for common angles #@ angle_latex angle_latex[0] := "0"; angle_latex[Pi] := "\\pi"; angle_latex[2*Pi] := "2\\pi"; angle_latex[Pi/4] := "\\qpi"; angle_latex[Pi/2] := "\\ppi"; ###################################################################### # Both tikz and Maple have the ability to place a text label on a # picture and place it intelligently offset from the point being # labelled. This table helps translate between the tikz syntax and # the Maple syntax. #@ tikz_anchor tikz_anchor['above'] := "south"; tikz_anchor['below'] := "north"; tikz_anchor['right'] := "west"; tikz_anchor['left'] := "east"; tikz_anchor[{'above','left' }] := "south east"; tikz_anchor[{'above','right'}] := "south west"; tikz_anchor[{'below','left' }] := "north east"; tikz_anchor[{'below','right'}] := "north west"; ###################################################################### # Generate a tikz plotting command using syntax parallel to that for # Maple plotting commands. #@ tikz_plot tikz_plot := proc(xy,t_range,num_points,col) local t0,t1,tt,pts,s,p; t0 := op(1,t_range); t1 := op(2,t_range); tt := seq(t0 + i/num_points*(t1 - t0),i=0..num_points); if type(xy,procedure) then pts := evalf(map(xy,[tt])); else pts := [seq(evalf(subs(t=s,xy)),s in tt)]; fi; s := sprintf(" \\draw[%s] plot[smooth] coordinates{ ",col); for p in pts do s := cat(s,sprintf("(%.3f,%.3f) ",op(p))); od; s := cat(s,"};\n"); return(s); end: ###################################################################### # Generate tikz code for a point, using syntax similar to Maple #@ tikz_point tikz_point := proc(xy,sz) sprintf(" \\fill (%.3f,%.3f) circle(%.3f);\n",op(evalf(xy)),sz); end; ######################################## # Generate tikz code for a line, using syntax similar to Maple #@ tikz_line tikz_line := proc(xy1,xy2,col_) local s,d; s := " \\draw"; if nargs > 2 then s := cat(s,"[",col_,"]"); fi; s := cat(s,sprintf(" (%.3f,%.3f) -- (%.3f,%.3f);\n",op(evalf(xy1)),op(evalf(xy2)))); return s; end: ######################################## # Generate tikz code for a curve, using syntax similar to Maple #@ tikz_curve tikz_curve := proc(pts,col_) local s,d,p; if nargs > 1 then s := cat(" \\draw[smooth,",col_,"] "); else s := " \\draw[smooth] "; fi; d := ""; for p in pts do s := cat(s,d,sprintf(" (%.3f,%.3f) ",op(evalf(p)))); d := "--"; od; s := cat(s,";\n"); return s; end: ###################################################################### # Generate tikz code for a label, using syntax similar to Maple #@ tikz_label tikz_label := proc(xy,t,a_) local a,s; a := NULL; if nargs > 2 then a := a_; if not(member(a,["north","south","east","west", "north west","north east","south west","south east"])) then a := tikz_anchor[a]; if not(member(a,["north","south","east","west", "north west","north east","south west","south east"])) then a := NULL; fi; fi; fi; if a = NULL then s := sprintf(" \\draw (%.3f,%.3f) node {$%s$};\n",op(evalf(xy)),t); else s := sprintf(" \\draw (%.3f,%.3f) node[anchor=%s] {$%s$};\n",op(evalf(xy)),a,t); fi; return(s); end; ###################################################################### #@ save_tikz save_tikz := proc(s::string,txt::string) local fd; fd := fopen(cat(latex_dir,"/tikz_includes/",s,".tex"),WRITE); fprintf(fd,"%s",txt); fclose(fd); return(txt); end: