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.

I am adding figures to a work and most of the figures are too wide and are thus not centered but are shifted to the right. I searched here and found a solution, that would consist in adding the \centerline{} command into the figure environment. This work fine for figures added with the command \includegraphics{}, like in this example :

\begin{figure}[h!]
\begin{center}
\centerline{\includegraphics{SOIR_optics}}
\end{center} % is this really useful?
\end{figure}

But when I try to add a tikzpicture instead, this solution does not work (see example)

\begin{figure}[h!]
\begin{center}
\centerline{\begin{tikzpicture} 
some code 
\end{tikzpicture}}
\end{center}
\end{figure}

My question is : are there alternatives to this \centerline{} command ?

Thanks !

share|improve this question
    
Is your picture wider than the margins of the page? –  Joseph Wright Mar 4 at 8:23
    
Yes, for some of them –  mwoua Mar 4 at 8:39

2 Answers 2

up vote 7 down vote accepted

The \centerline command should never be used in a LaTeX document (unless you know precisely what you're doing, and probably only in the preamble for some definition). Use

\begin{figure}[htp]
\centering

<whatever>

\end{figure}

and <whatever> (a graphic, a TikZ picture or anything) will be centered.

share|improve this answer
    
This does not work for figures slightly larger than the margins :/ –  mwoua Mar 4 at 8:39
    
@mwoua Why don't you simply scale down the image to fit the textwidth? That would make more sense... –  Jubobs Mar 4 at 8:57
    
If I scale it down, some details could be unreadable. –  mwoua Mar 4 at 9:00
    
@mwoua: of course that depends on how do you perform the scaling; without details is impossible to say more. –  Claudio Fiandrino Mar 4 at 9:20
1  
@mwoua If you need that, enclose the object to be scaled in \makebox[\columnwidth]{...} –  egreg Mar 4 at 9:26

You can use adjustbox

\documentclass{scrreprt}
\usepackage[export]{adjustbox}  %%  export option makes adjustbox --
                                %%  -- goodies available inside includegraphics command
\usepackage{graphicx}

\begin{document}
X\hrulefill X
\begin{figure}[htp]
\includegraphics[width=1.1\textwidth,center]{example-image-a}
\end{figure}
\end{document}

enter image description here

This is very useful for figures that are wider than \textwidth. Another useful macro will be adjustbox environment with max width option.

\documentclass{scrreprt}
\usepackage[export]{adjustbox}
\usepackage{graphicx}

\begin{document}
X\hrulefill X

This is resized to \verb|1.1\textwidth|
\begin{figure}[htp]
\begin{adjustbox}{center,max width=1.1\textwidth}
\includegraphics[width=1.2\textwidth,center]{example-image-a}
\end{adjustbox}
\end{figure}
\clearpage
The following is not resized:
\begin{figure}[htp]
\begin{adjustbox}{center,max width=1.1\textwidth}
\includegraphics[width=0.7\textwidth,center]{example-image-b}
\end{adjustbox}
\end{figure}

\end{document}

enter image description here

enter image description here

The advantage of max width is that the content is resized only if it exceeds the max width otherwise not.

With tikzpicture environment

I assume that your tikz picture are saved as separate files. Then using adjustbox and tikzscale packages:

\documentclass{article}

\usepackage{graphicx,tikz,tikzscale}
\usepackage{adjustbox}
\usepackage{filecontents}
\begin{filecontents*}{myfig.tikz}
\begin{tikzpicture}[inner sep=0pt, outer sep=0pt]
    \draw[use as bounding box](-20,-20) rectangle (20,20);
    \node at (0,0) (A) {A};
    \node[above right] (B) at (A.north east) {B};
    \draw (A.south west)--(B.north east);
  \end{tikzpicture}
\end{filecontents*}

\begin{document}
X\hrulefill X

This is resized to \verb|1.1\textwidth|
\begin{figure}[htp]
\begin{adjustbox}{max width=1.1\textwidth,center}
\includegraphics[width=1.2\textwidth]{myfig.tikz}
\end{adjustbox}
\end{figure}
\clearpage
The following is not resized:
\begin{figure}[htp]
\begin{adjustbox}{max width=1.1\textwidth,center}
\includegraphics[width=0.7\textwidth]{myfig.tikz}
\end{adjustbox}
\end{figure}
\end{document}

enter image description here

share|improve this answer
    
Thanks ! This works for \includegraphics. But for a tikzpicture environment? –  mwoua Mar 4 at 9:16
1  
@mwoua You can use tikzscale package. Give me a minute. I will provide an example. –  Harish Kumar Mar 4 at 9:19
    
I will not use it now but I keep it in mind. Thank you so much for your answer! –  mwoua Mar 4 at 9:33

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.