Graphics, Figures & TablesFigures not centered

Information and discussion about graphics, figures & tables in LaTeX documents.
Post Reply
User avatar
svend_tveskaeg
Posts: 478
Joined: Sun Jul 12, 2009 5:31 am

Figures not centered

Post by svend_tveskaeg »

Hi all.

Consider the following:

Code: Select all

\documentclass[a4paper]{article}

\usepackage[hmargin=2.4cm,vmargin=3cm]{geometry}
\usepackage{subcaption}
\usepackage{auto-pst-pdf,pstricks-add}
\usepackage{expl3}

\ExplSyntaxOn
 \cs_new_eq:NN
  \calculate
 \fp_eval:n
\ExplSyntaxOff

\begin{document}

\noindent Test, test, test, test, test, test, test, test, test, test,
test, test, test, test, test, test, test, test, test, test, test, test.

\begin{figure}[htbp]
\def\figur{2}
\def\hoejde{\calculate{3*\figur}}
\def\bredde{\calculate{2*\figur}}
\def\faktorA{\calculate{\hoejde+1}}
\def\faktorB{\calculate{\bredde+1}}
\def\faktorC{\calculate{\bredde/2+1}}
\def\skalering{\calculate{3/\figur}}
\centering
\psset{unit=\skalering}
\begin{subfigure}{0.42\textwidth}
 \centering
  \begin{pspicture}(\bredde,\hoejde)
   \pnode(!\bredde\space 2 div 0){A}
   \pnode(!0 \bredde\space){B}
   \pnode(!\bredde\space 2 div \hoejde\space){C}
   \pnode(!\bredde\space 2 3 div \hoejde\space mul){D}
   \rput(!\bredde\space 2 div \bredde\space 8 div sub
         2 3 div \hoejde\space mul \bredde\space 8 div sub){\small{$A$}}
   \rput(!\bredde\space 2 div \bredde\space 8 div sub
         2 3 div \hoejde\space mul \bredde\space 8 div add){\small{$B$}}
   \rput(!\bredde\space 2 div \bredde\space 8 div add
         2 3 div \hoejde\space mul \bredde\space 8 div sub){\small{$C$}}
   \rput(!\bredde\space 2 div \bredde\space 8 div add
         2 3 div \hoejde\space mul \bredde\space 8 div add){\small{$D$}}
   \multido{\iA=0+1}{\faktorA}{\psline[linestyle=dashed,linecolor=blue]%
     (0,\iA)(\bredde\space,\iA)}
   \multido{\iB=0+1}{\faktorB}{\psline[linestyle=dashed,linecolor=blue]%
     (\iB,0)(\iB,\hoejde\space)}
   \psline[linewidth=1.25pt](A)(C)
   \psline[linewidth=1.25pt](B)(D)
   \pspolygon[linewidth=2pt,linecolor=red](A)(B)(C)(D)
  \end{pspicture}
 \subcaption{F{\o}r omrokeringen.}
\end{subfigure}
\begin{subfigure}{0.42\textwidth}
 \centering
  \begin{pspicture}(\figur,\hoejde)
   \pnode(0,0){A}
   \pnode(!0 2 3 div \hoejde\space mul){B}
   \pnode(!0 \hoejde\space){C}
   \pnode(!\bredde\space 2 div \hoejde\space){D}
   \pnode(!\bredde\space 2 div 2 3 div \hoejde\space mul){E}
   \pnode(!\bredde\space 2 div 0){F}
   \rput(!\bredde\space 2 div \bredde\space 8 div sub
         2 3 div \hoejde\space mul \bredde\space 8 div sub){\small{$A$}}
   \rput(!\bredde\space 2 div \bredde\space 8 div sub
         2 3 div \hoejde\space mul \bredde\space 8 div add){\small{$B$}}
   \rput(!\bredde\space 8 div
         \hoejde\space \bredde\space 8 div sub){\small{$C$}}
   \rput(!\bredde\space 8 div \bredde\space 8 div){\small{$D$}}
   \multido{\iC=0+1}{\faktorA}{\psline[linestyle=dashed,linecolor=blue]%
     (0,\iC)(!\bredde\space 2 div \iC)}
   \multido{\iD=0+1}{\faktorC}{\psline[linestyle=dashed,linecolor=blue]%
     (\iD,0)(\iD,\hoejde\space)}
   \pspolygon[linewidth=1.25pt](A)(C)(D)(F)
   \psline[linewidth=1.25pt](B)(E)
   \psline[linewidth=2pt,linecolor=red](F)(B)(D)
  \end{pspicture}
 \subcaption{Efter omrokeringen.}
