This is as good a place as any to pre-introduce the new package I'm working on: tabstackengine, which is a front end to my stackengine package to provide support for tabbed arguments. The reason I introduce the package here is because it supports fixed-width tabbing (based on the widest argument) WITH A SINGLE COMPILER PASS, which is the topic of this question. To do that, one sets the mode \fixTABwidth{T} or \fixTABwidth{F} before the macro invocation.
With a few exceptions where it doesn't make sense, you can take a stackengine macro and add the word tabbed, align or tabular before it to create a tabbing version of a stackengine macro. The syntax is
\tabbedstackengine_macro[stackengine_optional_arg.]tabbed_stackengine_argument(s)
\alignstackengine_macrotabbed_stackengine_argument(s)
\tabularstackengine_macro{column alignments}tabbed_stackengine_argument(s)
The tabbed versions provides columns, each tabbed to the same alignment; the align versions provide {rlrl...} alignment; while the tabular versions provide user-specified alignments.
I don't support \hlines between rows, or even vertical line separators (after all, if you really want a tabular, just use tabular), but I do provide specifiable gap widths between adjacent columns, if desired (defaults to 0pt for tabbed macros, to 1em [ equal to a "quad"] for align commands, and \tabcolsep for tabular commands).
The default alignment tabs are the & char, but that can be changed. The default EOL is \\, but that can be changed.
The one exception I employ in the naming convention is for stackengine's \xxxVectorstack macros, which are named, for the tabbed versions, \xxxMatrixstack.
Package is now available at http://ctan.org/pkg/tabstackengine
Below is the MWE employing the package:
\documentclass{article}
\RequirePackage{tabstackengine}
\parskip0.8em\parindent0em
\begin{document}
Setting fixed tab width.
\fixTABwidth{T}
Setting default tabular inter-item gap to 0pt
\setstacktabulargap{0pt}
tabbedShortstack[l]:\\
\framebox{\tabbedShortstack[l]{a & bb & ccc & dddd\\
1&2&3&$\displaystyle\frac{x}{y}$ \\This&is&a&test}}
tabbedShortstack[c]:\\
\framebox{\tabbedShortstack[c]{a & bb & ccc & dddd\\
1&2&3&$\displaystyle\frac{x}{y}$ \\This&is&a&test}}
tabularShortstack\{lccr\}:\\
\framebox{\tabularShortstack{lccr}{a & bb & ccc & dddd\\
1&2&3&$\displaystyle\frac{x}{y}$ \\This&is&a&test}}
Setting default tabbed inter-item gap to 1ex
\setstacktabbedgap{1ex}
$\vertMatrixstack[c]{%
x_{11} & x_{12} & x_{13}\\
x_{21} & x_{22} & x_{23}\\
x_{31} & x_{32} & x_{33}}
$
$\bracketMatrixstack[c]{%
x_{11} & x_{12} & x_{13}\\
x_{21} & \mathbf{X_{22}} - x_{22} & x_{23}\\
x_{31} & x_{32} & x_{33}}
$
Setting to natural tab width.
\fixTABwidth{F}
$\bracketMatrixstack[c]{%
x_{11} & x_{12} & x_{13}\\
x_{21} & \mathbf{X_{22}} - x_{22} & x_{23}\\
x_{31} & x_{32} & x_{33}}
$
tabbedstackon:\\
\tabbedstackon{a & bb & ccc& dddd}{1&2&3&4}
Setting fixed tab width.
\fixTABwidth{T}
\tabbedstackon{a & bb & ccc& dddd}{1&2&3&4}
Setting default align inter-item gap to 1ex\\
\setstackaligngap{1ex}
alignVectorstack:\\
$
\vert A\vert = \left|\alignVectorstack{
3.&21 & 4.&3 & 1.& \\
1.&1 &432.&2 &13.&3\\
56.&83 & 37.&27 &67.&37}
\right|$
\end{document}}

\unhboxover\unhcopysince you won't need the box again ;) – yo' Oct 21 '13 at 06:18\unhbox. It's too early for me in the morning to try to understand that, I hastily re-edited to revert my changes... – Oct 21 '13 at 06:44eqparboxdocumentation that I got the\unhcopy. Quick look at the code makes me think there is\eqp@settowidthwhich does a\settowidthon the material and then\eqp@produce@boxwhich uses a second time the material to actually print the box. So\unhboxis not usable within aneqparboxbox construct. – Oct 21 '13 at 06:58\eqmakeboxreads the contents twice, and in the first reading the box gets (of course) emptied. – yo' Oct 21 '13 at 06:59