# Align table column on specific math symbol

I do have a longtabu which is originally part of a \newglossarystyle in glossaries list of symbols but I extracted it for the MWE. The first column shows mathematical operators and the second their description. As you can see, the first column looks rather messy. It would be much nicer to have the first column centered on the brackets. Is there a possibility to achieve that automatically?

I already tried to play around with \hphantoms before and after the brackets, but this results in a lot of manual work and is not globally valid. To align columns on the decimal point or other symbols there is the dcolumn package, but I couldn't get the result I wanted. The last thing I tried is to simply place \begin{longtabu} to \linewidth {r@{${}\left(\phantom{a}\right){}$}lX} in the longtabu definition and use multicolumnwherever I do not want the brackets. But the alignment was incorrect as well.

Is there an automated way to achieve alignment of the first column on the brackets?

## Original MWE

\documentclass{article}

\usepackage{longtable}
\usepackage{tabu}

\newcommand*\dif{\mathop{}\!\mathrm{d}}

\begin{document}

\begingroup
\renewcommand{\arraystretch}{1.4}
\begin{longtabu} to \linewidth {cX}
Symbol                                      & Description   \tabularnewline
$\bar{\left(\phantom{a}\right)}$            & Operator 1    \tabularnewline
$\dif\left(\phantom{a}\right)$              & Operator 2    \tabularnewline
$\dot{\left(\phantom{a}\right)}$            & Operator 3    \tabularnewline
$\left(\phantom{a}\right)_{,x}$             & Operator 4    \tabularnewline
$\hat{\left(\phantom{a}\right)}$            & Operator 5    \tabularnewline
$\left(\phantom{a}\right)^{-1}$             & Operator 6    \tabularnewline
$\partial\left(\phantom{a}\right)$          & Operator 7    \tabularnewline
$\left(\phantom{a}\right)^T$                & Operator 8    \tabularnewline
\end{longtabu}
\endgroup

\end{document}


## Attempt 1

The centered orientation of the multicolumns messes up these lines.

\documentclass{article}

\usepackage{longtable}
\usepackage{tabu}

\newcommand*\dif{\mathop{}\!\mathrm{d}}

\begin{document}

\begingroup
\renewcommand{\arraystretch}{1.4}
\begin{longtabu} to \linewidth {r@{${}\left(\phantom{a}\right){}$}lX}
\multicolumn{2}{c}{Symbol}                           & Description   \tabularnewline
\multicolumn{2}{c}{$\bar{\left(\phantom{a}\right)}$} & Operator 1    \tabularnewline
$\dif$                                              && Operator 2    \tabularnewline
\multicolumn{2}{c}{$\dot{\left(\phantom{a}\right)}$} & Operator 3    \tabularnewline
&$_{,x}$                                             & Operator 4    \tabularnewline
\multicolumn{2}{c}{$\hat{\left(\phantom{a}\right)}$} & Operator 5    \tabularnewline
&$^{-1}$                                             & Operator 6    \tabularnewline
$\partial$                                          && Operator 7    \tabularnewline
&$^T$                                                & Operator 8    \tabularnewline
\end{longtabu}
\endgroup

\end{document}


## Attempt 2

Basically alright, but not applicable in the context of using this for \newglossaryentry in a glossaries definition.

\documentclass{article}

\usepackage{longtable}
\usepackage{tabu}

\newcommand*\dif{\mathop{}\!\mathrm{d}}

\begin{document}

\begingroup
\renewcommand{\arraystretch}{1.4}
\begin{longtabu} to \linewidth {r@{}c@{}lX}
\multicolumn{3}{c}{Symbol}                              & Description   \tabularnewline
& $\bar{\left(\phantom{a}\right)}$ &         & Operator 1    \tabularnewline
$\dif$     & $\left(\phantom{a}\right)$       &         & Operator 2    \tabularnewline
& $\dot{\left(\phantom{a}\right)}$ &         & Operator 3    \tabularnewline
& $\left(\phantom{a}\right)$       & $_{,x}$ & Operator 4    \tabularnewline
& $\hat{\left(\phantom{a}\right)}$ &         & Operator 5    \tabularnewline
& $\left(\phantom{a}\right)$       & $^{-1}$ & Operator 6    \tabularnewline
$\partial$ & $\left(\phantom{a}\right)$       &         & Operator 7    \tabularnewline
& $\left(\phantom{a}\right)$       & $^T$    & Operator 8    \tabularnewline
\end{longtabu}
\endgroup

\end{document}


I managed to apply this scheme to the glossary. But it seems a lot of manual work:

Symbol definition:

\newglossary[slg7]{operatorlist}{syi7}{syg7}{Operators}
% compile with: makeindex -s %S.ist -t %S.slg7 -o %S.syi7 %S.syg7

\newglossaryentry{symb:operator:bar}{%
symbol      ={$\bar{\left(\phantom{a}\right)}$},%
name        ={},%
description ={Value in material coordinate system},%
user1       ={},%
user2       ={$\protect\bar{\protect\left(\protect\phantom{a}\protect\right)}$},%
user3       ={},%
type        =operatorlist,%
sort        =olocalbar,%
}

\newglossaryentry{symb:operator:dif}{%
symbol      ={$\dif\left(\phantom{a}\right)$},%
name        ={},%
description ={Differential operator},%
user1       ={$\protect\dif$},%
user2       ={$\protect\left(\protect\phantom{a}\protect\right)$},%
user3       ={},%
type        =operatorlist,%
sort        =odifdifferential,%
}

