let latex_sorted_dists oc
      string_of_key string_of_dist comp dm =
    let len = Array.length dm.dist_elements in
    let subarray i t =
      Array.append
        (Array.sub t 0 i)
        (if i < len - 1 then
          (Array.sub t (i+1) (len - i - 1))
        else
          [| |]
        )
    in
    let f i _ =
      let teles = subarray i dm.dist_elements in
      let tdists = subarray i dm.dist_matrix.(i) in
      let t =
        Array.mapi
          (fun i ele -> (ele, tdists.(i)))
          teles
      in
      Array.sort (fun (_,d1) (_,d2) -> comp d1 d2) t;
      t
    in
    let t_couples = Array.mapi f dm.dist_elements in
    let p = Printf.fprintf in
    let print i ele =
      p oc "\n{\\bf %s}: " (string_of_key ele);
      let s = String.concat " $<$ "
          (Array.to_list
             (Array.map
                (fun (key,dist) ->
                  Printf.sprintf "%s(%s)"
                    (string_of_key key)
                    (string_of_dist dist)
                )
                t_couples.(i)
             )
          )
      in
      p oc "%s\n" s
    in
    Array.iteri print dm.dist_elements