%%
%% This is file `xebaposter.cls'
%%
%% Copyright © 2015-2022 by Seiied-Mohammad-Javad Razavian <javadr@gmail.com>
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
%% of this license or (at your option) any later version.
%% The latest version of this license is in
%%  http://www.latex-project.org/lppl.txt
%% and version 1.3 or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
%%
%% This work has the LPPL maintenance status `maintained'.
%%
%% This work is “author-maintained” (as per LPPL maintenance status)
%% by Seiied-Mohammad-Javad Razavian.
%% The Current Maintainer of this work is Seiied-Mohammad-Javad Razavian
%%
%% A relatively comfortable latex class to produce posters with a grid based
%% layout. It comes with a number of combinable styles and is (maybe only for
%% the writer) easy to extend, as all the graphics is based on pgf.
%%
%%
%% Copyright (C) 2007-2011 Brian Amberg
%% Copyright (C) 2011      Reinhold Kainhofer <reinhold@kainhofer.com>
%% Copyright (C) 2015-2022      Seiied-Mohammad-Javad Razavian <javadr@gmail.com>
%%
\ProvidesClass{xebaposter}[2022/06/08 v2.53 xebaposter class]
\NeedsTeXFormat{LaTeX2e}[1995/06/01]
\LoadClass{article}
\typeout{baposter: Brian Amberg, 2007, 2008, 2009, 2010, 2011 | http://www.brian-amberg.de/uni/poster/}
\typeout{baposter: Reinhold Kainhofer, 2011 | http://reinhold.kainhofer.com/}
\typeout{xebaposter: Seiied-Mohammad-Javad Razavian, 2015-2016 | https://github.com/javadr/xebaposter/}
%
%% Define lengths only once on inclusion, such that we can make multiple posters
\newlength{\xebaposter@basepaperwidth}%
\newlength{\xebaposter@basepaperheight}%
\newlength{\xebaposter@basemargin}%
\newlength{\xebaposter@finalpaperwidth}%
\newlength{\xebaposter@finalpaperheight}%
\newlength{\xebaposter@finalmargin}%
\newlength{\headerheight}%
\newlength{\colwidth}%
\newlength{\colheight}%
\newlength{\xebaposter@@colspacing}%
\newlength{\xebaposter@box@@cornerradius}%
\newlength{\xebaposter@box@@boxheaderheight}%
\newlength{\xebaposter@box@@boxpadding}%
\newlength{\boxstartx}%
\newlength{\boxstarty}%
\newlength{\boxwidth}%
\newlength{\boxheight}%
\newlength{\xebaposter@titleimage@left@width}%
\newlength{\xebaposter@titleimage@right@width}%
\newlength{\xebaposter@titleimage@textwidth}%
\newbox\xebaposter@box@content%
\newbox\xebaposter@titleimage@left%
\newbox\xebaposter@titleimage@title%
\newbox\xebaposter@titleimage@right%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Packages
%-------------------------------------------------------------------------------
% The only ``weird'' dependency of this package is pgf. All the rest should be
% installed on any decent system.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\typeout{Use Packages}%
\RequirePackage{xkeyval}%
\RequirePackage{calc}%
\RequirePackage[cmyk]{xcolor}%
\RequirePackage{ifxetex}
%\ifxetex
%    \def\pdftexversion{140}%
%    \def\pgfsysdriver{pgfsys-dvipdfm.def}%
%\fi
\RequirePackage{tikz}%
\RequirePackage{pgf}%
%\makeatletter
%\def\pgfsys@papersize#1#2{%
%  \pdfpageheight#2\relax%
%  \pdfpagewidth#1\relax}
%\makeatother
\RequirePackage{ifthen}%
\RequirePackage[T1]{fontenc}%
%\RequirePackage{biditools}
%\RequirePackage[l2tabu, orthodox]{nag}%
\usetikzlibrary{decorations}%
\usetikzlibrary{fadings}%
\usetikzlibrary{snakes}%
\usetikzlibrary{calc}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Settings
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Choose a smaller value for larger fonts
\newcommand{\xebaposter@fontscale}{0.292}%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Zoom
%-------------------------------------------------------------------------------
% We scale the page from fontscale * papersize up to papersize
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
%% Paper sizes
\newif\if@landscape%
\newif\if@geometryKnowsThisSize%
\DeclareOptionX{landscape}{\@landscapetrue}%
\DeclareOptionX{portrait}{}%
%
\newcommand{\xebaposter@setfinalpapersize}[2]{%
\if@geometryKnowsThisSize%
  \setlength{\xebaposter@finalpaperwidth}{#1}%
  \setlength{\xebaposter@finalpaperheight}{#2}%
\else%
\if@landscape%
% Transpose length, if geometry does not handle the papersize based on the key
  \setlength{\xebaposter@finalpaperwidth}{#2}%
  \setlength{\xebaposter@finalpaperheight}{#1}%
\else%
  \setlength{\xebaposter@finalpaperwidth}{#1}%
  \setlength{\xebaposter@finalpaperheight}{#2}%
\fi%
\fi%
}%
%
% Default paperwidth and paperheight = a0paper
\DeclareOptionX{paperwidth}[841mm]{\setlength{\xebaposter@finalpaperwidth}{#1}}%
\DeclareOptionX{paperheight}[1189mm]{\setlength{\xebaposter@finalpaperheight}{#1}}%
\xebaposter@setfinalpapersize{841mm}{1189mm}
\DeclareOptionX{archA}         {                           \xebaposter@setfinalpapersize{9in}{12in}}%
\DeclareOptionX{archB}         {                           \xebaposter@setfinalpapersize{12in}{18in}}%
\DeclareOptionX{archC}         {                           \xebaposter@setfinalpapersize{18in}{24in}}%
\DeclareOptionX{archD}         {                           \xebaposter@setfinalpapersize{24in}{36in}}%
\DeclareOptionX{archE}         {                           \xebaposter@setfinalpapersize{36in}{48in}}%
\DeclareOptionX{archE1}        {                           \xebaposter@setfinalpapersize{30in}{42in}}%
\DeclareOptionX{archE2}        {                           \xebaposter@setfinalpapersize{26in}{38in}}%
\DeclareOptionX{archE3}        {                           \xebaposter@setfinalpapersize{27in}{39in}}%
\DeclareOptionX{a0paper}       {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{841mm}{1189mm}}%g
\DeclareOptionX{a1paper}       {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{594mm}{841mm}}%g
\DeclareOptionX{a2paper}       {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{420mm}{594mm}}%g
\DeclareOptionX{a3paper}       {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{297mm}{420mm}}%g
\DeclareOptionX{a4paper}       {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{210mm}{297mm}}%g
\DeclareOptionX{a5paper}       {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{148mm}{210mm}}%g
\DeclareOptionX{a6paper}       {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{105mm}{148mm}}%g
\DeclareOptionX{b0paper}       {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{1000mm}{1414mm}}%g
\DeclareOptionX{b1paper}       {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{707mm}{1000mm}}%g
\DeclareOptionX{b2paper}       {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{500mm}{707mm}}%g
\DeclareOptionX{b3paper}       {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{353mm}{500mm}}%g
\DeclareOptionX{b4paper}       {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{250mm}{353mm}}%g
\DeclareOptionX{b5paper}       {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{176mm}{250mm}}%g
\DeclareOptionX{b6paper}       {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{125mm}{176mm}}%g
\DeclareOptionX{ansiapaper}    {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{8.5in}{11in}}%
\DeclareOptionX{ansibpaper}    {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{11in}{17in}}%
\DeclareOptionX{ansicpaper}    {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{17in}{22in}}%
\DeclareOptionX{ansidpaper}    {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{22in}{34in}}%
\DeclareOptionX{ansiepaper}    {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{34in}{44in}}%
\DeclareOptionX{letterpaper}   {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{8.5in}{11in}}%
\DeclareOptionX{legalpaper}    {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{8.5in}{14in}}%
\DeclareOptionX{executivepaper}{\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{7.25in}{10.5in}}%
\DeclareOptionX{screen}        {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{225mm}{180mm}}%g
%
% Margin
\setlength{\xebaposter@finalmargin}{1.5cm}%
\DeclareOptionX{fontscale}[0.292]{\renewcommand{\xebaposter@fontscale}{#1}}%
\DeclareOptionX{margin}   [1.5cm]{\setlength{\xebaposter@finalmargin}{#1}}%
%
% move text/poster body to the right (or to the left if negative)
\newlength{\xebaposter@movebody}%
\setlength{\xebaposter@movebody}{0cm}%
\DeclareOptionX{movebody}[0cm]{\setlength{\xebaposter@movebody}{#1}}%
%
%
\newif\if@debug%
\DeclareOptionX{debug}{\@debugtrue}%
%% Will be passed on to other packages (xcolor and geometry), still we don't want unused warnings
\DeclareOptionX{table}{}%
\DeclareOptionX{showframe}{}%
%
\newif\if@xebaposter@persian%
\newif\if@xebaposter@latin%
\DeclareOptionX{persian}{\@xebaposter@persiantrue}%
\DeclareOptionX{latin}{\@xebaposter@latintrue}%
%
%\ExecuteOptionsX{
%    portrait,
%    a0paper,
%}
%
\ProcessOptionsX%
%
\if@debug%
\newcommand{\debug}[1]{\typeout{#1}}%
\else%
\newcommand{\debug}[1]{}%
\fi%
%
%%% when user didn't set persian/latin option, if he/she uses xepersian the default will be persian, otherwise default will be latin.
\if@xebaposter@latin%
    \relax%
\else%
    \if@xebaposter@persian%
        \relax%
    \else%
        \AtBeginDocument{\@ifpackageloaded{xepersian}{\@xebaposter@persiantrue}{}}%
    \fi%
\fi%
%
\setlength{\xebaposter@basepaperwidth} {\xebaposter@fontscale\xebaposter@finalpaperwidth}%
\setlength{\xebaposter@basepaperheight}{\xebaposter@fontscale\xebaposter@finalpaperheight}%
\setlength{\xebaposter@basemargin}     {\xebaposter@fontscale\xebaposter@finalmargin}%
\newlength{\xebaposter@basemarginright}%
\setlength{\xebaposter@basemarginright}{\xebaposter@basemargin}%
\addtolength{\xebaposter@basemarginright}{-\xebaposter@fontscale\xebaposter@movebody}%
\newlength{\xebaposter@basemarginleft}%
\setlength{\xebaposter@basemarginleft}{\xebaposter@basemargin}%
\addtolength{\xebaposter@basemarginleft}{\xebaposter@fontscale\xebaposter@movebody}%
%
\typeout{Paperwidth=\the\xebaposter@finalpaperwidth}%
\typeout{Paperheight=\the\xebaposter@finalpaperheight}%
\typeout{BasePaperwidth=\the\xebaposter@basepaperwidth}%
\typeout{BasePaperheight=\the\xebaposter@basepaperheight}%
\RequirePackage[%
   paperwidth=\xebaposter@basepaperwidth,%
   paperheight=\xebaposter@basepaperheight,%
   tmargin=\xebaposter@basemargin,%
   bmargin=\xebaposter@basemargin,%
   lmargin=\xebaposter@basemarginleft,%
   rmargin=\xebaposter@basemarginright,%
   ]{geometry}%
%
\RequirePackage{pgfpages}%
\if@landscape%
\if@geometryKnowsThisSize%
\pgfpagesuselayout{resize to}[physical paper width=\xebaposter@finalpaperheight,physical paper height=\xebaposter@finalpaperwidth]%
\else%
\pgfpagesuselayout{resize to}[physical paper width=\xebaposter@finalpaperwidth,physical paper height=\xebaposter@finalpaperheight]%
\fi%
\else%
\pgfpagesuselayout{resize to}[physical paper width=\xebaposter@finalpaperwidth,physical paper height=\xebaposter@finalpaperheight]%
\fi%
%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  Default functions for borders/backgrounds
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%% These functions will all be redefined from the actual option values. In
%% particular, they will be set to \xebaposter@optionname@optionvalue, which
%% should do the actual work / setting for that particular optionvalue.
%
\newcommand{\xebaposterPosterDrawBackground}[2]{}% % Draw poster background
%
\newcommand{\xebaposterBoxGetShape}{}%             % Returns path of text box shape
\newcommand{\xebaposterBoxDrawBackground}[2]{}%    % Draw bg of boxes
\newcommand{\xebaposterBoxDrawBorder}[1]{}%        % Draw border of individual boxes
%
\newcommand{\xebaposterHeaderGetShape}{}%          % Returns path of text box shape
\newcommand{\xebaposterHeaderSetShade}[3]{}%       % Set bg style for box headers
\newcommand{\xebaposterHeaderDrawBackground}[3]{}% % Draw background of box header
\newcommand{\xebaposterHeaderDrawBorder}[1]{}%     % Draw border of box header
\newcommand{\xebaposterHeaderDrawText}[1]{}%       % Draw text inside box header
%
\newcommand{\@@previousbox}{notset}%             % stores the previously processed box for below=auto
%
% Function to set a user-defined background
\newcommand{\xebaposter@backgroundCmd}{\error{No background command defined. Use \background{...} to define background}}%
\newcommand{\background}[1]{\renewcommand{\xebaposter@backgroundCmd}{#1}}%
%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Handle poster and box options
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
\debug{Handling keys}%
%
%%
%% POSTER OPTIONS
%%
%% Store all poster options in variables of the form \xebaposter@option
%% choose-keys also store the index in \xebaposter@optionnr
%% choose-keys typically also assign a function
\definecolor{xebaposter@silver}{cmyk}{0,0,0,0.7}%
\define@boolkey[ba]{poster}[xebaposter@]{grid}                 [false]       {}%
\define@boolkey[ba]{poster}[xebaposter@]{eyecatcher}           [true]        {}%
\define@cmdkey [ba]{poster}[xebaposter@]{headerheight}         [0.1\textheight]{}%
\define@cmdkey [ba]{poster}[xebaposter@]{columns}              [{}]          {}%
\define@cmdkey [ba]{poster}[xebaposter@]{colspacing}           [1em]         {}%
\define@cmdkey [ba]{poster}[xebaposter@]{bgColorOne}           [xebaposter@silver]{}%
\define@cmdkey [ba]{poster}[xebaposter@]{bgColorTwo}           [green]       {}%
%
% background can be one of: shadeLR, shadeTB, plain, user, none
\define@choicekey*+[ba]{poster}{background}%
    [\xebaposter@background\xebaposter@backgroundnr]%
    {shadeLR, shadeTB, plain, user, none} [plain] {%
  \debug{Poster background: \xebaposter@background}%
  \renewcommand{\xebaposterPosterDrawBackground}[2]{%
      \csname xebaposter@background@\xebaposter@background\endcsname{##1}{##2}}%
}{%
  \PackageWarning{xebaposter}{Unknown background `\xebaposter@background' (use
      shadeLR, shadeTB, plain, none, or user). If user is used, you also
      have to define \background{...}.}%
  \renewcommand{\xebaposterPosterDrawBackground}[2]{\xebaposter@background@none{##1}{##2}}%
}%
%
%
%%
%%  BOX OPTIONS
%%
\define@cmdkey[ba]{posterbox}[xebaposter@box@]{cornerradius}          [1em]         {}%
\define@cmdkey[ba]{posterbox}[xebaposter@box@]{boxheaderheight}       [2em]         {}%
\define@cmdkey[ba]{posterbox}[xebaposter@box@]{boxpadding}            [0.5em]       {}%
%
%
% textborder can be one of: none, bars, coils, triangles, rectangle, rounded,
% roundedleft, roundedsmall, faded; UNIMPLEMENTED: roundedright
\edef\xebaposter@box@textborder@validvalues{none,bars,coils,triangles,rectangle,rounded,roundedleft,roundedsmall,faded}%
\define@choicekey*+[ba]{posterbox}{textborder}%
    [\xebaposter@box@textborder\xebaposter@box@textbordernr]%
    {none,bars,coils,triangles,rectangle,rounded,roundedleft,roundedright,roundedsmall,faded} [rectangle] {%
  \debug{Text border: \xebaposter@box@textborder}%
  \renewcommand{\xebaposterBoxGetShape}{%
      \csname xebaposter@box@boxshape@\xebaposter@box@textborder\endcsname}%
  \renewcommand{\xebaposterBoxDrawBorder}[1]{%
      \csname xebaposter@box@drawborder@\xebaposter@box@textborder\endcsname{##1}}%
}{%
  \PackageWarning{xebaposter}{Unknown text-border style `\xebaposter@box@textborder'.
      Edit your file to choose a valid option (\xebaposter@box@textborder@validvalues).}%
  \renewcommand{\xebaposterBoxGetShape}{\xebaposter@boxshape@rectangle}%
  \renewcommand{\xebaposterBoxDrawBorder}[1]{\xebaposter@drawborder@rectangle{##1}}%
}%
%
% boxshade can be one of: shadelr, shaderl, shadetb, plain, none
\define@choicekey*+[ba]{posterbox}{boxshade}%
    [\xebaposter@box@boxshade\xebaposter@box@boxshadenr]%
    {shadelr,shaderl,shadetb,plain,none} [none] {%
  \debug{Box shade: \xebaposter@box@boxshade}%
  \renewcommand{\xebaposterBoxDrawBackground}[2]{%
      \csname xebaposter@box@drawbackground@\xebaposter@box@boxshade\endcsname{##1}{##2}}%
}{%
  \PackageWarning{xebaposter}{Unknown boxshade style `\xebaposter@boxshade'.
      Edit your file to choose a valid option.}%
  \renewcommand{\xebaposterBoxDrawBackground}[2]{\xebaposter@box@drawbackground@none{##1}{##2}}%
}%
%
% headershade can be one of: shadelr,shaderl, shadetb, shadetbinverse, plain
\define@choicekey*+[ba]{posterbox}{headershade}%
    [\xebaposter@box@headershade\xebaposter@box@headershadenr]%
    {shadelr,shaderl, shadetb, shadetbinverse, plain} [shadelr] {%
  \debug{Header shade: \xebaposter@box@headershade}%
  \renewcommand{\xebaposterHeaderSetShade}[3]{%
      \csname xebaposter@box@headershade@\xebaposter@box@headershade\endcsname{##1}{##2}{##3}}
}{%
  \PackageWarning{xebaposter}{Unknown headershade style `\xebaposter@box@headershade'.
      Edit your file to choose a valid option.}%
  \renewcommand{\xebaposterHeaderSetShade}[3]{\xebaposter@box@headershade@none{##1}{##2}{##3}}%
}%
%
% headershape can be one of: rectangle, rounded, smallrounded, roundedleft, roundedright
\define@choicekey*+[ba]{posterbox}{headershape}%
    [\xebaposter@box@headershape\xebaposter@box@headershapenr]%
    {rectangle,rounded,smallrounded,roundedleft,roundedright} [roundedright] {%
  \debug{Header shape: \xebaposter@box@headershape}%
  \renewcommand{\xebaposterHeaderGetShape}{%
      \csname xebaposter@box@headershape@\xebaposter@box@headershape\endcsname}%
  \renewcommand{\xebaposterHeaderDrawText}[1]{%
      \csname xebaposter@box@headerdrawtext@\xebaposter@box@headershape\endcsname{##1}}%
  \renewcommand{\xebaposterHeaderDrawBorder}[1]{%
      \csname xebaposter@box@headerdrawborder@\xebaposter@box@headershape\endcsname{##1}}%
}{%
  \PackageWarning{xebaposter}{Unknown headershape style `\xebaposter@headershape'.
      Edit your file to choose a valid option.}%
  \renewcommand{\xebaposterHeaderGetShape}{\xebaposter@box@headershape@rectangle}%
  \renewcommand{\xebaposterHeaderDrawText}[1]{\xebaposter@box@headerdrawtext@rectangle{##1}}%
  \renewcommand{\xebaposterHeaderDrawBorder}[1]{\xebaposter@box@headerdrawborder@rectangle{##1}}%
}%
%
% headerborder can be one of: open, closed, none
\define@choicekey*+[ba]{posterbox}{headerborder}%
    [\xebaposter@box@headerborder\xebaposter@box@headerbordernr]%
    {open,closed,none} [open] {%
  \debug{Header border: \xebaposter@box@headerborder}%
%   \renewcommand{\xebaposterHeaderBorder}{
%       \csname xebaposter@headerborder@\xebaposter@box@headerborder\endcsname}
}{%
  \PackageWarning{xebaposter}{Unknown headerborder style `\xebaposter@headerborder'.
      Edit your file to choose a valid option.}%
%   \renewcommand{\xebaposterHeaderBorder}{\xebaposter@box@headerborder@rectangle}
}%
%
%
\define@cmdkey[ba]{posterbox}[xebaposter@box@]{borderColor}           [yellow]      {}%
\define@cmdkey[ba]{posterbox}[xebaposter@box@]{headerColorOne}        [red]         {}%
\define@cmdkey[ba]{posterbox}[xebaposter@box@]{headerColorTwo}        [brown]       {}%
\define@cmdkey[ba]{posterbox}[xebaposter@box@]{headerFontColor}       [black]       {}%
\define@cmdkey[ba]{posterbox}[xebaposter@box@]{boxColorOne}           [magenta]     {}%
\define@cmdkey[ba]{posterbox}[xebaposter@box@]{boxColorTwo}           [cyan]        {}%
\define@cmdkey[ba]{posterbox}[xebaposter@box@]{headerfont}            [\scshape\Large]   {}%
\define@cmdkey[ba]{posterbox}[xebaposter@box@]{textfont}              [{}]          {}%
%
\define@cmdkey[ba]{posterbox}[xebaposter@box@]{linewidth}             [2pt]         {}%
%
\define@cmdkey[ba]{posterbox}[xebaposter@box@]{below}  [notset]{}%
\define@cmdkey[ba]{posterbox}[xebaposter@box@]{above}  [notset]{}%
\define@cmdkey[ba]{posterbox}[xebaposter@box@]{aligned}[notset]{}%
\define@cmdkey[ba]{posterbox}[xebaposter@box@]{bottomaligned}[notset]{}%
\define@cmdkey[ba]{posterbox}[xebaposter@box@]{column} [0]     {}%
\define@cmdkey[ba]{posterbox}[xebaposter@box@]{row}    [0]     {}%
\define@cmdkey[ba]{posterbox}[xebaposter@box@]{span}   [1]     {}%
\define@cmdkey[ba]{posterbox}[xebaposter@box@]{height} [auto]  {}%
\define@cmdkey[ba]{posterbox}[xebaposter@box@]{name}   [noname]{}%
%
% Set some default values, the poster and posterbox environments can override:
\setkeys[ba]{poster}{%
  % Debug grid
  grid=false,%
  % Is there an eyecatcher image
  eyecatcher=true,%
  columns={},%
  % Colours
  bgColorOne=xebaposter@silver,%
  bgColorTwo=green,%
  %
  colspacing=1em,%
  headerheight=0.1\textheight,%
  background=shadeLR,%
}{}%
\setkeys[ba]{posterbox}{%
  % Position
  column=0,row=0,span=1,%
  below=notset,above=notset,%
  bottomaligned=notset,%
  aligned=notset,%
  height=auto,%
  % Name
  name=noname,%
  % Box design: border:
  linewidth=2pt,%
  borderColor=yellow,%
  cornerradius=1em,%
  % text box:
  textfont={},%
  boxshade=plain,%
  boxColorOne=magenta,%
  boxColorTwo=cyan,%
  textborder=faded,%
  boxpadding=0.5em,%
  % header
  headerfont=\scshape\Large,% or headerfont=\color{white}\textsf\textbf
  headerFontColor=black,%
  headerColorOne=red,%
  headerColorTwo=brown,%
  headershape=rectangle,%
  headershade=shadelr,%
  headerborder=none,%
  boxheaderheight=2em,%
}{}%
%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Background options and functions (one function for each possible value)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
\newcommand{\xebaposter@background@shaderl}[2]{%
  \debug{xebaposter: Using shade right left background.}%
    \begin{tikzpicture}[remember picture,overlay]%
    \shade [shading=axis,left color=#2,right color=#1] (current page.north east)%
           rectangle(current page.south west);%
  \end{tikzpicture}%
}%
\newcommand{\xebaposter@background@shadelr}[2]{%
  \debug{xebaposter: Using shade left right background.}%
    \begin{tikzpicture}[remember picture,overlay]%
    \shade [shading=axis,left color=#1,right color=#2] (current page.north west)%
           rectangle(current page.south east);%
  \end{tikzpicture}%
}%
\newcommand{\xebaposter@background@shadetb}[2]{%
  \debug{xebaposter: Using shade top to bottom background.}%
    \begin{tikzpicture}[remember picture,overlay]%
    \shade [shading=axis,top color=#1,bottom color=#2] (current page.north west)%
           rectangle(current page.south east);%
  \end{tikzpicture}%
}%
\newcommand{\xebaposter@background@plain}[2]{%
  \debug{xebaposter: Using plain background.}%
  \begin{tikzpicture}[remember picture,overlay]%
    \fill [#1] {(current page.north west) rectangle (current page.south east)};%
  \end{tikzpicture}%
}%
\newcommand{\xebaposter@background@user}[2]{%
  \debug{xebaposter: Using user background.}%
    {\xebaposter@backgroundCmd}%
}%
\newcommand{\xebaposter@background@none}[2]{%
  \debug{xebaposter: Using no background.}%
}%
%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Return shape path of text box (depending on the box shape)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
\newcommand{\xebaposter@box@boxshape@none}{\xebaposter@box@boxshape@rectangle}%
\newcommand{\xebaposter@box@boxshape@bars}{%
  (\xebaposter@box@name tnw) -- (\xebaposter@box@name sw) %
  (\xebaposter@box@name se) -- (\xebaposter@box@name tne)%
}%
\newcommand{\xebaposter@box@boxshape@coils}{\xebaposter@box@boxshape@bars}%
\newcommand{\xebaposter@box@boxshape@triangles}{\xebaposter@box@boxshape@bars}%
\newcommand{\xebaposter@box@boxshape@rectangle}{%
  (\xebaposter@box@name tnw) -- (\xebaposter@box@name sw) -- %
  (\xebaposter@box@name se) -- (\xebaposter@box@name tne)%
}%
\newcommand{\xebaposter@box@boxshape@faded}{%
  (\xebaposter@box@name tnw) -- (\xebaposter@box@name sw) %
  (\xebaposter@box@name tne) -- (\xebaposter@box@name se)%
  }%
\newcommand{\xebaposter@box@boxshape@rounded}{%
  [rc] \xebaposter@box@boxshape@rectangle%
}%
\newcommand{\xebaposter@box@boxshape@roundedsmall}{%
  [src] \xebaposter@box@boxshape@rectangle%
}%
\newcommand{\xebaposter@box@boxshape@roundedleft}{%
  (\xebaposter@box@name tnw) {[rc]-- (\xebaposter@box@name sw)} -- %
  (\xebaposter@box@name se) -- (\xebaposter@box@name tne)%
}%
\newcommand{\xebaposter@box@boxshape@roundedright}{%
  (\xebaposter@box@name tnw) -- (\xebaposter@box@name sw) {[rc]-- %
  (\xebaposter@box@name se)} -- (\xebaposter@box@name tne)%
}%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Draw box background (one function for each possible value)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% These functions take no arguments
\newcommand{\xebaposter@box@drawbackground@none}[2]{%
  \tikzstyle{box colors}=[]%
}%
\newcommand{\xebaposter@box@drawbackground@plain}[2]{%
  \tikzstyle{box colors}=[fill=#1]%
  \fill[box colors] \xebaposterBoxGetShape;%
}%
\newcommand{\xebaposter@box@drawbackground@shadelr}[2]{%
  \tikzstyle{box colors}=[shading=axis, left color=#1, right color=#2]%
  \fill[box colors] \xebaposterBoxGetShape;%
}%
\newcommand{\xebaposter@box@drawbackground@shaderl}[2]{%
  \tikzstyle{box colors}=[shading=axis, left color=#2, right color=#1]%
  \fill[box colors] \xebaposterBoxGetShape;%
}%
\newcommand{\xebaposter@box@drawbackground@shadetb}[2]{%
  \tikzstyle{box colors}=[shading=axis, top color=#1, bottom color=#2]%
  \fill[box colors] \xebaposterBoxGetShape;%
}%
%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Draw box border
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% These functions take two arguments: borderColor
\newcommand{\xebaposter@box@drawborder@none}[1]{}%
\newcommand{\xebaposter@box@drawborder@bars}[1]{%
  \draw[color=#1] \xebaposterBoxGetShape;%
}%
\newcommand{\xebaposter@box@drawborder@coils}[1]{%
  \draw[color=#1,segment amplitude=0.35em,segment length=0.4em,snake=coil] \xebaposterBoxGetShape;%
}%
\newcommand{\xebaposter@box@drawborder@triangles}[1]{%
  \draw[color=#1,segment amplitude=0.2em,segment length=0.4em,snake=triangles] \xebaposterBoxGetShape;%
}%
\newcommand{\xebaposter@box@drawborder@rectangle}[1]{%
  \draw[color=#1] \xebaposterBoxGetShape;%
}%
\newcommand{\xebaposter@box@drawborder@rounded}[1]{%
  \draw[color=#1] \xebaposterBoxGetShape;%
}%
\newcommand{\xebaposter@box@drawborder@roundedleft}[1]{%
  \draw[color=#1] \xebaposterBoxGetShape;%
}%
\newcommand{\xebaposter@box@drawborder@roundedright}[1]{%
  \draw[color=#1] \xebaposterBoxGetShape;%
}%
\newcommand{\xebaposter@box@drawborder@faded}[1]{%
  % This is the right way to do it, but it does not work with evince, and has problems during printing, so instead we do
  %\draw[color=#1,path fading=south] \xebaposterBoxGetShape;%
  % this
  \foreach \x in {0,1,...,90} \draw[color=#1!\x] ($(\xebaposter@box@name tnw)!{(100-\x)/100}!(\xebaposter@box@name sw)$) -- ($(\xebaposter@box@name tnw)!{(100-(\x+10))/100}!(\xebaposter@box@name sw)$);%
  \foreach \x in {0,1,...,90} \draw[color=#1!\x] ($(\xebaposter@box@name tne)!{(100-\x)/100}!(\xebaposter@box@name se)$) -- ($(\xebaposter@box@name tne)!{(100-(\x+10))/100}!(\xebaposter@box@name se)$);%
}%
\newcommand{\xebaposter@box@drawborder@roundedsmall}[1]{%
  \draw[color=#1] \xebaposterBoxGetShape;%
}%
%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Return shape path of text box (depending on the box shape)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% These functions take no arguments
% TODO: For headerborder==none, use (\xebaposter@box@name outer tnw) instead!
\newcommand{\xebaposter@box@headershape@rectangle}{%
  (\xebaposter@box@name tnw) -- (\xebaposter@box@name nw) -- %
  (\xebaposter@box@name ne) -- (\xebaposter@box@name tne)%
}%
\newcommand{\xebaposter@box@headershape@smallrounded}{%
  (\xebaposter@box@name tnw) {[src] -- (\xebaposter@box@name nw) -- %
  (\xebaposter@box@name ne)} -- (\xebaposter@box@name tne)%
}%
\newcommand{\xebaposter@box@headershape@roundedright}{%
  (\xebaposter@box@name tnw) -- (\xebaposter@box@name nw) {[rc] -- %
  (\xebaposter@box@name ne)} -- (\xebaposter@box@name tne)%
}%
\newcommand{\xebaposter@box@headershape@roundedleft}{%
  (\xebaposter@box@name tnw) {[rc]-- (\xebaposter@box@name nw)} -- %
  (\xebaposter@box@name ne) -- (\xebaposter@box@name tne)%
}%
\newcommand{\xebaposter@box@headershape@rounded}{%
  (\xebaposter@box@name tnw) {[rc] -- (\xebaposter@box@name nw) -- %
  (\xebaposter@box@name ne) } -- (\xebaposter@box@name tne)%
}%
%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Header text drawing (one function for each possible value of headershape)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% These functions take one argument: the header text
\newcommand{\xebaposter@box@headerdrawtext@rectangle}[1]{%
\if@xebaposter@persian
  \path (\xebaposter@box@name ne) +(0em,-0.5\xebaposter@box@@boxheaderheight) node[anchor=east,inner sep=0.4em] {#1};%
\else
  \path (\xebaposter@box@name nw) +(0em,-0.5\xebaposter@box@@boxheaderheight) node[anchor=west,inner sep=0.4em] {#1};%
\fi
}%
\newcommand{\xebaposter@box@headerdrawtext@smallrounded}[1]{%
  \path (\xebaposter@box@name nw) +(0.5\boxwidth,-0.5\xebaposter@box@@boxheaderheight) node[anchor=center] {#1};%
}%
\newcommand{\xebaposter@box@headerdrawtext@roundedright}[1]{%
\if@xebaposter@persian
  \path (\xebaposter@box@name ne) +(0em,-0.5\xebaposter@box@@boxheaderheight)%
        node[anchor=east,inner sep=0.4em,text depth=0.4em] {#1};%
\else
  \path (\xebaposter@box@name nw) +(0em,-0.5\xebaposter@box@@boxheaderheight)%
        node[anchor=west,inner sep=0.4em,text depth=0.4em] {#1};%
\fi
}%
\newcommand{\xebaposter@box@headerdrawtext@roundedleft}[1]{%
\if@xebaposter@persian
  \path (\xebaposter@box@name ne) +(0em,-0.5\xebaposter@box@@boxheaderheight)%
        node[anchor=east,inner sep=0.4em] {#1};%
\else
  \path (\xebaposter@box@name nw) +(0em,-0.5\xebaposter@box@@boxheaderheight)%
        node[anchor=west,inner sep=0.4em] {#1};%
\fi
}%
\newcommand{\xebaposter@box@headerdrawtext@rounded}[1]{%
    \path (\xebaposter@box@name nw) +(0.5\boxwidth,-0.5\xebaposter@box@@boxheaderheight) node[anchor=center] {#1};%
}%
%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Header shade options and functions (one function for each possible value)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% These functions take two arguments: headerColorOne, headerColorTwo and borderColor
\newcommand{\xebaposter@box@headershade@shadelr}[3]{%
    \debug{Header-Shade: Shade Left - Right}%
    \tikzstyle{header colors}=[%
      color=#3,%
      shading=axis,%
      left color=#1,%
      right color=#2%
    ]%
}%
\newcommand{\xebaposter@box@headershade@shaderl}[3]{%
    \debug{Header-Shade: Shade Right - Left}%
    \tikzstyle{header colors}=[%
      color=#3,%
      shading=axis,%
      left color=#2,%
      right color=#1%
    ]%
}%
\newcommand{\xebaposter@box@headershade@shadetb}[3]{%
    \debug{Header-Shade: Shade Top - Bottom}%
    \tikzstyle{header colors}=[%
      color=#3,%
      shading=axis,%
      top color=#1,%
      bottom color=#2%
    ]%
}%
\newcommand{\xebaposter@box@headershade@shadetbinverse}[3]{%
    \debug{Header-Shade: Shade Top - Bottom - Inverse }%
    \tikzstyle{header colors}=[%
      color=#3,%
%      top color=#1!75!#2,%
%      bottom color=#2!100!#1,%
      top color=#2,%
      bottom color=#1,%
      shading angle=20%
    ]%
    \colorlet{xebaposterHeaderFontColor}{white}%
}%
\newcommand{\xebaposter@box@headershade@plain}[3]{%
    \debug{Header-Shade: Plain}%
    \tikzstyle{header colors}=[%
      color=#3,%
      fill=#1%
    ]%
}%
\newcommand{\xebaposter@box@headershade@none}[3]{%
    \debug{Header-Shade: none}%
    \tikzstyle{header colors}=[]%
}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% The main poster environment
%%% \begin{xebaposter}{settings}{Eye Catcher}{Title}{Author}{University Logo}
%%%-----------------------------------------------------------------------------
%%% The settings are
%%%   - grid=true,[false]:Show grid to help with alignment
%%%   - colspacing=0.7em: Column spacing
%%%   - columns=4:        number of columns (default 4 in landscape and 3 in portrait format) (maximum number is 6)
%%%   - color=[orange]:   xcolor color definition used as the main color of the poster
%%%   - colortwo=[white]: The other color for gradient based layouts
%%%   - textborder=none,bars,coils,triangles,rectangle,rounded,roundedsmall,roundedleft,roundedright,[faded]
%%%                       The style of the box around the text area
%%%   - headerborder=none,closed,open
%%%                       No extra border around box header, full border around box header or border that is open below.
%%%   - headershape=rectangle,rounded,roundedleft,roundedright
%%%                       Shape of the box-header region
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newenvironment{poster}[5]{% BEGIN poster begin
  \thispagestyle{empty}% Suppress Page Number
  \debug{Poster Starts}%
  % This setkeys call parses all provided options and depending on the option
  % value, assigns different handler functions to the \xebaposter(Box|Header)*
  % functions. Once that is done, we don't have to care about particular
  % values for border, shading, etc. All we have to do is call the
  % handler functions and let them do their job.
  % This also allows the user to override the poster-wide defaults on a per-box
  % basis.
  \setkeys[ba]{posterbox,poster}{#1}%
%
  % TODO: Move all those assignments to the key macros!
  % Parse Keys%
  \colorlet{bgColorOne}{\xebaposter@bgColorOne}%
  \colorlet{bgColorTwo}{\xebaposter@bgColorTwo}%
%
  %% Boxes%
  \setlength{\headerheight}{\xebaposter@headerheight}%
  \setlength{\colheight}{\textheight-\xebaposter@headerheight}%
  \renewcommand{\@@previousbox}{notset}%
%
  \debug{Format}%
  % Set default for columns if unset (4 for landscape, 3 for portrait)
  \ifthenelse{\equal{\xebaposter@columns}{}}{%
    \renewcommand{\xebaposter@columns}{\if@landscape4\else3\fi}%
  }{}%
%
  \debug{Columns: \xebaposter@columns}%
  \setlength{\xebaposter@@colspacing}{\xebaposter@colspacing}%
  \setlength{\colwidth}{\textwidth}%
  \addtolength{\colwidth}{\xebaposter@@colspacing*(1-\xebaposter@columns)}%
  \ifcase\xebaposter@columns\relax%
    \error{You need to have at least one column!}%
  \or % 1
    \setlength{\colwidth}{\colwidth}%
  \or % 2
    \setlength{\colwidth}{0.5\colwidth}%
  \or % 3
    \setlength{\colwidth}{0.3333333333333\colwidth}%
  \or % 4
    \setlength{\colwidth}{0.25\colwidth}%
  \or % 5
    \setlength{\colwidth}{0.2\colwidth}%
  \or % 6
    \setlength{\colwidth}{0.16666666666\colwidth}%
  \else % >6
    \error{You do not want so many columns}%
  \fi%
%
  \newcommand{\xebaposter@reference}{north west}%
%
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  % A box with a header and some content. The basic unit of 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 inbetween, you %
  % have to specify the top and bottom boxes before you specify the middle %
  % box.%
  %%
  % below=  name of other node%
  % above=  name of other node%
  % aligned=name of other node%
  % bottomaligned=name of other node%
  % column= [0]     %
  % row=    [0]     %
  % span=   [1]     %
  % height= <size in percent of column height>,[auto]%
  % name=   [noname]%
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
  % Backward-compatibility definition (\headerbox command uses posterbox env):
  \newcommand{\headerbox}[3]{%
    \begin{posterbox}[##2]{##1}%
      ##3%
    \end{posterbox}%
  }%
%
  \newenvironment{posterbox}[2][]{%
    \debug{Poster box options: ##1}%
    % Override the poster-wide defaults on a per-box basis
    \setkeys[ba]{posterbox}{##1}%
%
\if@xebaposter@persian
    \def\xebaposter@box@title{\rl{##2}}%
\else
    \def\xebaposter@box@title{{##2}}%
\fi
%
    \colorlet{borderColor}{\xebaposter@box@borderColor}%
    \colorlet{headerColorOne}{\xebaposter@box@headerColorOne}%
    \colorlet{headerColorTwo}{\xebaposter@box@headerColorTwo}%
    \colorlet{headerFontColor}{\xebaposter@box@headerFontColor}%
    \colorlet{boxColorOne}{\xebaposter@box@boxColorOne}%
    \colorlet{boxColorTwo}{\xebaposter@box@boxColorTwo}%
%
    \setlength{\xebaposter@box@@cornerradius}{\xebaposter@box@cornerradius}%
    \setlength{\xebaposter@box@@boxheaderheight}{\xebaposter@box@boxheaderheight}%
    \setlength{\xebaposter@box@@boxpadding}{\xebaposter@box@boxpadding}%
%
%
    %% The columns is always given absolute
\if@xebaposter@persian
    % boxstartx = (columns-column-span) * colwidth + (columns-column-span) * colspacing
%    \setlength{\boxstartx}{(\xebaposter@columns+-\xebaposter@box@column+-\xebaposter@box@span)*\colwidth+(\xebaposter@columns+-\xebaposter@box@column+-\xebaposter@box@span)*\xebaposter@@colspacing}%
   \setlength{\boxstartx}{\xebaposter@columns\colwidth}%
    \addtolength{\boxstartx}{-\xebaposter@box@column\colwidth}%
    \addtolength{\boxstartx}{-\xebaposter@box@span\colwidth}%
    \addtolength{\boxstartx}{\xebaposter@columns\xebaposter@@colspacing}%
    \addtolength{\boxstartx}{-\xebaposter@box@column\xebaposter@@colspacing}%
    \addtolength{\boxstartx}{-\xebaposter@box@span\xebaposter@@colspacing}%
\else
    % boxstartx = column * colwidth + column * colspacing
    \setlength{\boxstartx}{(\colwidth+\xebaposter@@colspacing)*\xebaposter@box@column}%
\fi
%
    %% The width is gvien absolute
    % Box Width = span * colwidth + (span-1) * colspacing
    \setlength{\boxwidth}{\xebaposter@box@span\colwidth}%
    \addtolength{\boxwidth}{\xebaposter@@colspacing*(\xebaposter@box@span-1)}%
%
    %% Measure the content of the box%
    \setbox\xebaposter@box@content=\hbox\bgroup%
      \begin{pgfinterruptpicture}%
        \begin{minipage}[t]{\boxwidth-\xebaposter@box@@boxpadding*2}%
\if@xebaposter@persian%
        \persian%
\fi
          \xebaposter@box@textfont\bgroup%
  }% End of posterbox preamble
  %%% HERE COME THE ACTUAL CONTENTS OF THE POSTERBOX ENVIRONMENT
  {% posterbox handling after contents (i.e. drawing everything)
          \egroup%
        \end{minipage}%
      \end{pgfinterruptpicture}%
    \egroup%
    \setlength{\boxheight}{\ht\xebaposter@box@content}%
    \addtolength{\boxheight}{\dp\xebaposter@box@content}%
    \addtolength{\boxheight}{\xebaposter@box@@boxheaderheight}% Header%
    \addtolength{\boxheight}{2\xebaposter@box@@boxpadding}% Inner Sep
%
    \ifthenelse{\equal{\xebaposter@box@height}{bottom}}{%
    }{\ifthenelse{\equal{\xebaposter@box@height}{auto}}{%
    }{ % Neither auto nor bottom%
      \setlength{\boxheight}{\xebaposter@box@height\colheight}%
    }}%
%
    %% Determine the box position%
    \debug{Setting Coordinates}%
    \debug{Upper Right}%
    \debug{\xebaposter@box@name}%
%
    %%% Upper Right Corner%
    % if below=auto, set it to the previous box
    % TODO: We should generalize this to the previous box of the used column,
    %       currently we use the previous box, which might be in a different column
    \ifthenelse{\equal{\xebaposter@box@below}{auto}}{%
        \edef\xebaposter@box@below{\@@previousbox}%
        \debug{Box \xebaposter@box@name  has below=auto, placing it below box \xebaposter@box@below.}%
    }{}%
    \xdef\@@previousbox{\xebaposter@box@name}%
%
    \ifthenelse{\not\equal{\xebaposter@box@below}{notset}}{%
      %% Below%
      \debug{Below}%
      \path[shape=coordinate] (\boxstartx,0pt |- \xebaposter@box@below se) ++(0pt,-\xebaposter@@colspacing) coordinate(\xebaposter@box@name nw);%
    }{%
      \ifthenelse{\not\equal{\xebaposter@box@aligned}{notset}}{%
        %% Aligned%
        \debug{Aligned: \xebaposter@box@aligned}%
        \path[shape=coordinate] (\boxstartx,0pt |- \xebaposter@box@aligned nw) coordinate(\xebaposter@box@name nw);%
      }{%
        %% Fixed%
        \debug{Fixed}%
        \setlength{\boxstarty}{\xebaposter@box@row\colheight}%
        \path[shape=coordinate] (\boxstartx,\colheight-\boxstarty) coordinate (\xebaposter@box@name nw);%
    }}%
%
    %% Lower Left Corner%
    \debug{Lower Left}%
    \ifthenelse{\equal{\xebaposter@box@above}{bottom}}{%
      %% Above = Bottom%
      \debug{Above bottom}%
      \ifthenelse{\equal{\xebaposter@box@below}{notset} \and \equal{\xebaposter@box@aligned}{notset}}{%
      \path[shape=coordinate] (\boxstartx,\boxheight) coordinate (\xebaposter@box@name nw);%
      }{}%
      \path[shape=coordinate] (\boxstartx+\boxwidth,0pt) coordinate (\xebaposter@box@name se);%
      }{\ifthenelse{\not \equal{\xebaposter@box@bottomaligned}{notset}}{%
        \path[shape=coordinate] (\boxstartx+\boxwidth,0pt |- \xebaposter@box@bottomaligned se) coordinate (\xebaposter@box@name se);%
      }{{\ifthenelse{\not \equal{\xebaposter@box@above}{notset}}{%
        %% Above = Node%
        \path[shape=coordinate] (\boxstartx+\boxwidth,0pt |- \xebaposter@box@above nw)  +(0pt,\xebaposter@@colspacing) coordinate(\xebaposter@box@name se);%
      }{%
        %% Above = notset%
        \debug{Above=not set}%
        \ifthenelse{\equal{\xebaposter@box@height}{bottom}}{%
          %% height=bottom%
          \debug{height=bottom}%
          \path[shape=coordinate] (\boxstartx+\boxwidth,0pt) coordinate(\xebaposter@box@name se);%
        }{ %% height=auto or fixed%
          \debug{height=auto or fixed}%
          \path[shape=coordinate] (\xebaposter@box@name nw) ++(\boxwidth,-\boxheight) coordinate (\xebaposter@box@name se);%
	  }}}}}%
%
        %
    % Set coordinates relative to nw,se%
    \debug{Fixing Coordinates}%
    \path[shape=coordinate]%
      (\xebaposter@box@name nw) +(0pt,-\xebaposter@box@@boxheaderheight) coordinate(\xebaposter@box@name tnw)%
      (\xebaposter@box@name nw |- \xebaposter@box@name se) coordinate(\xebaposter@box@name sw)%
      (\xebaposter@box@name se |- \xebaposter@box@name nw) coordinate(\xebaposter@box@name ne)%
      (\xebaposter@box@name ne) +(0pt,-\xebaposter@box@@boxheaderheight) coordinate(\xebaposter@box@name tne)%
%
      (\xebaposter@box@name nw)  +(-0.025em,0pt) coordinate(\xebaposter@box@name outer nw)%
      (\xebaposter@box@name tnw) +(-0.025em,0pt) coordinate(\xebaposter@box@name outer tnw)%
      (\xebaposter@box@name sw)  +(-0.025em,0pt) coordinate(\xebaposter@box@name outer sw)%
%
      (\xebaposter@box@name ne)  +( 0.025em,0pt) coordinate(\xebaposter@box@name outer ne)%
      (\xebaposter@box@name tne) +( 0.025em,0pt) coordinate(\xebaposter@box@name outer tne)%
      (\xebaposter@box@name se)  +( 0.025em,0pt) coordinate(\xebaposter@box@name outer se);%
%
      %% Setting the bg colors of the box header
      \xebaposterHeaderSetShade{headerColorOne}{headerColorTwo}{borderColor}%
%
      \tikzstyle{rc}=[rounded corners=\xebaposter@box@@cornerradius]%
      \tikzstyle{src}=[rounded corners=0.5em]%
%
    %% Now that everything is set up, draw the actual box, with bg and header
    \begin{scope}[line width=\xebaposter@box@linewidth]%
      %% Header%
      \debug{Header}%
      \debug{Header-Shape: \xebaposter@box@headershape, header-border: \xebaposter@box@headerborder (\xebaposter@box@headerbordernr)}%
      % TODO: Also turn this last ifcase construct into a handler function
      %       We only need to determine (fill|shade)(draw|)...
      \xebaposterHeaderDrawBackground{bgColorOne}{bgColorTwo}{borderColor}%
      \xebaposterHeaderDrawBorder{}%{borderColor}%
      \ifcase\xebaposter@box@headerbordernr\relax%
        % open
        \ifthenelse{\equal{\xebaposter@box@headershade}{plain}}{%
          \filldraw  [style=header colors] \xebaposterHeaderGetShape;%
        }{%
          \shadedraw [style=header colors] \xebaposterHeaderGetShape;%
        }%
      \or%
        % closed
        \ifthenelse{\equal{\xebaposter@box@headershade}{plain}}{%
          \filldraw  [style=header colors] \xebaposterHeaderGetShape -- cycle;%
        }{%
          \shadedraw [style=header colors] \xebaposterHeaderGetShape -- cycle;%
        }%
      \or%
        % none
        \ifthenelse{\equal{\xebaposter@box@headershade}{plain}}{%
          \fill      [style=header colors] \xebaposterHeaderGetShape;%
        }{%
          \shade     [style=header colors] \xebaposterHeaderGetShape;%
        }%
      \fi%
      %
      %% Draw the text inside the box header:
    %%% %%% %%% %%% %%% buggy part because of color!! %%% %%% %%% %%% %%% %%%
      \xebaposterHeaderDrawText{\hbox{{\color{headerFontColor}\xebaposter@box@headerfont%
      {\xebaposter@box@title}}}}%
      %
      %% Text borders (border around boxes)
      \debug{Poster boxes}%
      % First set box shade
      \xebaposterBoxDrawBackground{boxColorOne}{boxColorTwo}%
      \xebaposterBoxDrawBorder{borderColor}%
      %%
      %% Text Box%
      \debug{Drawing Text}%
      \path (\xebaposter@box@name tnw) node(text) [anchor=north west,%
            outer sep=-0.000em,text width=\boxwidth-2\xebaposter@box@@boxpadding,inner sep=\xebaposter@box@@boxpadding,%
            text justified] {{\usebox{\xebaposter@box@content}}};%
    \end{scope}%
    %
    % Finally store the box name as the previous box for the next call
%     \xdef\@@previousbox{\xebaposter@box@name}%
  }% END of posterbox definition
%
  %% Poster Background%
  \xebaposterPosterDrawBackground{bgColorOne}{bgColorTwo}%
  %% Poster header/title
  \hspace{-1.5em}%
  \begin{tikzpicture}[inner sep=0pt,outer sep=0pt,line width=0.05em,align=right]%
    \useasboundingbox (0em,0em) rectangle(\textwidth,\textheight);%
    \path[shape=coordinate]%
      (0pt,\colheight) coordinate(north west) (\textwidth,\colheight) coordinate(north east)%
      (0pt,0pt) coordinate(south west) (\textwidth,0pt) coordinate(south east);%
%
    \ifxebaposter@eyecatcher% Has eye catcher
      \debug{Eyecatcher found!}%
      \setbox\xebaposter@titleimage@left=\hbox{#2}%
    \else% Has no eye catcher%
      \setbox\xebaposter@titleimage@left=\hbox{}%
    \fi%
    \setlength{\xebaposter@titleimage@left@width}{\wd\xebaposter@titleimage@left}%
    \setbox\xebaposter@titleimage@right=\hbox{#5}%
    \setlength{\xebaposter@titleimage@right@width}{\wd\xebaposter@titleimage@right}%
    \setlength{\xebaposter@titleimage@textwidth}{\textwidth}%
    \addtolength{\xebaposter@titleimage@textwidth}{-\xebaposter@titleimage@left@width}%
    \addtolength{\xebaposter@titleimage@textwidth}{-\xebaposter@titleimage@right@width}%
%
    \debug{#3}%
    %
    %
    %      % Draw Header%
    \draw (north west) +(0em,1em+0.5\headerheight) node(image)[anchor=west]  {{\usebox{%
\if@xebaposter@persian%
    \xebaposter@titleimage@right%
\else%
    \xebaposter@titleimage@left%
\fi}}};%
    \draw (north east) +(0em,1em+0.5\headerheight) node(logo) [anchor=east]   {{\usebox{%
\if@xebaposter@persian%
    \xebaposter@titleimage@left%
\else%
    \xebaposter@titleimage@right%
\fi}}};%
    %
    \ifxebaposter@eyecatcher% Has eye catcher%
      \draw (image.east) node(title)[anchor=west,text width=\xebaposter@titleimage@textwidth]{%
        \begin{minipage}{\xebaposter@titleimage@textwidth}%
          \begin{center}%
\if@xebaposter@persian%
          \textbf{\Huge\rl{#3}}\\%
          {\Large\rl{#4}}%
\else%
          \textbf{\Huge #3}\\%
          {\Large #4}%
\fi%
          \end{center}%
        \end{minipage}%
      };%
    \else% Has no eye catcher
      \draw (image.east) node(title)[anchor=west]  {{\begin{minipage}{\xebaposter@titleimage@textwidth}
\if@xebaposter@persian%
      \persian{\bfseries\Huge\rl{#3}}\\{\Large\rl{#4}}%
\else%
      {\bfseries\Huge #3}\\{\Large #4}%
\fi%
      \end{minipage}}};%
    \fi%
  }% END poster begin
% The body
  {% BEGIN poster end
    % The end, draw gridlines if neccesary
    \ifxebaposter@grid%
      \newdimen{\gridpos}%
      \pgfmathsetmacro{\z}{\xebaposter@columns-1}%
      \foreach \y in {0,...,\z}%
      {%
        \setlength{\gridpos}{\y\colwidth+\y\xebaposter@@colspacing}%
        \draw[draw=green,draw opacity=0.7] (\gridpos,0pt)  -- (\gridpos,\colheight)%
            (\gridpos+\colwidth,0pt)  -- (\gridpos+\colwidth,\colheight);%
      }%
      % Horizontal lines, every 0.1:
      %% Explicitly list all percentages, because with {0.0, 0.1, ..., 1.0} we
      %% get rounding errors in the displayed numbers!
      \foreach \y in {0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0}%
        {\if@xebaposter@persian%
            \draw[draw=green,draw opacity=0.7]  (\textwidth,\colheight-\y\colheight) --%
                (0pt,\colheight-\y\colheight) node[anchor=east] {\y};%
        \else%
            \draw[draw=green,draw opacity=0.7] (0pt,\colheight-\y\colheight)  --%
                (\textwidth,\colheight-\y\colheight) node[anchor=west] {\y};%
        \fi|}%
    \fi%
  \end{tikzpicture}%
%  \xkvview{}
  \par%
  }% END poster end
