答え1
\shortstack
文字の高さと奥行きのみを考慮し、文字間に 3pt を追加するだけなので、文字を均一に積み重ねるのにはまったく適していません。
結果を見てみましょう
\documentclass{article}
\begin{document}
\shortstack{a\\c\\e}
\shortstack{g\\y\\q}
\shortstack{fg\\ly\\pt}
\shortstack{l\\a\\f}
\end{document}
結果は、予想したものとはまったく異なります。このコマンドは、引数が大文字のみ (発音区別符号なし) で構成されている場合にのみ有効です。
\documentclass{article}
\newcommand{\bettershortstack}[2][c]{%
\begin{tabular}[b]{@{}#1@{}}#2\end{tabular}%
}
\begin{document}
\bettershortstack{a\\c\\e}
\bettershortstack{g\\y\\q}
\bettershortstack{fg\\ly\\pt}
\bettershortstack{l\\a\\f}
\end{document}
さて、あなたの例:
\documentclass{article}
\newcommand{\bettershortstack}[2][c]{%
\begin{tabular}[b]{@{}#1@{}}#2\end{tabular}%
}
\begin{document}
\bettershortstack{hoge \\ foo \\ bar}
\bettershortstack{hoge \\ \\ bar}
\end{document}