Centering wide tables or figures
September 17th, 2008 by Stefan Kottwitz
When you want to include an image or a table that’s wider than the text width, you will notice that even when \centering or the center-environment is used this wide object will not be centered in relation to the surrounding text. It will be placed at the left margin but go into the right margin. Its frequently requested that wide figures or tables should overlap at both sides in equal measure.
It can easily achieved by putting the table or picture inside a box, giving the box the width of the text, by the \makebox command. Here is a compilable example, where I’m centering a table having 1.5 times the width of the text:
\documentclass[a4paper,10pt]{article} \usepackage[english]{babel} \usepackage{blindtext} \usepackage{tabularx} \begin{document} \blindtext \bigskip \noindent\makebox[\textwidth]{% \begin{tabularx}{1.5\textwidth}{XX} \blindtext & \blindtext \end{tabularx}} \bigskip \blindtext \end{document}
I’ve used \noindent to suppress the paragraph indentation, otherwise I would get an overfull \hbox. As you may notice there’s no \centering necessary because the width of the box equals \textwidth.
This topic was discussed in the LaTeX Community Forum, on CQF.info and on mrunix.de.
.
This entry was posted on Mittwoch, September 17th, 2008 at 20:22 and is filed under Figures and Tables, Layout. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.




September 17th, 2008 at 21:57
Thanks for sharing this. I recently stumbled upon the same problem and did not find a good solution. Next time I’ll use this trick.
September 17th, 2008 at 23:49
That’s pretty interesting. Being a long-time plain TeX user, I would just do an \hbox to\textwidth{\hss … \hss}, but this solution is much more LaTeX-like.
September 25th, 2008 at 01:39
Hi Kjell, hi Marcin,
thank you for your comments, they’re encouraging me to post some more small tricks and workarounds.
März 29th, 2009 at 05:46
Thanks. You have make a good job.
Mai 5th, 2009 at 04:23
Thanks. I like that. However, it would have been better if you could display what it would look like when you compile it. I have a problem centering a picture even though I used the \centering code; which did not work. How do you put a picture on the left of the frame?
Again thanks
Mai 7th, 2009 at 18:15
Hi Some,
here’s a screenshot using the code above:
Concerning your problem please show some code that’s needing correction. Btw. to position a picture freely you could use the textpos package.
Oktober 1st, 2009 at 08:03
I’m still a beginner with Latex, but this definitely helped. Thanks!
Oktober 20th, 2009 at 18:27
Thanks for the great post topic.
The example code works fine for me, but not when I try to adapt it for a figure.
Specifically,
\noindent\makebox[\textwidth]{%
\begin{figure}
\includegraphics{mypic}
\end{figure}}
returns “LaTeX Error: Not in outer par mode.” for me.
When I place the figure environment outside of the \makebox command,
\begin{figure}
\noindent\makebox[\textwidth]{%
\includegraphics{mypic}}
\end{figure}
the figure appears, but I am unable to change the width of the image,
\begin{figure}
\noindent\makebox[\textwidth]{%
\includegraphics[width=\textwidth]{mypic}}
\end{figure}
returns the “Not in outer par mode” again. Any ideas what I’m doing incorrectly?
Dezember 6th, 2009 at 14:00
Dear Sir
I have just seem this site. I have a question about LaTex. Please, I would like to know if the e-mail of :Aaron from 20 October 2009 at 6:27 PM, was answeered, because I have the same problem. Subject:Centering wide tables or figures.
Regards
Leon
Dezember 7th, 2009 at 10:44
Hi Leon,
you cannot put a figure into a box, because figures are intended to float, but you boxes inside figures are possible. So the second try of Aaron should work.
This example works for me:
Perhaps don’t use a figure environment if you wouldn’t need floating. Captions can be positioned using the caption package, even without a figure environment.
Stefan
April 30th, 2010 at 01:01
Dear Stefan, thank you so much. Your last reply really helped my in formatting my Master-Thesis
Mai 13th, 2010 at 00:03
Sweet article. But, I don’t understand why would you create the box for the figure instead of simply doing \includegraphics[width=\textwidth]{mypic}, what would the difference be?
Mai 13th, 2010 at 22:02
Hi Bjørnar,
the difference is: that article should help to center a figure that’s wider than the text, not to resize it.
Sometimes there’s a picture or a table that’s too wide and resizing it would make it unreadable or would reduce quality. That’s why I’ve noted this workaround.
If possible, I would prefer to scale the figure to the text width too, then of course we don’t need \makebox.
Stefan
Juli 23rd, 2010 at 07:47
I have been searching for this type of solution for a while. Your tip about figures was perfect! I am sure lots of people want this functionality, perhaps we should add it to the latex wiki on figures and/or layout?
Juli 23rd, 2010 at 07:57
Oh and this method also seems to play well with subfigures!
\documentclass[a4paper,10pt]{article}
\usepackage{graphicx}
\begin{document}
\begin{figure}[htp]
\noindent\makebox[\textwidth]{%
\subfigure[caption1]\includegraphics[width=0.8\textwidth]{pic1.jpg}}
\subfigure[caption2]\includegraphics[width=0.8\textwidth]{pic2.jpg}}}
\end{figure}
\end{document}
Juli 23rd, 2010 at 13:31
Hi Mark,
feel free to copy it if you would like to. Of course it would be very good to add content to such knowledge bases like the LaTeX wiki.
Stefan
September 14th, 2010 at 12:13
Is there perhaps a way to make the image go over the top and bottom margins as well, i.e. right against the top/bottom edge of the page? I’m try to make a cover page for my thesis and have a graphic header and footer that would like to use.
Ingo
September 14th, 2010 at 14:42
Hi Ingo,
you could use the eso-pic package or the textpos package to put text or images beyond the margin. Or use TikZ and the current page node like in this post: http://texblog.net/latex-archive/layout/fancy-chapter-tikz/
Stefan
September 14th, 2010 at 18:18
thanks so much! you also saved my master thesis
September 16th, 2010 at 11:19
Thanks Stefan
The textpos package works perfectly
September 21st, 2010 at 10:51
Yes!! I’ve been looking all over for this. My large tables would never center properly, until now! Thank you very much!
November 11th, 2010 at 02:50
Sweet, thanks for that! Google did a terrible job for me finding a solution to this problem (or I did a terrible job using Google), this was exactly what I was looking for, but took me hours of browsing.
November 17th, 2010 at 18:03
Hours of google!!!!
THANK YOU!!!!!!!!!!!!!!!!!!
März 18th, 2011 at 14:18
This problem has been annoying me for years! Thanks for the solution!
Mai 22nd, 2011 at 16:32
THANK YOU!!!
Mai 30th, 2011 at 18:59
Hey,
this seems like a great trick. i course, it won’t work for me… i’m using the bookstab package and so latex won’t accept the graphix package at the same time. could that be the problem?
and is there any way to make it work when you use bookstab?
cheers
Oktober 25th, 2011 at 16:20
Hey,
It looks very nice with tabularx, but it seems not to work with longtable. My code is something like yours;
\noindent\makebox[\textwidth]{%
\begin{longtable}{>{\centering\arraybackslash}m{0.55\textwidth} >{\centering\arraybackslash}m{0.55\textwidth}}
\blindtext & \blindtext \\
\end{longtable}}
But I get this error:
! Missing \endgroup inserted.
\endgroup
If I just have the table without this nice fix, nothing is wrong with any endgroup. Is there a disambiguation between longtable and makebox?
Thanks in advance!
Adriaan
November 14th, 2011 at 01:40
Hi!
Really useful code, but it obviously doesn’t work anymore when I try to add a frame around the created box:
The frame will only be \textwidth wide and cut through the picture. Any suggestions?