let latex oc ?(cols=10)
      string_of_i string_of_j string_of_v m =
    let p = Printf.fprintf in
    let i_elements = m.mat_i in
    let j_elements = m.mat_j in
    let ilen = Array.length i_elements in
    let jlen = Array.length j_elements in
    let f_begin i =
      p oc "\\begin{tabular}{|l|";
      for k = i to min (i + cols - 1) (ilen - 1) do p oc "r|" done;
      p oc "}\n\\hline\n";
      for k = i to min (i + cols - 1) (ilen - 1) do
        p oc "& %s" (string_of_i i_elements.(k))
      done;
      p oc "\\\\\n\\hline\n"
    in
    let f_end () =
      p oc "\\end{tabular}\n\n"
    in
    let rec iter i =
      if i < ilen then
        (
         f_begin i;
         for j = 0 to jlen - 1 do
           p oc "%s " (string_of_j j_elements.(j)) ;
           for k = i to min (i + cols - 1) (ilen - 1) do
             p oc "& %s" (string_of_v m.mat_mat.(k).(j))
           done;
           p oc "\\\\\n\\hline\n";
         done;
         f_end ();
         iter (i + cols)
        )
      else
        ()
    in
    iter 0