\end{subfigure}
\caption{Figur~$\figur$ i figurf{\o}lgen.}
\end{figure}

\end{document}
Can someone tell my why the figures are not horizontally centered on the page?

If I strip the example to the following, the figures are centered (but I cannot figure out what causes the wrong placement in the example above):

Code: Select all

\documentclass[a4paper]{article}

\usepackage[hmargin=2.4cm,vmargin=3cm]{geometry}
\usepackage{subcaption}
\usepackage{pstricks-add}

\begin{document}

\noindent Test, test, test, test, test, test, test, test, test, test,
test, test, test, test, test, test, test, test, test, test, test, test.

\begin{figure}[htbp]
\centering
\begin{subfigure}{0.42\textwidth}
 \centering
  \begin{pspicture}(4,0)
   \psline(0,0)(4,0)
  \end{pspicture}
 \subcaption{Something.}
\end{subfigure}
\begin{subfigure}{0.42\textwidth}
 \centering
  \begin{pspicture}(2,0)
   \psline(0,0)(2,0)
  \end{pspicture}
 \subcaption{Something else.}
\end{subfigure}
\caption{Yet another caption}
\label{fig:2}
\end{figure}

\end{document}
Thank you in advance.

Update
It seems to have something to do with the {0.42\textwidth} arguments. If I use {0.58\textwidth} for the left figure and {0.38\textwidth} for the right figure, it seems to work, but it seems wrong to use a trail and error method like this.
``In the game of chess, you can never let your adversary see your pieces.''
-- Zapp Brannigan, Futurama (season 1, episode 4)

Recommended reading 2024:

LaTeXguide.org • LaTeX-Cookbook.net • TikZ.org

NEW: TikZ book now 40% off at Amazon.com for a short time.

And: Currently, Packt sells ebooks for $4.99 each if you buy 5 of their over 1000 ebooks. If you choose only a single one, $9.99. How about combining 3 LaTeX books with Python, gnuplot, mathplotlib, Matlab, ChatGPT or other AI books? Epub and PDF. Bundle (3 books, add more for higher discount): https://packt.link/MDH5p

cgnieder
Site Moderator
Posts: 2000
Joined: Sat Apr 16, 2011 7:27 pm

Figures not centered

Post by cgnieder »

I believe they are centered. I added an \fbox around the subfigures to check:

Code: Select all

\documentclass[a4paper]{article}

\usepackage[hmargin=2.4cm,vmargin=3cm]{geometry}
\usepackage{subcaption}
\usepackage{auto-pst-pdf,pstricks-add}
\usepackage{expl3}

\ExplSyntaxOn
 \cs_new_eq:NN
  \calculate
 \fp_eval:n
\ExplSyntaxOff

\begin{document}

\noindent Test, test, test, test, test, test, test, test, test, test,
test, test, test, test, test, test, test, test, test, test, test, test.

