7

I am making a poster in LaTeX. I am using the minipages enviroment to split the poster into three columns. I have some boxes which spread over multiple columns. The difficulty arises when I try to have two boxes which spread over 2 different seperate columns.

How can I arrange this layout using minipages? The issue is getting the bottom arrangement to work.

Desired output

enter image description here

MWE

\documentclass[final,a0,portrait]{a0poster}
\usepackage{quantum,natbib,graphicx,placeins,rotating,bm,amsbsy,amsmath,mathrsfs,caption,mathtools}
\usepackage[svgnames]{xcolor}
\usepackage{siunitx,float}
\usepackage{tcolorbox} 
\usepackage[font=Large,justification=centering]{caption}
\setlength{\bibsep}{0.0pt}   
\usepackage{float}
\floatplacement{figure}{H}
\floatplacement{table}{H}
\floatplacement{tabular}{H}
\usepackage{mdframed}
\usepackage[T1]{fontenc}
\usepackage{newtxtext,newtxmath}
\usepackage[scaled]{helvet}

\begin{document}

\pagecolor{Blue!50}

\Large

\tcbset{center title, left=35pt,right=35pt,top=35pt,bottom=35pt, colback=white,colframe=DarkBlue!80,title=\textcolor{White}, toptitle=0.5cm, bottomtitle=0.5cm}

\begin{minipage}[t]{0.19\linewidth}

\end{minipage}
%
\hspace{0.27cm}
\begin{minipage}[t]{0.62\linewidth}
\begin{center}
\color{White}
\Huge \color{White}  \textbf{\textsf{Title here}} \\
\huge \textsf{Name1\textsuperscript{*} and Name2$^\dagger$}\\  \Large
\emph{Department} \\ \textsuperscript{*}    \textit{email1}, $^\dagger$\textit{email2}
\end{center}
\end{minipage}
%a
\hspace{0.27cm}
\begin{minipage}[t]{0.15\linewidth}

\end{minipage}


\vspace{1cm}


%Top Left
\noindent
\begin{minipage}[b]{0.64\linewidth}
\begin{tcolorbox}[title=\textcolor{White}{\huge\textsf{Title 1}}]
Some text
\vspace{5cm}
\end{tcolorbox}
\vspace{20pt}
%
%
\begin{minipage}[b]{0.485\linewidth}
\begin{tcolorbox}[top=10pt, bottom=10pt, title=\textcolor{White}{\huge\textsf{Title 2}}]
a
\vspace{60.8cm}

a
\end{tcolorbox} % THIS IS THE END OF THE QFI TEXT BOX

\end{minipage} 
%
%
\quad
\begin{minipage}[b]{0.50\linewidth}
\begin{tcolorbox}[top=10pt, bottom=10pt, title=\textcolor{White}{\huge\textsf{Title 3}}]
\vspace{0.8cm}
\noindent
Some text
\vspace{25.5cm}
\end{tcolorbox}

\begin{tcolorbox}[top=10pt, bottom=10pt, title=\textcolor{White}{\huge\textsf{Title 4}}]
\vspace{0.8cm}
\noindent
Some text
\vspace{30cm}
\end{tcolorbox}

\end{minipage} 


\end{minipage} 
%
\quad
\begin{minipage}[b]{0.32\linewidth}
\begin{tcolorbox}[title=\textcolor{White}{\huge\textsf{Title 5}}]
Some text
\vspace{65cm}
a
\end{tcolorbox}
\begin{tcolorbox}[top=40pt,bottom=40pt,title=\textcolor{White}{\huge\textsf{Title 6}}]
Some text
\vspace{5cm}

\end{tcolorbox}

\end{minipage}


\begin{minipage}[b]{0.35\linewidth} 
\end{minipage}

\begin{minipage}[b]{0.61\linewidth} 
\begin{tcolorbox}[top=40pt, bottom=40pt, title=\textcolor{White}{\huge\textsf{References}}]

\vspace{10cm}

\end{tcolorbox}
\end{minipage}


\end{document}
  • 1
    Your image link didn't work, upload it directly to your post instead (there's a button for image upload right above the text input field, keyboard shortcut Ctrl + G). – Torbjørn T. Jun 19 '17 at 13:22
  • 1
    Can you show us a minimal working example showing the minipages you have, so we have something to fix ? – marsupilam Jun 19 '17 at 13:30
  • 1
    @marsupilam, how can I show it? Even the MWE is quite long. – Sid Jun 19 '17 at 13:50
  • @JohnKormylo, the image was wrong. It has been updated. – Sid Jun 19 '17 at 14:14
