let draw_vertex_neighborhood edg fac col voi =
let size = List.length edg in
ext "\\noindent{\\begin{tabular}{ll}\n";
ext (Printf.sprintf "Degree : & %i\\\\\n" size);
ext "Next vector : & \\\\\n";
ext "Inverse vector : & \\\\\n";
ext "\\end{tabular}}\\hskip 1.5cm\n";
set_window (-2.,-2.,2.,2.);
set_unit_factor 1.5;
initialize_pspicture();
ext (Printf.sprintf "\t\\SpecialCoor\\degrees[%d]\n" size);
if (col<>0) then
ext (Printf.sprintf
" \\pscircle*[linecolor=vertexcolor%i](0,0){3pt}\n" col);
ext " \\cnode[linewidth=0.4pt](0,0){3pt}{A}\n";
for i = 1 to (size) do
let col = (List.nth (fac) (i-1)) in
let lin = (if ((size<9)&&(size>3)) then ",linearc=0.25" else ",linearc=0.08") in
ext (Printf.sprintf
" \\pscustom[fillstyle=solid,fillcolor=facecolorlight%i,%%\n linecolor=facecolor%i%s]{%%\n" col col lin);
ext (Printf.sprintf " \\pspolygon(0.25;%.1f)(1.3;%f)(1.3;%f)}\n"
((float i)-.0.5) ((float i)-.0.9) ((float i)-.0.1));
ext (Printf.sprintf " \\rput(%.2f;%.1f){\\psscaleboxto(0,0.22){%%\n \\textcolor{facecolor%i}{$\\strut%s$}}}\n"
(cos(3.1415/.(float size))*.0.8+.0.2)
((float i)-.0.5) col (greek_of_int col));
done;
ext "\n%% Edges\n";
for i = 1 to (size) do
if (col<>0) then
ext (Printf.sprintf " \\pscircle*[linecolor=vertexcolor%i](1;%i){2pt}\n"
(List.nth voi (i-1)) (i-1));
ext (Printf.sprintf " \\cnode[linewidth=0.4pt](1;%i){2pt}{A%i}\n" (i-1) i);
ext (Printf.sprintf " \\ncline[linewidth=1.5pt,linecolor=edgecolor%i]{A}{A%i}\n"
(List.nth (edg) (i-1)) i);
ext (Printf.sprintf " \\rput(1.20;%i){\\psscaleboxto(0,0.12){$%i$}}\n" (i-1) i);
done;
ext (Printf.sprintf " \\psarc{->}(0,0){0.2}{0}{%i}\n" (size-1));
finalize_pspicture()