1095 lines
48 KiB
TeX
1095 lines
48 KiB
TeX
%%
|
|
%% This is file `baposter.cls'
|
|
%%
|
|
%% 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.
|
|
%%
|
|
%% It is meant to be used with pdftex, but might also work with pslatex if you
|
|
%% are not interested in things like transparency.
|
|
%%
|
|
%% Copyright (C) 2007-2011 Brian Amberg
|
|
%% Copyright (C) 2011 Reinhold Kainhofer <reinhold@kainhofer.com>
|
|
%%
|
|
%% 29. September 2011:
|
|
%% - Finally fixed confusion with paper size handling and landscape. This required seperate handling of papersizes
|
|
%% known to the geometry package and other packages.
|
|
%% 26. September 2011:
|
|
%% - Reverted drawing of faded borders to manual method, as the current result does not work with evince,
|
|
%% and produced spurious colored boxes with okular and acroread.
|
|
%% - Added one more example due to popular request
|
|
%% 16. September 2011:
|
|
%% - Removed nag package, such that it compiles on older systems
|
|
%% - Added more examples
|
|
%% 15. September 2011:
|
|
%% - Merged fork by (rk) back into mainline, essentially taking over all the great improvements that Reinhold Kainhofer coded.
|
|
%% We call this version 2, as it breaks the interface in some small points. Essentially watch out for this:
|
|
%% - no/yes keys are now false/true
|
|
%% - the shade-lr etc. keys have the hypen removed, and are now called shadelr etc.
|
|
% - Added more examples, which are all adapted to work with the current version
|
|
%% 27. August 2011 (rk):
|
|
%% - Completely factored out all drawing commands to handler functions, assigned via choice keys
|
|
%% - Added cornerradius, boxheaderheight, boxpadding options
|
|
%% - Added missing roundedright
|
|
%% 26. August 2011 (rk):
|
|
%% - Turned headerbox cmd into posterbox environment (allows verbatim)
|
|
%% - pass several options to packages
|
|
%% - added debug cls option to reduce default output
|
|
%% - rewrote several loops and ifthenelse
|
|
%% - Use boolean and choice keys for all options
|
|
%% - Changed all choice options to set a global function to
|
|
%% \baposter@OPTION@OPTIONVALUE, which are a functions that execute the
|
|
%% option's setting (drawing routine, color setting for tikz, etc.)
|
|
%% - Add a5paper
|
|
%% 07. April 2011: Fixed paper size handling
|
|
%% - Fixed Paper Size handling, you can now specify all page sizes using paperwidth=, paperheight= class options.
|
|
%% - Added rudimentary documentation of the available keys.
|
|
%% 11. December 2010: Fixed "Empty Second Page" bug
|
|
%% - A second empty page was introduced when a document ended with
|
|
%% \end{poster}
|
|
%% \end{document}
|
|
%% This was fixed thanks to a suggestion by Martin Aulbach
|
|
%% - Added
|
|
%% \thispagestyle{empty}
|
|
%% to suppress page numbers, which became visible when the margins are large.
|
|
%% The underlying problem of page-size handling has not yet been solved.
|
|
%% 30. September 2010: Border Bugfixes
|
|
%% - Correct background color with textborder=rounded-small, Thanks to Ke Chen for the bugreport and patch
|
|
%% - Correctly draw rectangular text boxes, Thanks to abenkst for the bugreport and fix
|
|
%% 10. June 2010: Added option to set the number of columns
|
|
%% - added a class option to set the number of columns
|
|
%% - columns=5: sets the number of columns to 5, possible values are 1..6, default is 3 in portrait and 4 in landscape format
|
|
%% 29. April 2009: Incorporated Patches by Arne Henningsen
|
|
%% - added some class options
|
|
%% - a4shrink: shrink the paper to A4 size (for printing drafts or handouts)
|
|
%% - movebody=Xpt: move the text/poster body Xpt to the right
|
|
%% (or to the left if Xpt is negative),
|
|
%% e.g. for manually centering the poster on the page
|
|
%% - showframe: use the "showframe" option of the "geometry" package
|
|
%% - a0paper (default): set paper size to A0
|
|
%% - archE: set paper size to Arch E
|
|
%% - setting "background" can be "none" now (otherwise the "showframe"
|
|
%% option has no effect)
|
|
%% - the page number has been removed (it was mostly not visible before)
|
|
%% - the "margin=" option works now
|
|
%% 04. December 2008
|
|
%% - Mainly an update to the landscape example
|
|
%% 14. November 2008
|
|
%% - Actually center the title when eyecatcher is used.
|
|
%% 04. November 2008
|
|
%% - Fixed bug with eyecatcher not working.
|
|
%% 26. June 2008
|
|
%% - Fixed bug with plain background mode.
|
|
%% 14. June 2008
|
|
%% - Support for portrait/landscape switching.
|
|
%% - Some smaller bugfixes.
|
|
%% 01. June 2007
|
|
%% - First version released.
|
|
%%
|
|
%% Use this class with pdflatex
|
|
%%
|
|
%% I have confirmed that this package works with
|
|
%% - texlive 2007 and
|
|
%% - miktex 2.7
|
|
%%
|
|
%% It does not seem to work with
|
|
%% - miktex 2.2
|
|
%% - some old versions of tetex
|
|
%%
|
|
%%
|
|
%% TODO:
|
|
%% -) Rename backgrounds back to shaded-tb shade-lr
|
|
%% -) Rename textborder back to rounded-small (consistent naming needed!)
|
|
%% -) Rename headershade back to shade-lr, shade-tb, shade-tb-inverse
|
|
%% -) Rename headershape back to small-rounded
|
|
%% -) Option value consistency (small-rounded vs. rounded-small; missing ones)
|
|
%% -) Rename \baposterHeaderSetShade, \baposterHeaderDrawText to include @ and verb
|
|
%%
|
|
%%
|
|
%% Licence: GPL
|
|
\ProvidesClass{baposter}[2011/11/26 v2.0 baposter 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/}
|
|
|
|
%% Define lengths only once on inclusion, such that we can make multiple posters
|
|
\newlength{\baposter@basepaperwidth}
|
|
\newlength{\baposter@basepaperheight}
|
|
\newlength{\baposter@basemargin}
|
|
\newlength{\baposter@finalpaperwidth}
|
|
\newlength{\baposter@finalpaperheight}
|
|
\newlength{\baposter@finalmargin}
|
|
\newlength{\headerheight}%
|
|
\newlength{\colwidth}%
|
|
\newlength{\colheight}%
|
|
\newlength{\baposter@@colspacing}%
|
|
\newlength{\baposter@box@@cornerradius}%
|
|
\newlength{\baposter@box@@boxheaderheight}%
|
|
\newlength{\baposter@box@@boxpadding}%
|
|
\newlength{\boxstartx}%
|
|
\newlength{\boxstarty}%
|
|
\newlength{\boxwidth}%
|
|
\newlength{\boxheight}%
|
|
\newlength{\baposter@titleimage@left@width}%
|
|
\newlength{\baposter@titleimage@right@width}%
|
|
\newlength{\baposter@titleimage@textwidth}%
|
|
\newbox\baposter@box@content%
|
|
\newbox\baposter@titleimage@left%
|
|
\newbox\baposter@titleimage@title%
|
|
\newbox\baposter@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{xcolor}
|
|
\RequirePackage{tikz}
|
|
\RequirePackage{pgf}
|
|
\RequirePackage{ifthen}
|
|
\RequirePackage[T1]{fontenc}
|
|
%\RequirePackage[l2tabu, orthodox]{nag}
|
|
\usetikzlibrary{decorations}
|
|
\usetikzlibrary{fadings}
|
|
%%%\usetikzlibrary{snakes}
|
|
\usetikzlibrary{calc}
|
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% Settings
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
% Choose a smaller value for larger fonts
|
|
\newcommand{\baposter@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{\baposter@setfinalpapersize}[2]{%
|
|
\if@geometryKnowsThisSize
|
|
\setlength{\baposter@finalpaperwidth}{#1}%
|
|
\setlength{\baposter@finalpaperheight}{#2}%
|
|
\else
|
|
\if@landscape
|
|
% Transpose length, if geometry does not handle the papersize based on the key
|
|
\setlength{\baposter@finalpaperwidth}{#2}%
|
|
\setlength{\baposter@finalpaperheight}{#1}%
|
|
\else
|
|
\setlength{\baposter@finalpaperwidth}{#1}%
|
|
\setlength{\baposter@finalpaperheight}{#2}%
|
|
\fi
|
|
\fi
|
|
}
|
|
|
|
% Default paperwidth and paperheight = a0paper
|
|
\DeclareOptionX{paperwidth}[841mm]{\setlength{\baposter@finalpaperwidth}{#1}}
|
|
\DeclareOptionX{paperheight}[1189mm]{\setlength{\baposter@finalpaperheight}{#1}}
|
|
\DeclareOptionX{archA} { \baposter@setfinalpapersize{9in}{12in}}%
|
|
\DeclareOptionX{archB} { \baposter@setfinalpapersize{12in}{18in}}%
|
|
\DeclareOptionX{archC} { \baposter@setfinalpapersize{18in}{24in}}%
|
|
\DeclareOptionX{archD} { \baposter@setfinalpapersize{24in}{36in}}%
|
|
\DeclareOptionX{archE} { \baposter@setfinalpapersize{36in}{48in}}%
|
|
\DeclareOptionX{archE1} { \baposter@setfinalpapersize{30in}{42in}}%
|
|
\DeclareOptionX{archE2} { \baposter@setfinalpapersize{26in}{38in}}%
|
|
\DeclareOptionX{archE3} { \baposter@setfinalpapersize{27in}{39in}}%
|
|
\DeclareOptionX{a0paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{841mm}{1189mm}}%g
|
|
\DeclareOptionX{a1paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{594mm}{841mm}}%g
|
|
\DeclareOptionX{a2paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{420mm}{594mm}}%g
|
|
\DeclareOptionX{a3paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{297mm}{420mm}}%g
|
|
\DeclareOptionX{a4paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{210mm}{297mm}}%g
|
|
\DeclareOptionX{a5paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{148mm}{210mm}}%g
|
|
\DeclareOptionX{a6paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{105mm}{148mm}}%g
|
|
\DeclareOptionX{b0paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{1000mm}{1414mm}}%g
|
|
\DeclareOptionX{b1paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{707mm}{1000mm}}%g
|
|
\DeclareOptionX{b2paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{500mm}{707mm}}%g
|
|
\DeclareOptionX{b3paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{353mm}{500mm}}%g
|
|
\DeclareOptionX{b4paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{250mm}{353mm}}%g
|
|
\DeclareOptionX{b5paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{176mm}{250mm}}%g
|
|
\DeclareOptionX{b6paper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{125mm}{176mm}}%g
|
|
\DeclareOptionX{ansiapaper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{8.5in}{11in}}%
|
|
\DeclareOptionX{ansibpaper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{11in}{17in}}%
|
|
\DeclareOptionX{ansicpaper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{17in}{22in}}%
|
|
\DeclareOptionX{ansidpaper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{22in}{34in}}%
|
|
\DeclareOptionX{ansiepaper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{34in}{44in}}%
|
|
\DeclareOptionX{letterpaper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{8.5in}{11in}}%
|
|
\DeclareOptionX{legalpaper} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{8.5in}{14in}}%
|
|
\DeclareOptionX{executivepaper}{\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{7.25in}{10.5in}}%
|
|
\DeclareOptionX{screen} {\@geometryKnowsThisSizetrue\baposter@setfinalpapersize{225mm}{180mm}}%g
|
|
|
|
% Margin
|
|
\setlength{\baposter@finalmargin}{1.5cm}
|
|
\DeclareOptionX{fontscale}[0.292]{\renewcommand{\baposter@fontscale}{#1}}
|
|
\DeclareOptionX{margin} [1.5cm]{\setlength{\baposter@finalmargin}{#1}}
|
|
|
|
% move text/poster body to the right (or to the left if negative)
|
|
\newlength{\baposter@movebody}
|
|
\setlength{\baposter@movebody}{0cm}
|
|
\DeclareOptionX{movebody}[0cm]{\setlength{\baposter@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}{}
|
|
|
|
\ProcessOptionsX
|
|
|
|
\if@debug
|
|
\newcommand{\debug}[1]{\typeout{#1}}
|
|
\else
|
|
\newcommand{\debug}[1]{}
|
|
\fi
|
|
|
|
|
|
|
|
\setlength{\baposter@basepaperwidth} {\baposter@fontscale\baposter@finalpaperwidth }
|
|
\setlength{\baposter@basepaperheight}{\baposter@fontscale\baposter@finalpaperheight}
|
|
\setlength{\baposter@basemargin} {\baposter@fontscale\baposter@finalmargin}
|
|
\newlength{\baposter@basemarginright}
|
|
\setlength{\baposter@basemarginright}{\baposter@basemargin}
|
|
\addtolength{\baposter@basemarginright}{-\baposter@fontscale\baposter@movebody}
|
|
\newlength{\baposter@basemarginleft}
|
|
\setlength{\baposter@basemarginleft}{\baposter@basemargin}
|
|
\addtolength{\baposter@basemarginleft}{\baposter@fontscale\baposter@movebody}
|
|
|
|
\typeout{Paperwidth=\the\baposter@finalpaperwidth}
|
|
\typeout{Paperheight=\the\baposter@finalpaperheight}
|
|
\typeout{BasePaperwidth=\the\baposter@basepaperwidth}
|
|
\typeout{BasePaperheight=\the\baposter@basepaperheight}
|
|
\usepackage[
|
|
paperwidth=\baposter@basepaperwidth,
|
|
paperheight=\baposter@basepaperheight,
|
|
tmargin=\baposter@basemargin,
|
|
bmargin=\baposter@basemargin,
|
|
lmargin=\baposter@basemarginleft,
|
|
rmargin=\baposter@basemarginright,
|
|
]{geometry}
|
|
|
|
\usepackage{pgfpages}
|
|
\if@landscape
|
|
\if@geometryKnowsThisSize
|
|
\pgfpagesuselayout{resize to}[physical paper width=\baposter@finalpaperheight,physical paper height=\baposter@finalpaperwidth]
|
|
\else
|
|
\pgfpagesuselayout{resize to}[physical paper width=\baposter@finalpaperwidth,physical paper height=\baposter@finalpaperheight]
|
|
\fi
|
|
\else
|
|
\pgfpagesuselayout{resize to}[physical paper width=\baposter@finalpaperwidth,physical paper height=\baposter@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 \baposter@optionname@optionvalue, which
|
|
%% should do the actual work / setting for that particular optionvalue.
|
|
|
|
\newcommand{\baposterPosterDrawBackground}[2]{} % Draw poster background
|
|
|
|
\newcommand{\baposterBoxGetShape}{} % Returns path of text box shape
|
|
\newcommand{\baposterBoxDrawBackground}[2]{} % Draw bg of boxes
|
|
\newcommand{\baposterBoxDrawBorder}[1]{} % Draw border of individual boxes
|
|
|
|
\newcommand{\baposterHeaderGetShape}{} % Returns path of text box shape
|
|
\newcommand{\baposterHeaderSetShade}[3]{} % Set bg style for box headers
|
|
\newcommand{\baposterHeaderDrawBackground}[3]{} % Draw background of box header
|
|
\newcommand{\baposterHeaderDrawBorder}[1]{} % Draw border of box header
|
|
\newcommand{\baposterHeaderDrawText}[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{\baposter@backgroundCmd}{\error{No background command defined. Use \background{...} to define background}}
|
|
\newcommand{\background}[1]{\renewcommand{\baposter@backgroundCmd}{#1}}
|
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% Handle poster and box options
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
\debug{Handling keys}
|
|
|
|
%%
|
|
%% POSTER OPTIONS
|
|
%%
|
|
%% Store all poster options in variables of the form \baposter@option
|
|
%% choose-keys also store the index in \baposter@optionnr
|
|
%% choose-keys typically also assign a function
|
|
\definecolor{baposter@silver}{cmyk}{0,0,0,0.7}
|
|
\define@boolkey[ba]{poster}[baposter@]{grid} [false] {}
|
|
\define@boolkey[ba]{poster}[baposter@]{eyecatcher} [true] {}
|
|
\define@cmdkey [ba]{poster}[baposter@]{headerheight} [0.1\textheight]{}
|
|
\define@cmdkey [ba]{poster}[baposter@]{columns} [{}] {}
|
|
\define@cmdkey [ba]{poster}[baposter@]{colspacing} [1em] {}
|
|
\define@cmdkey [ba]{poster}[baposter@]{bgColorOne} [baposter@silver]{}
|
|
\define@cmdkey [ba]{poster}[baposter@]{bgColorTwo} [green] {}
|
|
|
|
% background can be one of: shadeLR, shadeTB, plain, user, none
|
|
\define@choicekey*+[ba]{poster}{background}%
|
|
[\baposter@background\baposter@backgroundnr]%
|
|
{shadeLR, shadeTB, plain, user, none} [plain] {%
|
|
\debug{Poster background: \baposter@background}
|
|
\renewcommand{\baposterPosterDrawBackground}[2]{
|
|
\csname baposter@background@\baposter@background\endcsname{##1}{##2}}
|
|
}{
|
|
\PackageWarning{baposter}{Unknown background `\baposter@background' (use
|
|
shadeLR, shadeTB, plain, none, or user). If user is used, you also
|
|
have to define \background{...}.}
|
|
\renewcommand{\baposterPosterDrawBackground}[2]{\baposter@background@none{##1}{##2}}
|
|
}
|
|
|
|
|
|
%%
|
|
%% BOX OPTIONS
|
|
%%
|
|
\define@cmdkey[ba]{posterbox}[baposter@box@]{cornerradius} [1em] {}
|
|
\define@cmdkey[ba]{posterbox}[baposter@box@]{boxheaderheight} [2em] {}
|
|
\define@cmdkey[ba]{posterbox}[baposter@box@]{boxpadding} [0.5em] {}
|
|
|
|
|
|
% textborder can be one of: none, bars, coils, triangles, rectangle, rounded,
|
|
% roundedleft, roundedsmall, faded; UNIMPLEMENTED: roundedright
|
|
\edef\baposter@box@textborder@validvalues{none,bars,coils,triangles,rectangle,rounded,roundedleft,roundedsmall,faded}
|
|
\define@choicekey*+[ba]{posterbox}{textborder}%
|
|
[\baposter@box@textborder\baposter@box@textbordernr]%
|
|
{none,bars,coils,triangles,rectangle,rounded,roundedleft,roundedright,roundedsmall,faded} [rectangle] {%
|
|
\debug{Text border: \baposter@box@textborder}
|
|
\renewcommand{\baposterBoxGetShape}{
|
|
\csname baposter@box@boxshape@\baposter@box@textborder\endcsname}
|
|
\renewcommand{\baposterBoxDrawBorder}[1]{
|
|
\csname baposter@box@drawborder@\baposter@box@textborder\endcsname{##1}}
|
|
}{
|
|
\PackageWarning{baposter}{Unknown text-border style `\baposter@box@textborder'.
|
|
Edit your file to choose a valid option (\baposter@box@textborder@validvalues).}
|
|
\renewcommand{\baposterBoxGetShape}{\baposter@boxshape@rectangle}
|
|
\renewcommand{\baposterBoxDrawBorder}[1]{\baposter@drawborder@rectangle{##1}}
|
|
}
|
|
|
|
% boxshade can be one of: shadeLR, shadeTB, plain, none
|
|
\define@choicekey*+[ba]{posterbox}{boxshade}%
|
|
[\baposter@box@boxshade\baposter@box@boxshadenr]%
|
|
{shadelr,shadetb,plain,none} [none] {%
|
|
\debug{Box shade: \baposter@box@boxshade}
|
|
\renewcommand{\baposterBoxDrawBackground}[2]{
|
|
\csname baposter@box@drawbackground@\baposter@box@boxshade\endcsname{##1}{##2}}
|
|
}{
|
|
\PackageWarning{baposter}{Unknown boxshade style `\baposter@boxshade'.
|
|
Edit your file to choose a valid option.}
|
|
\renewcommand{\baposterBoxDrawBackground}[2]{\baposter@box@drawbackground@none{##1}{##2}}
|
|
}
|
|
|
|
% headershade can be one of: shade-lr, shade-tb, shade-tb-inverse, plain
|
|
\define@choicekey*+[ba]{posterbox}{headershade}%
|
|
[\baposter@box@headershade\baposter@box@headershadenr]%
|
|
{shadelr, shadetb, shadetbinverse, plain} [shadelr] {%
|
|
\debug{Header shade: \baposter@box@headershade}
|
|
\renewcommand{\baposterHeaderSetShade}[3]{
|
|
\csname baposter@box@headershade@\baposter@box@headershade\endcsname{##1}{##2}{##3}}
|
|
}{
|
|
\PackageWarning{baposter}{Unknown headershade style `\baposter@box@headershade'.
|
|
Edit your file to choose a valid option.}
|
|
\renewcommand{\baposterHeaderSetShade}[3]{\baposter@box@headershade@none{##1}{##2}{##3}}
|
|
}
|
|
|
|
% headershape can be one of: rectangle, rounded, smallrounded, roundedleft, roundedright
|
|
\define@choicekey*+[ba]{posterbox}{headershape}%
|
|
[\baposter@box@headershape\baposter@box@headershapenr]%
|
|
{rectangle,rounded,smallrounded,roundedleft,roundedright} [roundedright] {%
|
|
\debug{Header shape: \baposter@box@headershape}
|
|
\renewcommand{\baposterHeaderGetShape}{
|
|
\csname baposter@box@headershape@\baposter@box@headershape\endcsname}
|
|
\renewcommand{\baposterHeaderDrawText}[1]{
|
|
\csname baposter@box@headerdrawtext@\baposter@box@headershape\endcsname{##1}}
|
|
\renewcommand{\baposterHeaderDrawBorder}[1]{
|
|
\csname baposter@box@headerdrawborder@\baposter@box@headershape\endcsname{##1}}
|
|
}{
|
|
\PackageWarning{baposter}{Unknown headershape style `\baposter@headershape'.
|
|
Edit your file to choose a valid option.}
|
|
\renewcommand{\baposterHeaderGetShape}{\baposter@box@headershape@rectangle}
|
|
\renewcommand{\baposterHeaderDrawText}[1]{\baposter@box@headerdrawtext@rectangle{##1}}
|
|
\renewcommand{\baposterHeaderDrawBorder}[1]{\baposter@box@headerdrawborder@rectangle{##1}}
|
|
}
|
|
|
|
% headerborder can be one of: open, closed, none
|
|
\define@choicekey*+[ba]{posterbox}{headerborder}%
|
|
[\baposter@box@headerborder\baposter@box@headerbordernr]%
|
|
{open,closed,none} [open] {%
|
|
\debug{Header border: \baposter@box@headerborder}
|
|
% \renewcommand{\baposterHeaderBorder}{
|
|
% \csname baposter@headerborder@\baposter@box@headerborder\endcsname}
|
|
}{
|
|
\PackageWarning{baposter}{Unknown headerborder style `\baposter@headerborder'.
|
|
Edit your file to choose a valid option.}
|
|
% \renewcommand{\baposterHeaderBorder}{\baposter@box@headerborder@rectangle}
|
|
}
|
|
|
|
|
|
\define@cmdkey[ba]{posterbox}[baposter@box@]{borderColor} [yellow] {}
|
|
\define@cmdkey[ba]{posterbox}[baposter@box@]{headerColorOne} [red] {}
|
|
\define@cmdkey[ba]{posterbox}[baposter@box@]{headerColorTwo} [brown] {}
|
|
\define@cmdkey[ba]{posterbox}[baposter@box@]{headerFontColor} [black] {}
|
|
\define@cmdkey[ba]{posterbox}[baposter@box@]{boxColorOne} [magenta] {}
|
|
\define@cmdkey[ba]{posterbox}[baposter@box@]{boxColorTwo} [cyan] {}
|
|
\define@cmdkey[ba]{posterbox}[baposter@box@]{headerfont} [\scshape\Large] {}
|
|
\define@cmdkey[ba]{posterbox}[baposter@box@]{textfont} [{}] {}
|
|
|
|
\define@cmdkey[ba]{posterbox}[baposter@box@]{linewidth} [2pt] {}
|
|
|
|
\define@cmdkey[ba]{posterbox}[baposter@box@]{below} [notset]{}
|
|
\define@cmdkey[ba]{posterbox}[baposter@box@]{above} [notset]{}
|
|
\define@cmdkey[ba]{posterbox}[baposter@box@]{aligned}[notset]{}
|
|
\define@cmdkey[ba]{posterbox}[baposter@box@]{bottomaligned}[notset]{}
|
|
\define@cmdkey[ba]{posterbox}[baposter@box@]{column} [0] {}
|
|
\define@cmdkey[ba]{posterbox}[baposter@box@]{row} [0] {}
|
|
\define@cmdkey[ba]{posterbox}[baposter@box@]{span} [1] {}
|
|
\define@cmdkey[ba]{posterbox}[baposter@box@]{height} [auto] {}
|
|
\define@cmdkey[ba]{posterbox}[baposter@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=baposter@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{\baposter@background@shadelr}[2]{
|
|
\debug{BAPOSTER: 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{\baposter@background@shadetb}[2]{
|
|
\debug{BAPOSTER: 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{\baposter@background@plain}[2]{
|
|
\debug{BAPOSTER: Using plain background.}
|
|
\begin{tikzpicture}[remember picture,overlay]%
|
|
\fill [fill=#1] (current page.north west) rectangle(current page.south east);
|
|
\end{tikzpicture}%
|
|
}
|
|
\newcommand{\baposter@background@user}[2]{
|
|
\debug{BAPOSTER: Using user background.}
|
|
\baposter@backgroundCmd%
|
|
}
|
|
\newcommand{\baposter@background@none}[2]{
|
|
\debug{BAPOSTER: Using no background.}
|
|
}
|
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
%%% Return shape path of text box (depending on the box shape)
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
\newcommand{\baposter@box@boxshape@none}{\baposter@box@boxshape@rectangle}
|
|
\newcommand{\baposter@box@boxshape@bars}{
|
|
(\baposter@box@name tnw) -- (\baposter@box@name sw) %
|
|
(\baposter@box@name se) -- (\baposter@box@name tne)
|
|
}
|
|
\newcommand{\baposter@box@boxshape@coils}{\baposter@box@boxshape@bars}
|
|
\newcommand{\baposter@box@boxshape@triangles}{\baposter@box@boxshape@bars}
|
|
\newcommand{\baposter@box@boxshape@rectangle}{
|
|
(\baposter@box@name tnw) -- (\baposter@box@name sw) -- %
|
|
(\baposter@box@name se) -- (\baposter@box@name tne)%
|
|
}
|
|
\newcommand{\baposter@box@boxshape@faded}{
|
|
(\baposter@box@name tnw) -- (\baposter@box@name sw) %
|
|
(\baposter@box@name tne) -- (\baposter@box@name se)
|
|
}
|
|
\newcommand{\baposter@box@boxshape@rounded}{
|
|
[rc] \baposter@box@boxshape@rectangle%
|
|
}
|
|
\newcommand{\baposter@box@boxshape@roundedsmall}{
|
|
[src] \baposter@box@boxshape@rectangle
|
|
}
|
|
\newcommand{\baposter@box@boxshape@roundedleft}{
|
|
(\baposter@box@name tnw) {[rc]-- (\baposter@box@name sw)} -- %
|
|
(\baposter@box@name se) -- (\baposter@box@name tne)%
|
|
}
|
|
\newcommand{\baposter@box@boxshape@roundedright}{
|
|
(\baposter@box@name tnw) -- (\baposter@box@name sw) {[rc]-- %
|
|
(\baposter@box@name se)} -- (\baposter@box@name tne)%
|
|
}
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
%%% Draw box background (one function for each possible value)
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
% These functions take no arguments
|
|
\newcommand{\baposter@box@drawbackground@none}[2]{
|
|
\tikzstyle{box colors}=[]
|
|
}
|
|
\newcommand{\baposter@box@drawbackground@plain}[2]{
|
|
\tikzstyle{box colors}=[fill=#1]
|
|
\fill[box colors] \baposterBoxGetShape;
|
|
}
|
|
\newcommand{\baposter@box@drawbackground@shadelr}[2]{
|
|
\tikzstyle{box colors}=[shading=axis, left color=#1, right color=#2]%
|
|
\fill[box colors] \baposterBoxGetShape;
|
|
}
|
|
\newcommand{\baposter@box@drawbackground@shadetb}[2]{
|
|
\tikzstyle{box colors}=[shading=axis, top color=#1, bottom color=#2]%
|
|
\fill[box colors] \baposterBoxGetShape;
|
|
}
|
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
%%% Draw box border
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
% These functions take two arguments: borderColor
|
|
\newcommand{\baposter@box@drawborder@none}[1]{}
|
|
\newcommand{\baposter@box@drawborder@bars}[1]{
|
|
\draw[color=#1] \baposterBoxGetShape;%
|
|
}
|
|
\newcommand{\baposter@box@drawborder@coils}[1]{
|
|
\draw[color=#1,segment amplitude=0.35em,segment length=0.4em,snake=coil] \baposterBoxGetShape;%
|
|
}
|
|
\newcommand{\baposter@box@drawborder@triangles}[1]{
|
|
\draw[color=#1,segment amplitude=0.2em,segment length=0.4em,snake=triangles] \baposterBoxGetShape;%
|
|
}
|
|
\newcommand{\baposter@box@drawborder@rectangle}[1]{
|
|
\draw[color=#1] \baposterBoxGetShape;%
|
|
}
|
|
\newcommand{\baposter@box@drawborder@rounded}[1]{
|
|
\draw[color=#1] \baposterBoxGetShape;%
|
|
}
|
|
\newcommand{\baposter@box@drawborder@roundedleft}[1]{
|
|
\draw[color=#1] \baposterBoxGetShape;%
|
|
}
|
|
\newcommand{\baposter@box@drawborder@roundedright}[1]{
|
|
\draw[color=#1] \baposterBoxGetShape;%
|
|
}
|
|
\newcommand{\baposter@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] \baposterBoxGetShape;%
|
|
% this
|
|
\foreach \x in {0,1,...,90} \draw[color=#1!\x] ($(\baposter@box@name tnw)!{(100-\x)/100}!(\baposter@box@name sw)$) -- ($(\baposter@box@name tnw)!{(100-(\x+10))/100}!(\baposter@box@name sw)$);%
|
|
\foreach \x in {0,1,...,90} \draw[color=#1!\x] ($(\baposter@box@name tne)!{(100-\x)/100}!(\baposter@box@name se)$) -- ($(\baposter@box@name tne)!{(100-(\x+10))/100}!(\baposter@box@name se)$);%
|
|
}
|
|
\newcommand{\baposter@box@drawborder@roundedsmall}[1]{
|
|
\draw[color=#1] \baposterBoxGetShape;%
|
|
}
|
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
%%% Return shape path of text box (depending on the box shape)
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
% These functions take no arguments
|
|
% TODO: For headerborder==none, use (\baposter@box@name outer tnw) instead!
|
|
\newcommand{\baposter@box@headershape@rectangle}{%
|
|
(\baposter@box@name tnw) -- (\baposter@box@name nw) -- %
|
|
(\baposter@box@name ne) -- (\baposter@box@name tne)%
|
|
}
|
|
\newcommand{\baposter@box@headershape@smallrounded}{%
|
|
(\baposter@box@name tnw) {[src] -- (\baposter@box@name nw) -- %
|
|
(\baposter@box@name ne)} -- (\baposter@box@name tne)%
|
|
}
|
|
\newcommand{\baposter@box@headershape@roundedright}{%
|
|
(\baposter@box@name tnw) -- (\baposter@box@name nw) {[rc] -- %
|
|
(\baposter@box@name ne)} -- (\baposter@box@name tne)%
|
|
}
|
|
\newcommand{\baposter@box@headershape@roundedleft}{%
|
|
(\baposter@box@name tnw) {[rc]-- (\baposter@box@name nw)} -- %
|
|
(\baposter@box@name ne) -- (\baposter@box@name tne)%
|
|
}
|
|
\newcommand{\baposter@box@headershape@rounded}{%
|
|
(\baposter@box@name tnw) {[rc] -- (\baposter@box@name nw) -- %
|
|
(\baposter@box@name ne) } -- (\baposter@box@name tne)%
|
|
}
|
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
%%% Header text drawing (one function for each possible value of headershape)
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
% These functions take one argument: the header text
|
|
\newcommand{\baposter@box@headerdrawtext@rectangle}[1]{
|
|
\path (\baposter@box@name nw) +(0em,-0.5\baposter@box@@boxheaderheight) node[anchor=west,inner sep=0.4em] {#1};%
|
|
}
|
|
\newcommand{\baposter@box@headerdrawtext@smallrounded}[1]{
|
|
\path (\baposter@box@name nw) +(0.5\boxwidth,-0.5\baposter@box@@boxheaderheight) node[anchor=center] {#1};%
|
|
}
|
|
\newcommand{\baposter@box@headerdrawtext@roundedright}[1]{
|
|
\path (\baposter@box@name nw) +(0em,-0.5\baposter@box@@boxheaderheight)%
|
|
node[anchor=west,inner sep=0.4em,text depth=0.0em] {#1};%
|
|
}
|
|
\newcommand{\baposter@box@headerdrawtext@roundedleft}[1]{
|
|
\path (\baposter@box@name nw) +(0em,-0.5\baposter@box@@boxheaderheight)%
|
|
node[anchor=west,inner sep=0.4em] {#1};%
|
|
}
|
|
\newcommand{\baposter@box@headerdrawtext@rounded}[1]{
|
|
\path (\baposter@box@name nw) +(0.5\boxwidth,-0.5\baposter@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{\baposter@box@headershade@shadelr}[3]{
|
|
\debug{Header-Shade: Shade Left - Right}
|
|
\tikzstyle{header colors}=[%
|
|
color=#3,%
|
|
shading=axis,%
|
|
left color=#1,%
|
|
right color=#2%
|
|
]%
|
|
}
|
|
\newcommand{\baposter@box@headershade@shadetb}[3]{
|
|
\debug{Header-Shade: Shade Top - Bottom}
|
|
\tikzstyle{header colors}=[%
|
|
color=#3,%
|
|
shading=axis,%
|
|
top color=#1,%
|
|
bottom color=#2%
|
|
]%
|
|
}
|
|
\newcommand{\baposter@box@headershade@shadetbinverse}[3]{
|
|
\tikzstyle{header colors}=[%
|
|
top color=#1!75!#2,%
|
|
bottom color=#2!100!#1,%
|
|
shading angle=20%
|
|
]%
|
|
\colorlet{baposterHeaderFontColor}{white}%
|
|
}
|
|
\newcommand{\baposter@box@headershade@plain}[3]{
|
|
\debug{Header-Shade: Plain}
|
|
\tikzstyle{header colors}=[%
|
|
color=#3,%
|
|
fill=#1%
|
|
]%
|
|
}
|
|
\newcommand{\baposter@box@headershade@none}[3]{
|
|
\debug{Header-Shade: none}
|
|
\tikzstyle{header colors}=[]
|
|
}
|
|
|
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
%%% The main poster environment
|
|
%%% \begin{baposter}{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]{%
|
|
\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 \baposter(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}{\baposter@bgColorOne}
|
|
\colorlet{bgColorTwo}{\baposter@bgColorTwo}
|
|
%
|
|
%% Boxes%
|
|
\setlength{\headerheight}{\baposter@headerheight}%
|
|
\setlength{\colheight}{\textheight-\baposter@headerheight}%
|
|
\renewcommand{\@@previousbox}{notset}
|
|
|
|
\debug{Format}%
|
|
% Set default for columns if unset (4 for landscape, 3 for portrait)
|
|
\ifthenelse{\equal{\baposter@columns}{}}{%
|
|
\renewcommand{\baposter@columns}{\if@landscape4\else3\fi}%
|
|
}{}
|
|
%
|
|
\debug{Columns: \baposter@columns}%
|
|
\setlength{\baposter@@colspacing}{\baposter@colspacing}%
|
|
\setlength{\colwidth}{\textwidth}%
|
|
\addtolength{\colwidth}{\baposter@@colspacing*(1-\baposter@columns)}%
|
|
\ifcase\baposter@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{\baposter@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}%
|
|
%
|
|
\def\baposter@box@title{##2}
|
|
%
|
|
\colorlet{borderColor}{\baposter@box@borderColor}
|
|
\colorlet{headerColorOne}{\baposter@box@headerColorOne}
|
|
\colorlet{headerColorTwo}{\baposter@box@headerColorTwo}
|
|
\colorlet{headerFontColor}{\baposter@box@headerFontColor}
|
|
\colorlet{boxColorOne}{\baposter@box@boxColorOne}
|
|
\colorlet{boxColorTwo}{\baposter@box@boxColorTwo}
|
|
%
|
|
\setlength{\baposter@box@@cornerradius}{\baposter@box@cornerradius}%
|
|
\setlength{\baposter@box@@boxheaderheight}{\baposter@box@boxheaderheight}%
|
|
\setlength{\baposter@box@@boxpadding}{\baposter@box@boxpadding}%
|
|
|
|
|
|
%% The columns is always given absolute
|
|
% boxstartx = column * colwidth + column * colspacing
|
|
\setlength{\boxstartx}{(\colwidth+\baposter@@colspacing)*\baposter@box@column}%
|
|
%
|
|
%% The width is gvien absolute
|
|
% Box Width = span * colwidth + (span-1) * colspacing
|
|
\setlength{\boxwidth}{\baposter@box@span\colwidth} %
|
|
\addtolength{\boxwidth}{\baposter@@colspacing*(\baposter@box@span-1)}%
|
|
%
|
|
%% Measure the content of the box%
|
|
\setbox\baposter@box@content=\hbox\bgroup%
|
|
\begin{pgfinterruptpicture}%
|
|
\begin{minipage}[t]{\boxwidth-\baposter@box@@boxpadding*2}%
|
|
\baposter@box@textfont\bgroup%
|
|
}% End of posterbox preamble
|
|
%%% HERE COME THE ACTUAL CONTENTS OF THE HEADERBOX ENVIRONMENT
|
|
{% posterbox handling after contents (i.e. drawing everything)
|
|
\egroup%
|
|
\end{minipage}%
|
|
\end{pgfinterruptpicture}%
|
|
\egroup%
|
|
\setlength{\boxheight}{\ht\baposter@box@content}%
|
|
\addtolength{\boxheight}{\dp\baposter@box@content}%
|
|
\addtolength{\boxheight}{\baposter@box@@boxheaderheight} % Header%
|
|
\addtolength{\boxheight}{2\baposter@box@@boxpadding} % Inner Sep
|
|
%
|
|
\ifthenelse{\equal{\baposter@box@height}{bottom}}{%
|
|
}{\ifthenelse{\equal{\baposter@box@height}{auto}}{%
|
|
}{ % Neither auto nor bottom%
|
|
\setlength{\boxheight}{\baposter@box@height\colheight}%
|
|
}}%
|
|
%
|
|
%% Determine the box position%
|
|
\debug{Setting Coordinates}%
|
|
\debug{Upper Right}%
|
|
\debug{\baposter@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{\baposter@box@below}{auto}}{%
|
|
\edef\baposter@box@below{\@@previousbox}
|
|
\debug{Box \baposter@box@name has below=auto, placing it below box \baposter@box@below.}
|
|
}{}
|
|
\xdef\@@previousbox{\baposter@box@name}
|
|
|
|
\ifthenelse{\not\equal{\baposter@box@below}{notset} }{%
|
|
%% Below%
|
|
\debug{Below}%
|
|
\path[shape=coordinate] (\boxstartx,0pt |- \baposter@box@below se) ++(0pt,-\baposter@@colspacing) coordinate(\baposter@box@name nw);%
|
|
}{%
|
|
\ifthenelse{\not\equal{\baposter@box@aligned}{notset} }{%
|
|
%% Aligned%
|
|
\debug{Aligned: \baposter@box@aligned}%
|
|
\path[shape=coordinate] (\boxstartx,0pt |- \baposter@box@aligned nw) coordinate(\baposter@box@name nw);%
|
|
}{%
|
|
%% Fixed%
|
|
\debug{Fixed}%
|
|
\setlength{\boxstarty}{\baposter@box@row\colheight}%
|
|
\path[shape=coordinate] (\boxstartx,\colheight-\boxstarty) coordinate(\baposter@box@name nw);%
|
|
}}%
|
|
%
|
|
%% Lower Left Corner%
|
|
\debug{Lower Left}%
|
|
\ifthenelse{\equal{\baposter@box@above}{bottom}}{%
|
|
%% Above = Bottom%
|
|
\debug{Above bottom}%
|
|
\ifthenelse{\equal{\baposter@box@below}{notset} \and \equal{\baposter@box@aligned}{notset}}{%
|
|
\path[shape=coordinate] (\boxstartx,\boxheight) coordinate(\baposter@box@name nw);%
|
|
}{}%
|
|
\path[shape=coordinate] (\boxstartx+\boxwidth,0pt) coordinate(\baposter@box@name se);%
|
|
}{\ifthenelse{\not \equal{\baposter@box@bottomaligned}{notset}}{%
|
|
\path[shape=coordinate] (\boxstartx+\boxwidth,0pt |- \baposter@box@bottomaligned se) coordinate(\baposter@box@name se);%
|
|
}{{\ifthenelse{\not \equal{\baposter@box@above}{notset}}{%
|
|
%% Above = Node%
|
|
\path[shape=coordinate] (\boxstartx+\boxwidth,0pt |- \baposter@box@above nw) +(0pt,\baposter@@colspacing) coordinate(\baposter@box@name se);%
|
|
}{%
|
|
%% Above = notset%
|
|
\debug{Above=not set}%
|
|
\ifthenelse{\equal{\baposter@box@height}{bottom}}{%
|
|
%% height=bottom%
|
|
\debug{height=bottom}%
|
|
\path[shape=coordinate] (\boxstartx+\boxwidth,0pt) coordinate(\baposter@box@name se);%
|
|
}{ %% height=auto or fixed%
|
|
\debug{height=auto or fixed}%
|
|
\path[shape=coordinate] (\baposter@box@name nw) ++(\boxwidth,-\boxheight) coordinate(\baposter@box@name se);%
|
|
}}}}}%
|
|
%
|
|
%
|
|
% Set coordinates relative to nw,se%
|
|
\debug{Fixing Coordinates}%
|
|
\path[shape=coordinate]%
|
|
(\baposter@box@name nw) +(0pt,-\baposter@box@@boxheaderheight) coordinate(\baposter@box@name tnw)%
|
|
(\baposter@box@name nw |- \baposter@box@name se) coordinate(\baposter@box@name sw)%
|
|
(\baposter@box@name se |- \baposter@box@name nw) coordinate(\baposter@box@name ne)%
|
|
(\baposter@box@name ne) +(0pt,-\baposter@box@@boxheaderheight) coordinate(\baposter@box@name tne)%
|
|
%
|
|
(\baposter@box@name nw) +(-0.025em,0pt) coordinate(\baposter@box@name outer nw)%
|
|
(\baposter@box@name tnw) +(-0.025em,0pt) coordinate(\baposter@box@name outer tnw)%
|
|
(\baposter@box@name sw) +(-0.025em,0pt) coordinate(\baposter@box@name outer sw)%
|
|
%
|
|
(\baposter@box@name ne) +( 0.025em,0pt) coordinate(\baposter@box@name outer ne)%
|
|
(\baposter@box@name tne) +( 0.025em,0pt) coordinate(\baposter@box@name outer tne)%
|
|
(\baposter@box@name se) +( 0.025em,0pt) coordinate(\baposter@box@name outer se);%
|
|
%
|
|
%% Setting the bg colors of the box header
|
|
\baposterHeaderSetShade{headerColorOne}{headerColorTwo}{borderColor}
|
|
%
|
|
\tikzstyle{rc}=[rounded corners=\baposter@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=\baposter@box@linewidth]
|
|
%% Header%
|
|
\debug{Header}%
|
|
\debug{Header-Shape: \baposter@box@headershape, header-border: \baposter@box@headerborder (\baposter@box@headerbordernr)}%
|
|
% TODO: Also turn this last ifcase construct into a handler function
|
|
% We only need to determine (fill|shade)(draw|)...
|
|
% \baposterHeaderDrawBackground{bgColorOne}{bgColorTwo}{borderColor}
|
|
% \baposterHeaderDrawBorder{borderColor}
|
|
\ifcase\baposter@box@headerbordernr\relax%
|
|
% open
|
|
\ifthenelse{\equal{\baposter@box@headershade}{plain}}{
|
|
\filldraw [style=header colors] \baposterHeaderGetShape;%
|
|
}{
|
|
\shadedraw [style=header colors] \baposterHeaderGetShape;%
|
|
}
|
|
\or
|
|
% closed
|
|
\ifthenelse{\equal{\baposter@box@headershade}{plain}}{
|
|
\filldraw [style=header colors] \baposterHeaderGetShape -- cycle;%
|
|
}{
|
|
\shadedraw [style=header colors] \baposterHeaderGetShape -- cycle;%
|
|
}
|
|
\or
|
|
% none
|
|
\ifthenelse{\equal{\baposter@box@headershade}{plain}}{
|
|
\fill [style=header colors] \baposterHeaderGetShape;%
|
|
}{
|
|
\shade [style=header colors] \baposterHeaderGetShape;%
|
|
}
|
|
\fi
|
|
%
|
|
%% Draw the text inside the box header:
|
|
\baposterHeaderDrawText{\color{headerFontColor}\baposter@box@headerfont{\baposter@box@title}};%
|
|
%
|
|
%% Text borders (border around boxes)
|
|
\debug{Poster boxes}%
|
|
% First set box shade
|
|
\baposterBoxDrawBackground{boxColorOne}{boxColorTwo}
|
|
\baposterBoxDrawBorder{borderColor}
|
|
%%
|
|
%% Text Box%
|
|
\debug{Drawing Text}%
|
|
\path (\baposter@box@name tnw) node(text) [anchor=north west,
|
|
outer sep=-0.000em,text width=\boxwidth-2\baposter@box@@boxpadding,inner sep=\baposter@box@@boxpadding,
|
|
text justified] {\usebox{\baposter@box@content}};%
|
|
\end{scope}
|
|
%
|
|
% Finally store the box name as the previous box for the next call
|
|
% \xdef\@@previousbox{\baposter@box@name}%
|
|
}% END of posterbox definition
|
|
%
|
|
%% Poster Background%
|
|
\baposterPosterDrawBackground{bgColorOne}{bgColorTwo}%
|
|
%% Poster header/title
|
|
\hspace{-1.5em}%
|
|
\begin{tikzpicture}[inner sep=0pt,outer sep=0pt,line width=0.05em]%
|
|
\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);%
|
|
%
|
|
\ifbaposter@eyecatcher% Has eye catcher
|
|
\debug{Eyecatcher found!}
|
|
\setbox\baposter@titleimage@left=\hbox{#2}%
|
|
\else% Has no eye catcher%
|
|
\setbox\baposter@titleimage@left=\hbox{}%
|
|
\fi%
|
|
\setlength{\baposter@titleimage@left@width}{\wd\baposter@titleimage@left}%
|
|
\setbox\baposter@titleimage@right=\hbox{#5}%
|
|
\setlength{\baposter@titleimage@right@width}{\wd\baposter@titleimage@right}%
|
|
\setlength{\baposter@titleimage@textwidth}{\textwidth}%
|
|
\addtolength{\baposter@titleimage@textwidth}{-\baposter@titleimage@left@width}%
|
|
\addtolength{\baposter@titleimage@textwidth}{-\baposter@titleimage@right@width}%
|
|
|
|
\debug{#3}
|
|
%
|
|
%
|
|
% % Draw Header%
|
|
\draw (north west) +(0em,1em+0.5\headerheight) node(image)[anchor=west] { {\usebox{\baposter@titleimage@left }} };%
|
|
\draw (north east) +(0em,1em+0.5\headerheight) node(logo) [anchor=east] { {\usebox{\baposter@titleimage@right}} };%
|
|
%
|
|
\ifbaposter@eyecatcher% Has eye catcher%
|
|
\draw (image.east) node(title)[anchor=west,text width=\baposter@titleimage@textwidth]{%
|
|
\begin{minipage}{\baposter@titleimage@textwidth}%
|
|
\begin{center}%
|
|
\textbf{\Huge #3}\\%
|
|
{\Large #4}%
|
|
\end{center}%
|
|
\end{minipage}
|
|
};%
|
|
\else% Has no eye catcher
|
|
\draw (image.east) node(title)[anchor=west] { {\begin{minipage}{\baposter@titleimage@textwidth}{\bfseries\Huge #3}\\{\Large #4}\end{minipage}} };%
|
|
\fi
|
|
}% END poster begin
|
|
% The body
|
|
{% BEGIN poster end
|
|
% The end, draw gridlines if neccesary
|
|
\ifbaposter@grid
|
|
\newdimen{\gridpos}
|
|
\pgfmathsetmacro{\z}{\baposter@columns-1}
|
|
\foreach \y in {0,...,\z}
|
|
{
|
|
\setlength{\gridpos}{\y\colwidth+\y\baposter@@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}
|
|
\draw[draw=green,draw opacity=0.7] (0pt,\colheight-\y\colheight) --
|
|
(\textwidth,\colheight-\y\colheight) node[anchor=west] {\y};%
|
|
\fi%
|
|
\end{tikzpicture}%
|
|
% \xkvview{}
|
|
\par
|
|
}% END poster end
|