Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

In the following MWE I have a centred piece of unbreakable text. Problem is that this causes an extra bit of vertical space, so that visually the centred text is not vertically centred between the two paragraphs. What is the best way to deal with this?

\documentclass{article}

\usepackage{lipsum}

\begin{document}

\lipsum[2]

\begin{center}
\texttt{a~sentence~that~is~long~and~continues~with~the~reason~so~that~it~sticks~out~a~bit}
\end{center}

\lipsum[3]

\end{document}
share|improve this question
1  
possible duplicate of When should we use \begin{center} instead of \centering? –  Martin Schröder Jan 30 '13 at 14:11
    
@Martin I'm also interested to know why we get the extra vertical space just because of some horizontal text that's too long. (I just realised that I didn't add that in the original question) –  Geoff Jan 30 '13 at 16:47
    
Because Lists (of which center is one) add space before and after them. –  Martin Schröder Jan 30 '13 at 17:08
    
@Martin: The question here is not the extra space around the center environment (which of course also occurs without long unbreakable text). The question is why there's additional space only before the environment! (So no, it's not a duplicate of that other question.) –  Hendrik Vogt Jan 31 '13 at 21:53
add comment

2 Answers

up vote 4 down vote accepted

Don't use center (which is internally a list):

\documentclass{article}

\usepackage{lipsum}

\begin{document}

\lipsum[2]

{\par\bigskip\centering
\texttt{a~sentence~that~is~long~and~continues~with~the~reason~so~that~it~sticks~out~a~bit}
\par\bigskip}

\lipsum[3]

\end{document}
share|improve this answer
    
You say: Don't use center (which is internally a list) do you mean in general? or just in such cases as above? Your solution looks less obvious than simply using a center environment, so it seems to me that something is strange with the center environment. –  Geoff Jan 30 '13 at 16:46
1  
Well I would say in the majority of cases center is not the best choice (and similar flushleft and flushright). The idea to use a list structure to change the justification of a paragraph doesn't seems right. Generally I find it more natural to use commands like \raggedright or \centering. –  Ulrike Fischer Jan 30 '13 at 16:47
    
If I simply did \renewenvironment{center}{\par\bigskip\centering}{\par\bigskip} are there any catastrophic consequences? I mean, I have always used center as if it acted like this and am somewhat surprised that something I thought was obvious is in fact not the case. –  Geoff Feb 1 '13 at 19:18
add comment

You're wondering why there's more vertical space before than after the unbreakable text, right?

output

Ulrike told you a good way to deal with it, I'd like to explain a bit why this happens. The problem is indeed the somewhat unfortunate definition of the center environment. This starts with \trivlist\centering\item\relax, so it uses the \centering command inside a trivial list. Now \item places an (empty) label as the first object to be centered, and your unbreakable text doesn't fit on the line, so TeX decides to put it on the next line. You can visualize this by redefining \trivlist so that the label isn't empty anymore:

visualization

Note that the LABEL isn't centered since I defined it so that it sticks out to the left.

\documentclass{article}
\makeatletter
\def\trivlist{%
  \parsep\parskip
  \@nmbrlistfalse
  \@trivlist
  \labelwidth\z@
  \leftmargin\z@
  \itemindent\z@
  %\let\@itemlabel\@empty
  \def\@itemlabel{\llap{LABEL}}
  \def\makelabel##1{##1}}
\makeatother
\begin{document}
\noindent left \hfill right
\begin{center}
\texttt{a~sentence~that~is~not~so~long}
\end{center}
\noindent left \hfill right
\begin{center}
\texttt{a~sentence~that~is~long~and~continues~with~the~reason~so~that~it~sticks~out~a~bit}
\end{center}
\noindent left \hfill right
\end{document}

I think you're safe if you redefine the center environment to use Ulrike's suggestion. Note the \begingroup and \endgroup!

\renewenvironment{center}{\begingroup\par\bigskip\centering}{\par\bigskip\endgroup}
share|improve this answer
    
Thank you for the response, I was indeed wondering about this lop-sided vertical space. Given that you say unfortunate definition of the center environment makes me wonder if there is ever any use for it. –  Geoff Feb 1 '13 at 19:07
    
@Geoff: I said somewhat unfortunate :-) As long as you only have short enough lines, the environment is quite satisfactory, at least in my opinion. –  Hendrik Vogt Feb 1 '13 at 22:31
    
I agree, but sometimes long unbreakables appear; which makes me wonder whether I should simply do \renewenvironment{center}{\par\bigskip\centering}{\par\bigskip} and then I don't need to worry about it. Unless there is something that can happen that I don't know about. –  Geoff Feb 2 '13 at 8:56
    
@Geoff: See my edit. –  Hendrik Vogt Feb 2 '13 at 10:03
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.