\begin{figure}[htbp]
\def\figur{2}
\def\hoejde{\calculate{3*\figur}}
\def\bredde{\calculate{2*\figur}}
\def\faktorA{\calculate{\hoejde+1}}
\def\faktorB{\calculate{\bredde+1}}
\def\faktorC{\calculate{\bredde/2+1}}
\def\skalering{\calculate{3/\figur}}
\centering
\psset{unit=\skalering}
\fbox{%
\begin{subfigure}{0.42\textwidth}
 \centering
  \begin{pspicture}(\bredde,\hoejde)
   \pnode(!\bredde\space 2 div 0){A}
   \pnode(!0 \bredde\space){B}
   \pnode(!\bredde\space 2 div \hoejde\space){C}
   \pnode(!\bredde\space 2 3 div \hoejde\space mul){D}
   \rput(!\bredde\space 2 div \bredde\space 8 div sub
         2 3 div \hoejde\space mul \bredde\space 8 div sub){\small{$A$}}
   \rput(!\bredde\space 2 div \bredde\space 8 div sub
         2 3 div \hoejde\space mul \bredde\space 8 div add){\small{$B$}}
   \rput(!\bredde\space 2 div \bredde\space 8 div add
         2 3 div \hoejde\space mul \bredde\space 8 div sub){\small{$C$}}
   \rput(!\bredde\space 2 div \bredde\space 8 div add
         2 3 div \hoejde\space mul \bredde\space 8 div add){\small{$D$}}
   \multido{\iA=0+1}{\faktorA}{\psline[linestyle=dashed,linecolor=blue]%
     (0,\iA)(\bredde\space,\iA)}
   \multido{\iB=0+1}{\faktorB}{\psline[linestyle=dashed,linecolor=blue]%
     (\iB,0)(\iB,\hoejde\space)}
   \psline[linewidth=1.25pt](A)(C)
   \psline[linewidth=1.25pt](B)(D)
   \pspolygon[linewidth=2pt,linecolor=red](A)(B)(C)(D)
  \end{pspicture}
 \subcaption{F{\o}r omrokeringen.}
\end{subfigure}}
\fbox{%
\begin{subfigure}{0.42\textwidth}
 \centering
  \begin{pspicture}(\figur,\hoejde)
   \pnode(0,0){A}
   \pnode(!0 2 3 div \hoejde\space mul){B}
   \pnode(!0 \hoejde\space){C}
   \pnode(!\bredde\space 2 div \hoejde\space){D}
   \pnode(!\bredde\space 2 div 2 3 div \hoejde\space mul){E}
   \pnode(!\bredde\space 2 div 0){F}
   \rput(!\bredde\space 2 div \bredde\space 8 div sub
         2 3 div \hoejde\space mul \bredde\space 8 div sub){\small{$A$}}
   \rput(!\bredde\space 2 div \bredde\space 8 div sub
         2 3 div \hoejde\space mul \bredde\space 8 div add){\small{$B$}}
   \rput(!\bredde\space 8 div
         \hoejde\space \bredde\space 8 div sub){\small{$C$}}
   \rput(!\bredde\space 8 div \bredde\space 8 div){\small{$D$}}
   \multido{\iC=0+1}{\faktorA}{\psline[linestyle=dashed,linecolor=blue]%
     (0,\iC)(!\bredde\space 2 div \iC)}
   \multido{\iD=0+1}{\faktorC}{\psline[linestyle=dashed,linecolor=blue]%
     (\iD,0)(\iD,\hoejde\space)}
   \pspolygon[linewidth=1.25pt](A)(C)(D)(F)
   \psline[linewidth=1.25pt](B)(E)
   \psline[linewidth=2pt,linecolor=red](F)(B)(D)
  \end{pspicture}
 \subcaption{Efter omrokeringen.}
\end{subfigure}}
\caption{Figur~$\figur$ i figurf{\o}lgen.}
\end{figure}

\end{document}
and got this:
centeredfigures.png
centeredfigures.png (13.16 KiB) Viewed 5181 times
Regards
site moderator & package author
User avatar
svend_tveskaeg
Posts: 478
Joined: Sun Jul 12, 2009 5:31 am

Re: Figures not centered

Post by svend_tveskaeg »

You are right!

Thank you, Clemens.
``In the game of chess, you can never let your adversary see your pieces.''
-- Zapp Brannigan, Futurama (season 1, episode 4)
User avatar
svend_tveskaeg
Posts: 478
Joined: Sun Jul 12, 2009 5:31 am

