#!/bin/sh

awk -F '[\\t ]*([&]|\\\\\\\\)[\\t ]*' 'BEGIN { maxcol=0 } { add=0; cols=NF-1; for (i=1; i<=NF-1; ++i) {  cell[NR,add+i]=$i; if (match($i,"multicol")>0 && split($i,a,"[{}]+")>1) { colspan[NR,add+i]=a[2]-1; cols-=a[2]-1; add+=a[2]-1 } }; if (cols>maxcol) maxcol=cols } END { for (c=1; c<=maxcol; ++c) { colwidth[c]=0; for (r=1;r<=NR; ++r) if (length(cell[r,c])>colwidth[c]) colwidth[c]=length(cell[r,c]); }; for (r=1; r<=NR; ++r) { printf "%s%"(colwidth[1]-length(cell[r,1]))"s", cell[r,1], ""; for (c=2+colspan[r,1]; c<=maxcol; ++c) { if (colspan[r,c]>0) { w=3*colspan[r,c]; for (k=c;k<=c+colspan[r,c];++k) w+=colwidth[k]; printf " & %"w"s", cell[r,c] } else printf " & %"colwidth[c]"s", cell[r,c]; c+=colspan[r,c] } print " \\\\" } }'
