решение1
\shortstack
совершенно не подходит для равномерного размещения символов, поскольку учитывает только высоту и глубину символа, добавляя всего 3 пт между ними.
Посмотрите на результат с помощью
\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}
решение2
Чтобы все было выстроено правильно, используйте \vphantom
, поскольку высота строк указывается относительно записи:
\documentclass{article}
\usepackage{stackengine}
\begin{document}
\shortstack[c]{hoge \\ foo \\ bar}
\shortstack[c]{hoge \\ \\ bar}
\shortstack[c]{hoge \\ \vphantom{foo} \\ bar}
\end{document}