4

Motivated by the answers of @Ignasi, I made a new library poster for tcolorbox which is part of the package starting with version 4.10 (2017/07/06).

The main purpose of the new library is (of course) the support of tcolorbox placement for posters in a similar manner as baposter does.

I took the two examples of @Ignasi with his definition of a private posterbox style and modified them for the new library. I hope you will find that the new library allows to write the code much shorter and better readable:

\documentclass[12pt]{article}
\usepackage[most,poster]{tcolorbox}
\usepackage{lipsum}

\tcbset{
    posterbox/.style={%
        enhanced jigsaw, size=fbox,
        colback=#1!10, colframe=#1!10!black,
        colbacktitle=#1!70!black
    }
}

\begin{document}

\begin{tcbposter}[
  coverage={spread,phantom=\thispagestyle{empty}},
  poster={columns=3,rows=8,spacing=3mm,showframe=false},
  fontsize=12pt,
]

\posterbox[title=Top left box,posterbox=blue]{name=A,column=1,below=top,span=2,rowspan=1}
{This is some other text}

\posterbox[title=Bottom right box,posterbox=blue]{name=B,column=2,above=bottom,span=2,rowspan=1}
{This is some other text}

\posterbox[title=Bottom left box,posterbox=green]{name=C,column=1,between=A and bottom}
{This is some other text}

\posterbox[title=Central box,posterbox=red]{name=D,column=2,between=A and B}
{This is some other text}

\posterbox[title=Top right box,posterbox=green]{name=E,column=3,between=top and B}
{This is some other text}

\end{tcbposter}

\end{document}

enter image description here

The second example uses a breakable box. Note that this box can be used directly with the new library:

\documentclass[12pt]{article}
\usepackage[most,poster]{tcolorbox}
\usepackage{lipsum}

\tcbset{
    posterbox/.style={%
        enhanced jigsaw, size=fbox,
        colback=#1!10, colframe=#1!10!black,
        colbacktitle=#1!70!black
    }
}

\begin{document}

\begin{tcbposter}[
  coverage={spread,phantom=\thispagestyle{empty}},
  poster={columns=3,rows=8,spacing=3mm,showframe=false},
  fontsize=12pt,
]

\posterbox[title=Top left box,posterbox=blue]{name=A,column=1,below=top,span=2,rowspan=1}
{This is some other text}

\posterbox[title=Bottom right box,posterbox=blue]{name=B,column=2,above=bottom,span=2,rowspan=1}
{This is some other text}

\posterbox[title=Some long text,posterbox=orange]{name=C,
  sequence=1 between A and bottom then
           2 between A and B then
           3 between top and B }
{\lipsum[1-5]}

\end{tcbposter}

\end{document}

enter image description here

6

The box dimensions are settable by way of

\def\Vgap{3pt}
\def\Hgap{3pt}
\def\VsizeA{4in}
\def\HsizeA{1.4in}
\def\VsizeB{0.5in}

as well as \fboxsep and \fboxrule. Note that the 3 \?size dimensions are the minipage dimensions, before \fboxsep and \fboxrule get applied.

The MWE.

