Extra vertical space after \hline causes a gap in the right border of an array

Rather than fiddle with the properties of \hline, it's better -- in your case -- to provide typographic "struts": either a "top strut," which provides vertical spacing above the line on which it's placed, or a "bottom strut," which provides vertical spacing below the line on which it's placed. This idea is not original to me; it goes back (at least) to an article published by Claudio Beccari in TeX and TUG News in 1993. What's nifty about this approach is that one can place both a top strut and a bottom strut on a given line of an array or tabular environment.

The following MWE shows how this may be done. Note that I've switched from array to tabular in order to pare things down to the bare minimum; the vertical spacing issues related to \hline are the same for both environments.

enter image description here

\documentclass{article}
\usepackage{array}
% Define typographic struts, as suggested by Claudio Beccari
%   in an article in TeX and TUG News, Vol. 2, 1993.
\newcommand\Tstrut{\rule{0pt}{2.6ex}}         % = `top' strut
\newcommand\Bstrut{\rule[-0.9ex]{0pt}{0pt}}   % = `bottom' strut

\begin{document}
With struts on the left, without struts on the right:

\begin{tabular}[t]{|l|}
\hline
TEXT\Tstrut\Bstrut\\ % top *and* bottom struts
\hline
TEXT\Tstrut\\        % top strut only
TEXT\Bstrut\\        % bottom strut only
\hline
\end{tabular}
\quad
\begin{tabular}[t]{|l|}
\hline
TEXT\\ 
\hline
TEXT\\    
TEXT\\      
\hline
\end{tabular}
\end{document}

On a case-by-case basis you can insert a vertical strut (zero-width, vertical rule/object) to push the row contents away from others. Here's a small example:

enter image description here

\documentclass{article}
\usepackage{amsmath}% http://ctan.org/pkg/amsmath
\begin{document}
\[
  \begin{array}{|l|l|}%
    \hline
    & \text{Text} \\
    \hline
    \rule{0pt}{1.5\normalbaselineskip} & \text{Text} \\
    \hline
  \end{array}
\]
\end{document}

I've inserted a vertical strut of height 1.5\normalbaselineskip which is 18pt in the above example, any length exceeding the about 70% of the baseline skip would work. For more information on column and/row padding, see Column padding in tables.

Note that I've used amsmath to supply the \text command for setting text in math mode. Even though this is just a simple example and using \mbox would also suffice, amsmath also provides other functionality that is well worth using.


If you wish to insert a fixed amount (say) <len> between two rows, you can insert a blank row (with the appropriate number of column alignments & to provide correct vertical rule placement) and use a row skip of the form \\[\dimexpr-\normalbaselineskip+<len>]. This would jump "back" a length of \normalbaselineskip - the baseline distance between rows - and jump "forward" by <len> - the required gap. Here's a small example:

enter image description here

\documentclass{article}
\usepackage{amsmath}% http://ctan.org/pkg/amsmath
\begin{document}
\[
  \begin{array}[t]{|l|l|}%
    \hline
    & \text{Normal} \\
    \hline
    & \text{Text} \\
    \hline
  \end{array} \quad
  \begin{array}[t]{|l|l|}%
    \hline
    & \texttt{0pt} \\
    \hline
    & \\[-\normalbaselineskip]
    & \text{Text} \\
    \hline
  \end{array} \quad
  \begin{array}[t]{|l|l|}%
    \hline
    & \texttt{2pt} \\
    \hline
    & \\[\dimexpr-\normalbaselineskip+2pt]
    & \text{Text} \\
    \hline
  \end{array} \quad
  \begin{array}[t]{|l|l|}%
    \hline
    & \texttt{1em} \\
    \hline
    & \\[\dimexpr-\normalbaselineskip+1em]
    & \text{Text} \\
    \hline
  \end{array} \quad
  \begin{array}[t]{|l|l|}%
    \hline
    & \texttt{3pc} \\
    \hline
    & \\[\dimexpr-\normalbaselineskip+3pc]
    & \text{Text} \\
    \hline
  \end{array}
\]
\end{document}