From 1c67242cd8a48c3138e3cec9ddfe8430d51b036b Mon Sep 17 00:00:00 2001 From: stilbruch Date: Mon, 2 May 2022 18:15:48 -0500 Subject: Start exercise progress page --- app/routes/__init__.py | 3 +- app/routes/progress.py | 21 + app/templates/progress/exercise.html | 12 + docs/baposter.cls | 1094 ++++++++++++++++++++++++++++++++++ 4 files changed, 1129 insertions(+), 1 deletion(-) create mode 100644 app/routes/progress.py create mode 100644 app/templates/progress/exercise.html create mode 100644 docs/baposter.cls diff --git a/app/routes/__init__.py b/app/routes/__init__.py index 09fcbf3..74d72db 100644 --- a/app/routes/__init__.py +++ b/app/routes/__init__.py @@ -1,4 +1,5 @@ from routes.api import * +from routes.basic import * +from routes.progress import * from routes.user import * from routes.workout import * -from routes.basic import * diff --git a/app/routes/progress.py b/app/routes/progress.py new file mode 100644 index 0000000..8040fdc --- /dev/null +++ b/app/routes/progress.py @@ -0,0 +1,21 @@ +from app import app, db +from flask import render_template, redirect, request, url_for, flash +from flask_login import current_user, login_required +from tables import Exercise, Workout + + +@app.route("/progress/exercise/") +@login_required +def progress_exercise(exercise_id=None): + # FIXME + + exercise = ( + db.session.query(Workout, Exercise) + .filter(Exercise.id == exercise_id) + .filter(Workout.user_id == current_user.id) + .first() + ) + if not exercise: + return redirect(url_for("home")) + + return render_template("progress/exercise.html", exercise=exercise) diff --git a/app/templates/progress/exercise.html b/app/templates/progress/exercise.html new file mode 100644 index 0000000..20f7c9f --- /dev/null +++ b/app/templates/progress/exercise.html @@ -0,0 +1,12 @@ +{% extends 'base/layout.html' %} + +{% block title %}{{ exercise.name }} Progress{% endblock %} + +{% block content %} +
+
+
+
+
+
+{% endblock %} diff --git a/docs/baposter.cls b/docs/baposter.cls new file mode 100644 index 0000000..965c4aa --- /dev/null +++ b/docs/baposter.cls @@ -0,0 +1,1094 @@ +%% +%% 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 +%% +%% 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[cmyk]{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= ,[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 -- cgit v1.2.3