\documentclass{a0poster}
\usepackage{stackengine}
\renewcommand\stackalignment{l}
\newcommand\fpage[3]{\unskip%
  \fbox{\begin{minipage}[b][#2][t]{#1}\LARGE #3\end{minipage}}\ignorespaces}
\def\Vgap{3pt}
\def\Hgap{3pt}
\def\VsizeA{4in}
\def\HsizeA{1.4in}
\def\VsizeB{0.5in}
% THE FOLLOWING ARE DERIVED
\def\HsizeB{2\dimexpr\HsizeA\relax+\dimexpr\Hgap\relax+2\fboxsep+2\fboxrule}
\def\VsizeC{%
  \dimexpr\VsizeA-\dimexpr\VsizeB\relax-\dimexpr\Vgap\relax-2\fboxsep-2\fboxrule\relax}
\def\doHgap{\unskip\hspace{\Hgap}\ignorespaces}
\def\HsizeC{\HsizeA}
\setstackgap{S}{\Vgap}
%
\begin{document}
\stackon{
 \fpage{\HsizeA}{\VsizeA}{A1}\doHgap
 \stackon{
   \fpage{\HsizeB}{\VsizeB}{B2}%
 }{%
   \fpage{\HsizeC}{\VsizeC}{C}\doHgap
   \smash{\fpage{\HsizeA}{\VsizeA}{A2}}%
 }%
}{
  \fpage{\HsizeB}{\VsizeB}{B1}}
\end{document}

enter image description here

Here with

\def\Vgap{5pt}
\def\Hgap{5pt}
\def\VsizeA{6in}
\def\HsizeA{1.4in}
\def\VsizeB{1.5in}

enter image description here

ADDENDUM

Here is a version without the \fboxes and with \lipsum fill

\documentclass{a0poster}
\usepackage{stackengine,lipsum}
\renewcommand\stackalignment{l}
\newcommand\fpage[3]{\unskip%
  \begin{minipage}[b][#2][t]{#1}\tiny#3\end{minipage}\ignorespaces}
\def\Vgap{8pt}
\def\Hgap{8pt}
\def\VsizeA{7.5in}
\def\HsizeA{2in}
\def\VsizeB{2in}
% THE FOLLOWING ARE DERIVED
\def\HsizeB{2\dimexpr\HsizeA\relax+\dimexpr\Hgap\relax}
\def\VsizeC{%
  \dimexpr\VsizeA-\dimexpr\VsizeB\relax-\dimexpr\Vgap\relax\relax}
\def\doHgap{\unskip\hspace{\Hgap}\ignorespaces}
\def\HsizeC{\HsizeA}
\setstackgap{S}{\Vgap}
%
\begin{document}
\stackon{
 \fpage{\HsizeA}{\VsizeA}{A1 \lipsum[1]}\doHgap
 \stackon{
   \fpage{\HsizeB}{\VsizeB}{B2 \lipsum[4]}%
 }{%
   \fpage{\HsizeC}{\VsizeC}{C \lipsum[3]}\doHgap
   \smash{\fpage{\HsizeA}{\VsizeA}{A2 \lipsum[5]}}%
 }%
}{
  \fpage{\HsizeB}{\VsizeB}{B1 \lipsum[4]}}
\end{document}

enter image description here

  • Awesome ! Can you show how us to not draw the minipages borders, and fill with lipsum ? – marsupilam Jun 19 '17 at 14:59
  • 1
    @marsupilam See my ADDENDUM. – Steven B. Segletes Jun 19 '17 at 15:08
  • Great answer. Just a few questions: since I am using \tcolorboxes, would I just place them where the contents are? Also how would you control the gap between each column? – Sid Jun 19 '17 at 15:21
  • 1
    @Sid The inter-column gap is set by \Hgap, defined in the preamble. I don't use tcolorbox, but I would presume you would get rid of the \tiny (or \LARGE) in my definition of \fpage and then pass the tcolorbox commands as the last argument to \fpage. – Steven B. Segletes Jun 19 '17 at 15:24
6

Following code uses TikZ nodes and positioning library to place these five boxes as desired. But in this case the node contents is formed by tcolorboxes with defined dimensions.

First, boxes width and height are defined (inspired by Steven B. Segletes answer):

\setlength{\Vgap}{8pt}
\setlength{\Hgap}{8pt}
\setlength{\HsizeA}{\dimexpr(\textwidth-2\Hgap)/3}
\setlength{\VsizeB}{\HsizeA} %<-- Fix this value

% THE FOLLOWING ARE DERIVED
\setlength{\VsizeA}{\dimexpr\textheight-\Vgap-\VsizeB}
\setlength{\HsizeB}{\dimexpr2\HsizeA+\Hgap}
\setlength{\VsizeC}{\dimexpr\VsizeA-\VsizeB-\Vgap}
\setlength{\HsizeC}{\HsizeA}

These lengths will be use to define three kind of boxes:

myboxA are the boxes for the external columns

\newtcolorbox{myboxA}[2][]{%
    posterbox=green,
    width=\HsizeA, height=\VsizeA, 
    title=#2, #1}

top and bottom boxes are of type myboxB

\newtcolorbox{myboxB}[2][]{%
    posterbox=blue,
    width=\HsizeB, height=\VsizeB, 
    title=#2, #1}

and finaly the central box which is of type myboxC

\newtcolorbox{myboxC}[2][]{%
    posterbox=red,
    width=\HsizeC, height=\VsizeC, 
    title=#2, #1}

These boxes are inserted as text of TikZ nodes with inner sep=0pt and outer sep=0pt (fixing seps to 0pt is important because otherwise the placement will fail)

\noindent\begin{tikzpicture}[every node/.style={outer sep=0pt, inner sep=0pt}]
\node (B1) {%
    \begin{myboxB}{Top left box}
        This is some other text
    \end{myboxB}};

\node[right= \Hgap of B1.north east, anchor=north west] (A2) {%
    \begin{myboxA}{Top right box}
        This is some other text
    \end{myboxA}};

...

The result will look like more or less like desired:

enter image description here

Previous solution assumes that all five boxes are independent but in case that the text should flow between them, magazine library from tcolorbox can help. As an example, suppose that all three columns should contain fragments of a certain text. In this case it's possible to define a box like:

\newtcolorbox{brokenbox}[2][]{%
    posterbox=orange,
    width=\HsizeA,
    breakable,
    break at=\VsizeA/\VsizeC/\VsizeA, 
    height fixed for=all,   
    reset box array,
    store to box array,
    title=#2,#1}

which will store its contents in several fragments that can be later on printed with useboxarray command. In final code you'll find:

\begin{brokenbox}{Some long text} 
\lipsum[1-2]
\end{brokenbox}

which defines the box, breaks it and store the fragments which are printed with

...
\node[right= \Hgap of B1.north east, anchor=north west] (A2) {\useboxarray{3}};

\node[below = \Vgap of B1.south west, anchor=north west] (A1) {\useboxarray{1}};
...

The result in this case is:

enter image description here

A similar result could be done with text flowing from top to bottom wide boxes.

The complete code is:

\documentclass{article}
\usepackage[most]{tcolorbox}
\usepackage{lipsum}
\usetikzlibrary{positioning}

\newlength\Vgap
\newlength\Hgap
\newlength\VsizeA
\newlength\VsizeB
\newlength\VsizeC
\newlength\HsizeA
\newlength\HsizeB
\newlength\HsizeC

\setlength{\Vgap}{8pt}
\setlength{\Hgap}{8pt}
\setlength{\HsizeA}{\dimexpr(\textwidth-2\Hgap)/3}
\setlength{\VsizeB}{\HsizeA} %<-- Fix this value

% THE FOLLOWING ARE DERIVED
\setlength{\VsizeA}{\dimexpr\textheight-\Vgap-\VsizeB}
\setlength{\HsizeB}{\dimexpr2\HsizeA+\Hgap}
\setlength{\VsizeC}{\dimexpr\VsizeA-\VsizeB-\Vgap}
\setlength{\HsizeC}{\HsizeA}

\tcbset{
    posterbox/.style={%
        enhanced jigsaw, size=fbox, 
        colback=#1!10, colframe=#1!10!black, 
        colbacktitle=#1!70!black
    }
}

\newtcolorbox{myboxA}[2][]{%
    posterbox=green,
    width=\HsizeA, height=\VsizeA, 
    title=#2, #1}

\newtcolorbox{myboxB}[2][]{%
    posterbox=blue,
    width=\HsizeB, height=\VsizeB, 
    title=#2, #1}

\newtcolorbox{myboxC}[2][]{%
    posterbox=red,
    width=\HsizeC, height=\VsizeC, 
    title=#2, #1}

\newtcolorbox{brokenbox}[2][]{%
    posterbox=orange,
    width=\HsizeA,
    breakable,
    break at=\VsizeA/\VsizeC/\VsizeA, 
    height fixed for=all,   
    reset box array,
    store to box array,
    title=#2,#1}

\begin{brokenbox}{Some long text} 
\lipsum[1-2]
\end{brokenbox}

\begin{document}

\noindent\begin{tikzpicture}[every node/.style={outer sep=0pt, inner sep=0pt}]
\node (B1) {%
    \begin{myboxB}{Top left box}
        This is some other text
    \end{myboxB}};

\node[right= \Hgap of B1.north east, anchor=north west] (A2) {%
    \begin{myboxA}{Top right box}
        This is some other text
    \end{myboxA}};

\node[below = \Vgap of B1.south west, anchor=north west] (A1) {%
    \begin{myboxA}{Bottom left box}
        This is some other text
    \end{myboxA}};

\node[right = \Hgap of A1.north east, anchor=north west] (C) {%
    \begin{myboxC}{Central box}
        This is some other text
    \end{myboxC}};

\node[below = \Vgap of C.south west, anchor=north west] (B2) {%
    \begin{myboxB}{Bottom rigth box}
        Some other text
    \end{myboxB}};
\end{tikzpicture}

\newpage

\noindent\begin{tikzpicture}[every node/.style={outer sep=0pt, inner sep=0pt}]
\node (B1) {\begin{myboxB}{Top left box}This is some other text\end{myboxB}};

\node[right= \Hgap of B1.north east, anchor=north west] (A2) {\useboxarray{3}};

\node[below = \Vgap of B1.south west, anchor=north west] (A1) {\useboxarray{1}};

\node[right = \Hgap of A1.north east, anchor=north west] (C) {\useboxarray{2}};

\node[below = \Vgap of C.south west, anchor=north west] (B2) {\begin{myboxB}[colback=red!20]{Bottom rigth box}Some other text\end{myboxB}};
\end{tikzpicture}

\end{document}

Note: My initial intention was to use a tcbraster to place the boxes but I couldn't and finally did it with TikZ. I'm open to suggestions or comments about this option.

  • I added a new answer based on the new poster library and your two examples. – Thomas F. Sturm Jul 6 '17 at 9:14
3

Another tool for posters which allow us to define complex layouts like this one is baposter (it's not on CTAN).

baposter define different kind of boxes which can be placed on a multicolumn and multirow structure. These boxes has a name which can be used for relative placement but also to define later declared boxes size.

For portrait posters the default column number is 3 (columns option define this number between 1 to 6). Then we can use

\headerbox{Top left}{name=topleft, column=0, row=0, span=2}{
    \lipsum[1]
}

to define the first box, which is placed on first column and first row but will span for 2 columns. Below this box we want another one which spans only one column but it covers all vertical space between the top box and poster's bottom:

\headerbox{Left Column}{name=leftcolumn, column=0, below=topleft, above=bottom}{
    \lipsum[2-4]
}

The use of below and above options in previous command forces the vertical size. If we only use below the box would be as large as needed but not enlarged to the bottom.

With previous examples is easy to understand following code and result:

\documentclass[portrait,final,a0paper,fontscale=0.277]{baposter}

\usepackage{lipsum}

\usepackage{lmodern}

\begin{document}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Here starts the poster
%%%---------------------------------------------------------------------------
%%% Format it to your taste with the options
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Define some colors

%%
\begin{poster}%
  % Poster Options
  {
  % Show grid to help with alignment
  grid=false,
  % Column spacing
  colspacing=1em,
  % Color style
  bgColorOne=white,
  bgColorTwo=white,
  borderColor=blue,
  headerColorOne=black,
  headerColorTwo=blue,
  headerFontColor=white,
  boxColorOne=white,
  boxColorTwo=blue,
  % Format of textbox
  textborder=roundedleft,
  % Format of text header
  eyecatcher=true,
  headerborder=closed,
  headerheight=0.1\textheight,
%  textfont=\sc, An example of changing the text font
  headershape=roundedright,
  headershade=shadelr,
  headerfont=\Large\bf\textsc, %Sans Serif
  textfont={\setlength{\parindent}{1.5em}},
  boxshade=plain,
%  background=shade-tb,
  background=plain,
  linewidth=2pt
  }
  % Eye Catcher
  {\includegraphics[height=5em]{example-image-a}} 
  % Title
  {\bf\textsc{My poster}\vspace{0.5em}}
  % Authors
  {\textsc{\{ xxx \}@xxx.xx}}
  % University logo
  {% The makebox allows the title to flow into the logo, this is a hack because of the L shaped logo.
    \includegraphics[height=5em]{example-image-b}
  }

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Now define the boxes that make up the poster
%%%---------------------------------------------------------------------------
%%% Each box has a name and can be placed absolutely or relatively.
%%% The only inconvenience is that you can only specify a relative position 
%%% towards an already declared box. So if you have a box attached to the 
%%% bottom, one to the top and a third one which should be in between, you 
%%% have to specify the top and bottom boxes before you specify the middle 
%%% box.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  \headerbox{Top left}{name=topleft, column=0, row=0, span=2}{
   \lipsum[1]
 }

  \headerbox{Left Column}{name=leftcolumn,column=0,below=topleft, above=bottom}{
   \lipsum[2-4]
  }

  \headerbox{Bottom right}{name=bottomright,column=1,span=2,above=bottom}{
    \lipsum[2]
  }

  \headerbox{Right column}{name=rightcolumn,column=2,row=0, above=bottomright}{
    \lipsum[3]
  }
  \headerbox{Central column}{name=centralcolumn model,column=1,below=topleft, above=bottomright}{
   \lipsum[5]
  }

\end{poster}

\end{document}

enter image description here

Compared with tcolorbox, baposter provides an easier placement system but box styles are far more limited.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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