\newglossaryentry{symb:operator:dx}{%
symbol      ={$\left(\phantom{a}\right)_{,x}$},%
name        ={},%
description ={Spatial derivative with respect to coordinate $x$},%
user1       ={},%
user2       ={$\protect\left(\protect\phantom{a}\protect\right)$},%
user3       ={$_{,x}$},%
type        =operatorlist,%
sort        =odifdx,%
}


glossaries style:

\newglossarystyle{myoperatorstyle}{%
\renewcommand*{\glsclearpage}{}%
\renewenvironment{theglossary}%
{%
\begingroup%
\renewcommand{\arraystretch}{1.4}%
\begin{longtabu} to \linewidth {@{\ \;}r@{}c@{}lX}
}%
{%
\end{longtabu}
\endgroup
}%
\multicolumn{3}{@{}c}{\textbf{Symbol}} & \textbf{Description}%
\tabularnewline%
\tabularnewline%
\endfoot%
}%
% indicate what to do at the start of each logical group
\renewcommand*{\glsgroupskip}{\tabularnewline}% What to do between groups
% entry
\renewcommand*{\glossentry}[1]{%
\glsentryitem{##1}% Entry number if required
\glsentryuseri{##1} &
\glsentryuserii{##1} &
\glsentryuseriii{##1} &
\glossentrydesc{##1}
\tabularnewline%
}%
}


printglossary:

\printglossary[type=operatorlist,style=myoperatorstyle,nonumberlist]


You can do it with the eqparbox package. For that, I define a tpsymb command (three-part symbol), with, as one can easily guess, 3 arguments: a ‘pre-symbol’, the main symbol (which must be the same thoughout the file) and a ‘post-symbol’. The pre- and post- parts are put in an \eqmakebox, so that each of the pre-parts have the samewidth, and similarly for the post-parts.

\documentclass{article}

\usepackage{longtable}
\usepackage{tabu}
\usepackage{ eqparbox}

\newcommand\eqmathbox[2][M]{\eqmakebox[#1][l]{$\displaystyle#2$}}

\newcommand*\dif{\mathop{}\!\mathrm{d}}
\newcommand\tpsymb[3]{\eqmakebox[pre][r]{\ensuremath{#1}}\ensuremath{#2}\eqmakebox[post][l]{\ensuremath{#3}}}

%\newcommand\mysymbol
\begin{document}

\begingroup
\renewcommand{\arraystretch}{1.4}
\noindent
\begin{longtabu} to \linewidth {cX}
Symbol & Description \tabularnewline
\tpsymb{}{\bar{\left(\phantom{a}\right)}}{} & Operator 1 \tabularnewline
\tpsymb{\dif}{\left(\phantom{a}\right)}{} & Operator 2 \tabularnewline
\tpsymb{}{\dot{\left(\phantom{a}\right)}}{} & Operator 3 \tabularnewline
\tpsymb{}{\left(\phantom{a}\right)}{_{,x}} & Operator 4 \tabularnewline
\tpsymb{}{\hat{\left(\phantom{a}\right)}}{} & Operator 5 \tabularnewline
\tpsymb{}{\left(\phantom{a}\right)}{^{-1}} & Operator 6 \tabularnewline
\tpsymb{\partial}{\left(\phantom{a}\right)}{} & Operator 7 \tabularnewline
\tpsymb{}{\left(\phantom{a}\right)}{^T} & Operator 8 \tabularnewline
\end{longtabu}
\endgroup

\end{document}


• Looks good and does basically the same as my second attempt. However, I still prefer my solution since it does not require another package. But thanks a lot. – raedma Apr 13 '17 at 9:18

This is mostly a matter of esthetics. Even if the math symbols are centered in the field, they don't look centered. What you need to do is decide what you really want centered, then adjust the alignment point to center that.

In this case, I centered $(a)$. This was done by measuring the width of the widest field (Symbol) and the width of $(a)$ and adding \hspace*{\fixup} (you could also use \makebox[\fixup][r]{...}) to the left column.

\documentclass{article}

\usepackage{longtable}
\usepackage{tabu}

\newcommand*\dif{\mathop{}\!\mathrm{d}}

\newlength{\fixup}

\begin{document}

\settowidth{\dimen0}{Symbol}%
\settowidth{\dimen1}{$(a)$}%
\setlength{\fixup}{\dimexpr 0.5\dimen0 - 0.5\dimen1}%

\begingroup
\renewcommand{\arraystretch}{1.4}
\begin{longtabu} to \linewidth {r@{}lX}
\multicolumn{2}{c}{Symbol}              & Description   \tabularnewline
\hspace*{\fixup}% force alignment point to center $(a)$
&$\bar{(\phantom{a})}$    & Operator 1    \tabularnewline
$\dif$&$(\phantom{a})$                  & Operator 2    \tabularnewline
&$\dot{(\phantom{a})}$                  & Operator 3    \tabularnewline
&$(\phantom{a})_{,x}$                   & Operator 4    \tabularnewline
&$\hat{(\phantom{a})}$                  & Operator 5    \tabularnewline
&$(\phantom{a})^{-1}$                   & Operator 6    \tabularnewline
$\partial$&$(\phantom{a})$              & Operator 7    \tabularnewline
&$(\phantom{a})^T$                      & Operator 8    \tabularnewline
\end{longtabu}
\endgroup

\end{document}


• Of course it is a matter of esthetics. But isn't this one reason to use LaTeX? – raedma Apr 13 '17 at 9:16