Figures not centered

Post by svend_tveskaeg »

Here is an updated version of the MWE, in case someone would like to use the code:

Code: Select all

\documentclass[a4paper]{article}

\usepackage[hmargin=2.4cm,vmargin=3cm]{geometry}
\usepackage{subcaption}
\usepackage{auto-pst-pdf,pstricks-add}
\usepackage{expl3}

\ExplSyntaxOn
 \cs_new_eq:NN
  \calculate
 \fp_eval:n
\ExplSyntaxOff

\newcommand*{\betegn}[3]{%
  \rput(!#1 4 div \figur\space mul #2 4 div \figur\space mul){\small{$#3$}}
}

\begin{document}

\begin{figure}[htbp]
% Figure number.
\def\figur{2}
% Constants.
\def\hoejde{\calculate{3*\figur}}
\def\bredde{\calculate{2*\figur}}
\def\faktorA{\calculate{\hoejde+1}}
\def\faktorB{\calculate{\bredde+1}}
\def\faktorC{\calculate{\hoejde-1}}
\def\faktorD{\calculate{\figur-1}}
\def\skalering{\calculate{2.5/\figur}}
\centering
\psset{
 unit=\skalering
}
\begin{subfigure}{0.58\textwidth}
 \centering
  \begin{pspicture}(\bredde,\hoejde)
   \pnode(!\figur\space 0){A}
   \pnode(!0 \bredde\space){B}
   \pnode(!\figur\space \hoejde\space){C}
   \pnode(!\bredde\space \bredde\space){D}
   \betegn{3}{7}{A}
   \betegn{3}{9}{B}
   \betegn{5}{9}{C}
   \betegn{5}{7}{D}
  \psset{
   linestyle=dashed,
   linecolor=blue
  }
   \multido{\iA=0+1}{\faktorA}{\psline(0,\iA)(\bredde\space,\iA)}
   \multido{\iB=0+1}{\faktorB}{\psline(\iB,0)(\iB,\hoejde\space)}
  \psset{
   linewidth=1.25pt,
   linestyle=solid,
   linecolor=black
  }
   \psline(A)(C)
   \psline(B)(D)
   \pspolygon[linewidth=2pt,linecolor=red](A)(B)(C)(D)
  \end{pspicture}
 \subcaption{Before the rearrangement.}
\end{subfigure}
\begin{subfigure}{0.38\textwidth}
 \centering
  \begin{pspicture}(\figur,\hoejde)
   \pnode(0,0){A}
   \pnode(!0 \bredde\space){B}
   \pnode(!0 \hoejde\space){C}
   \pnode(!\figur\space \hoejde\space){D}
   \pnode(!\figur\space \bredde\space){E}
   \pnode(!\figur\space 0){F}
   \betegn{3}{7}{A}
   \betegn{3}{9}{B}
   \betegn{1}{11}{C}
   \betegn{1}{1}{D}
  \psset{
   linestyle=dashed,
   linecolor=blue
  }
   \multido{\iC=1+1}{\faktorC}{\psline(0,\iC)(\figur\space,\iC)}
   \multido{\iD=1+1}{\faktorD}{\psline(\iD,0)(\iD,\hoejde\space)}
  \psset{
   linewidth=1.25pt,
   linestyle=solid,
   linecolor=black
  }
   \pspolygon(A)(C)(D)(F)
   \psline(B)(E)
   \psline[linewidth=2pt,linecolor=red](F)(B)(D)
  \end{pspicture}
 \subcaption{After the rearrangement.}
\end{subfigure}
\caption{Figure~$\figur$.}
\end{figure}

\end{document}
All you have to do is change the value of \figur.

The document can be compiled with pdflatex -shell-escape filename.tex.
``In the game of chess, you can never let your adversary see your pieces.''
-- Zapp Brannigan, Futurama (season 1, episode 4)
Post Reply