diff --git a/scripts/conllu2latex.py b/scripts/conllu2latex.py
index 7cd872f523cb3e1d5addb6be4cd9ac8074e08e86..5ffc38022b11fe9c72d20c201b3a513d2644e6b1 100755
--- a/scripts/conllu2latex.py
+++ b/scripts/conllu2latex.py
@@ -67,35 +67,40 @@ def getLayout(sentence, text) :
   ranges = [ranges[i] for i in range(len(ranges)) if i not in multis]
 
   for i in range(len(ranges)) :
-    if ranges[i][0] != -1 :
-      continue
-    start = 0
-    if i > 0 :
-      start = ranges[i-1][1]+1
-    j = i
-    while ranges[j][0] == -1 :
-      j += 1
-    end = ranges[j][0]-1
-    size = end-start +1
-    each = size // (j-i)
-    for k in range(j-i) :
-      ranges[i+k][0] = start + k*each
-      ranges[i+k][1] = ranges[i+k][0]+each-1
-    i = j
-
-  for i in range(len(ranges)-1) :
-    if ranges[i][1] != ranges[i+1][0]-1 :
-      if ranges[i][1]-ranges[i][0] <= ranges[i+1][1]-ranges[i+1][0] :
-        ranges[i][1] = ranges[i+1][0]-1
-      else :
-        ranges[i+1][0] = ranges[i][1]+1
+    end = ranges[i][-1]
+    if end+1 in range(len(text)) and text[end+1] == " " :
+      ranges[i][-1] += 1
+
+#  for i in range(len(ranges)) :
+#    if ranges[i][0] != -1 :
+#      continue
+#    start = 0
+#    if i > 0 :
+#      start = ranges[i-1][1]+1
+#    j = i
+#    while ranges[j][0] == -1 :
+#      j += 1
+#    end = ranges[j][0]-1
+#    size = end-start +1
+#    each = size // (j-i)
+#    for k in range(j-i) :
+#      ranges[i+k][0] = start + k*each
+#      ranges[i+k][1] = ranges[i+k][0]+each-1
+#    i = j
+#
+#  for i in range(len(ranges)-1) :
+#    if ranges[i][1] != ranges[i+1][0]-1 :
+#      if ranges[i][1]-ranges[i][0] <= ranges[i+1][1]-ranges[i+1][0] :
+#        ranges[i][1] = ranges[i+1][0]-1
+#      else :
+#        ranges[i+1][0] = ranges[i][1]+1
 
   return sentence, ranges
 ################################################################################
 
 
 ################################################################################
-def produceTabular(sentence, ranges, text, columns, nodes, reduce, breakSize, mask=[None,None], hsep=True) :
+def produceTabular(sentence, ranges, text, columns, nodes, reduce, breakSize, mask=[None,None], hsep=True, isCenter=lambda _:False, isColored=lambda _:False, colSizes=None, title=None) :
 
   if mask[0] not in [None, "incr", "seq"] :
     print("ERROR : invalid mask '%s'"%mask, file=sys.stderr)
@@ -113,15 +118,23 @@ def produceTabular(sentence, ranges, text, columns, nodes, reduce, breakSize, ma
 
   partSizes = [-ranges[parts[partId][0]][0]+ranges[parts[partId][-1]][1]+1 for partId in range(len(parts))]
 
+  curLine = -1
+
   colsep = "|" if hsep else ""
   for partId in range(len(parts)) :
     if partId != 0 :
       print("\\vspace{7pt}\n")
-    print("\\begin{tabular}{|l|%s|}"%(colsep.join(["c"]*partSizes[partId])))
+    colsDef = colsep.join(["c"]*partSizes[partId])
+    print("\\begin{tabular}{|@{\hskip 4pt}l@{\hskip 3pt}|@{\hskip 3pt}%s|}"%(colsDef))
+    if title is not None :
+      print("\multicolumn{%d}{c}{\large %s}\\\\"%(partSizes[partId]+1, title))
     print("\cline{1-%d}\n"%(partSizes[partId]+1))
     for i in range(len(columns))[::-1] :
+      curLine += 1
+      curCol = -1
       print("\\texttt{\\textbf{\\footnotesize{%s}}}"%columns[i].lower(), end=" &\n")
       for j in parts[partId] :
+        curCol += 1
         if columns[i] == "EOS" :
           value = "yes" if j == parts[partId][-1] and partId == len(parts)-1 else "no"
         else :
@@ -150,10 +163,23 @@ def produceTabular(sentence, ranges, text, columns, nodes, reduce, breakSize, ma
             values[k] = "\\texttt{%s}"%(values[k])
         cellContent = "\\\\".join(values)
         tcolsep = colsep if j != parts[partId][-1] else "|"
+        color = ""
+        if isColored((curLine, curCol)) :
+          color = r"\cellcolor{green!15}"
+        if isCenter((curLine, curCol)) :
+          color = r"\cellcolor{blue!30}"
         if nodes :
-          print("\multicolumn{%d}{c%s}{\makecell[cc]{\\tabnode{%s}}}"%(ranges[j][1]-ranges[j][0]+1, tcolsep, cellContent), end=" &\n" if j != parts[partId][-1] else "")
+          if colSizes is not None :
+            cellSize = colSizes[curCol]
+            if cellSize > 0 :
+              cellSize = "%dpt"%(3+cellSize*5.5)
+              print("\multicolumn{%d}{c%s}{%s\makecell[cb]{\parbox{%s}{%s}}}"%(ranges[j][1]-ranges[j][0]+1, tcolsep, color, cellSize, cellContent), end=" &\n" if j != parts[partId][-1] else "")
+            else :
+              print("\multicolumn{%d}{c%s}{%s\makecell[cb]{%s}}"%(ranges[j][1]-ranges[j][0]+1, tcolsep, color, cellContent), end=" &\n" if j != parts[partId][-1] else "")
+          else :
+            print("\multicolumn{%d}{c%s}{%s\makecell[cb]{%s}}"%(ranges[j][1]-ranges[j][0]+1, tcolsep, color, cellContent), end=" &\n" if j != parts[partId][-1] else "")
         else :
-          print("\multicolumn{%d}{c%s}{\makecell[cc]{%s}}"%(ranges[j][1]-ranges[j][0]+1, tcolsep, cellContent), end=" &\n" if j != parts[partId][-1] else "")
+          print("\multicolumn{%d}{c%s}{\makecell[cb{%s}}"%(ranges[j][1]-ranges[j][0]+1, tcolsep, cellContent), end=" &\n" if j != parts[partId][-1] else "")
       if nodes and i != 0 :
         print("\\\\%s\n"%("[-0.1cm]" if i == 1 else "[%scm]"%(breakSize)))
       else :
@@ -323,35 +349,32 @@ def drawPaths(sentence, ranges, text, columns, hsep, isSeq) :
 
 ################################################################################
 def drawFeatures(sentence, ranges, text, columns) :
-  print(r"""\makeatletter
-\@ifundefined{tabnode}{%
-\newcommand\tabnode[1]{\addtocounter{nodecount}{1} \tikz \node[minimum height=0.5cm] (\arabic{nodecount}) {#1};}%
-\newcounter{nodecount}%
-}{}
-\makeatother
-\setcounter{nodecount}{0}""")
-  print(r"\tikzstyle{every picture}+=[remember picture,baseline]")
-  print(r"\tikzstyle{every node}+=[inner sep=0pt,anchor=base]")
-
   nbLines = len(sentence[0])
   nbCols = len(sentence)
 
   center = (nbLines//2, nbCols//2)
+  isCenter = lambda lc : lc == center
+
+
+  isColored = lambda lc : lc[0] >= center[0] and lc[1] <= center[1]
+
+  colSizes = [max(map(len, elem)) for elem in sentence]
 
   print(r"\begin{figure}")
-  print("\\tabcolsep=0.10mm")
+  print(r"\centering")
+  print("\\setlength{\\tabcolsep}{0.00mm}")
   print(r"\resizebox{\textwidth}{!}{")
-  produceTabular(sentence, ranges, text, columns, True, True, "0.1", mask=("seq", center), hsep="")
-  print(r"\quad", end="")
-  produceTabular(sentence, ranges, text, columns, True, True, "0.1", mask=("seq", center), hsep="")
+  isColored = lambda lc : lc[0] >= center[0] and lc[1] <= center[1]
+  produceTabular(sentence, ranges, text, columns, True, True, "0.1", mask=("seq", center), hsep="", isCenter=isCenter, isColored=isColored, colSizes=colSizes, title=r"Passé-Bas (\palo)")
   print(r"\quad", end="")
-  produceTabular(sentence, ranges, text, columns, True, True, "0.1", mask=("incr", center), hsep="")
-  print("")
-
-  drawRectanglePalo(1, nbLines, nbCols)
-  drawRectangleFulo(nbLines*nbCols+1, nbLines, nbCols)
-  drawRectanglePahi(2*nbLines*nbCols+1, nbLines, nbCols)
-  print("}")
+  isColored = lambda lc : lc[0] >= center[0] and lc[1] <= center[1] or lc[0] > center[0]
+  produceTabular(sentence, ranges, text, columns, True, True, "0.1", mask=("seq", center), hsep="", isCenter=isCenter, isColored=isColored, colSizes=colSizes, title=r"Futur-Bas (\fulo)")
+  print("\n}\n")
+  print(r"\vspace*{0.25cm}")
+  print(r"\resizebox{0.5\textwidth}{!}{")
+  isColored = lambda lc : lc[1] < center[1] or lc[1] == center[1] and lc[0] > center[0]
+  produceTabular(sentence, ranges, text, columns, True, True, "0.1", mask=("incr", center), hsep="", isCenter=isCenter, isColored=isColored, colSizes=colSizes, title="Passé-Haut (\pahi)")
+  print("\n}")
 
   print(r"\caption{Caption.}")
   print(r"\label{fig:a}")