Skip to content
Snippets Groups Projects
ptbposter.cls 13.2 KiB
Newer Older
% Rolf Niepraschk, Rolf.Niepraschk@ptb.de

\setcounter{errorcontextlines}{100}  \listfiles

\NeedsTeXFormat{LaTeX2e}[1999/12/01]
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\ProvidesClass{ptbposter}[2020/02/25 v1.0a PTB-Poster (RN)]
\newif\ifPTB@useCMYK \PTB@useCMYKfalse % vorerst 
\newif\ifPTB@german@  \PTB@german@true
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\newdimen\PTB@topmargin      % Abstand zum Rahmen
\newdimen\PTB@leftmargin     % Abstand zum Rahmen
\newdimen\PTB@default@fontsize@base % Bezugsgröße für Standardschriftgröße im Textbereich
\newdimen\PTB@default@title@fontsize@base % Bezugsgröße für Standardschriftgröße im Titel
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\newdimen\PTB@default@fsize  % Standardschriftgröße im Textbereich (\normalsize)
\newdimen\PTB@default@title@fontsize % Standardschriftgröße für den Titel
\newdimen\PTB@default@author@fontsize % Standardschriftgröße für die Autoren
\newdimen\PTB@default@foot@fontsize % Standardschriftgröße im Fußbereich
\newdimen\PTB@texthsep       % Abstand Textbereich zum blauen Rahmen
\newdimen\PTB@textvsep       % Abstand Textbereich zum blauen Rahmen
\newdimen\PTB@framewidth     % Breite des blauen Rahmens
\newdimen\PTB@frameheight    % Höhe des blauen Rahmens
\newdimen\PTB@framethickness % Dicke des blauen Rahmens
\newdimen\PTB@scale@base     % Bezugsgröße für papierabhängige Größenberechnung
\newdimen\PTB@maxtitleheight % Maximale Höhe des Titels
\newcommand*\authorFontSize{}
\newcommand*\footFontSize{}
\newcommand*\titleFontSize{}
\newcommand*\backgroundContent{}
\newcommand\PTB@tempa{}
\newcommand\PTB@tempb{}
\newcommand\PTB@tempc{}
\newcommand\PTB@tempd{}
\newcommand\PTB@tempe{}
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\newcommand\PTB@tempf{}
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\let\PTB@tempdima=\@ovxx
\let\PTB@tempdimb=\@ovyy
\let\PTB@tempdimc=\@ovdx

\newcounter{PTB@tempcnta}
\newcounter{PTB@tempcntb}
Rolf Niepraschk's avatar
Rolf Niepraschk committed

Rolf Niepraschk's avatar
Rolf Niepraschk committed
\newif\ifPTBlandscape \PTBlandscapefalse
\newif\ifPTB@XeOrLua \PTB@XeOrLuafalse
\newif\ifSERIF \SERIFfalse
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\newif\ifPTB@logo@long@ \PTB@logo@long@true

\RequirePackage{ifluatex,ifxetex}
\ifxetex\PTB@XeOrLuatrue\else\ifluatex\PTB@XeOrLuatrue\fi\fi
\PassOptionsToPackage{pagesize=false}{typearea}
\PassOptionsToPackage{paper=a0paper,onecolumn,portrait}{geometry}

\newcommand*\PTB@title@justification{\relax}
\newcommand*\PTB@authors@justification{\relax}
\newcommand*\PTB@title@series{\relax}

\newcommand*\PTB@layout{}
\DeclareOption{sanserif}{% noch experimentell! Besser: LuaTeX/XeTeX + OTF
  \SERIFfalse
\DeclareOption{serif}{%
  \SERIFtrue
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\DeclareOption{boldTitle}{%
  \global\let\PTB@title@series=\bfseries
}
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\DeclareOption{centerTitle}{%
  \global\let\PTB@title@justification=\centering
}
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\DeclareOption{raggedTitle}{%
Rolf Niepraschk's avatar
Rolf Niepraschk committed
  \global\let\PTB@title@justification=\raggedright
}
\DeclareOption{centerAuthors}{%
  \global\let\PTB@authors@justification=\centering
}
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\DeclareOption{a4paper}{%
  \PassOptionsToPackage{\CurrentOption}{geometry}
}
\DeclareOption{a3paper}{%
  \PassOptionsToPackage{\CurrentOption}{geometry}
}
\DeclareOption{a2paper}{%
  \PassOptionsToPackage{\CurrentOption}{geometry}
}
\DeclareOption{a1paper}{%
  \PassOptionsToPackage{\CurrentOption}{geometry}
}
\DeclareOption{a0paper}{%
  \PassOptionsToPackage{\CurrentOption}{geometry}
}
\DeclareOption{landscape}{%
  \PassOptionsToPackage{\CurrentOption}{geometry}
}
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\DeclareOption{shortPTBlogo}{%
  \PTB@logo@long@false  
}
\DeclareOption{layout2018}{%
  \def\PTB@layout{0}%
\DeclareOption{layout2020}{%
  \def\PTB@layout{1}%
\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{babel}}
\ExecuteOptions{serif,raggedTitle,layout2020}
\ProcessOptions\relax
\RequirePackage{hyphsubst}% Trennregeln austauschen
\HyphSubstIfExists{ngerman-x-latest}{%
  \HyphSubstLet{ngerman}{ngerman-x-latest}}{}
\HyphSubstIfExists{german-x-latest}{%
  \HyphSubstLet{german}{german-x-latest}}{}

Rolf Niepraschk's avatar
Rolf Niepraschk committed
\RequirePackage{etoolbox}
Rolf Niepraschk's avatar
Rolf Niepraschk committed
% Ohne Sprachangabe "deutsch" verwenden. Bessere Lösung?

\LoadClass{scrartcl}

\usepackage[verbose]{geometry}%
\@ifundefined{changefontsizes}{%
  \ClassError{ptbposter}{%
    Deine Version von KOMA-Script ist ungeeignet (vermutlich stark veraltet)!
  }{%
    Installiere die aktuelle Version von KOMA-Script.
  }%
}{}

Rolf Niepraschk's avatar
Rolf Niepraschk committed
\RequirePackage{amsmath,ragged2e}

\ifPTB@XeOrLua
  \input{ptbposter-new-engines.clo}
  \input{ptbposter-old-engines.clo}
\RequirePackage[dvipsnames,svgnames,x11names]{xcolor}
\RequirePackage{multicol,graphicx}

\ifxetex\else
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\RequirePackage[%
,factor=1500
,protrusion=true
,expansion=true
,verbose=true
,final=true
,letterspace=100
,babel=true
]{microtype}
\providecommand*\microtypesetup[1]{}

\RequirePackage{babel}    
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\AtEndOfClass{%
  \shorthandon{"}%
  \PTB@german@false
  \iflanguage{ngerman}{\PTB@german@true}{%
    \iflanguage{german}{\PTB@german@true}{}%
Rolf Niepraschk's avatar
Rolf Niepraschk committed
  }
  \if@tempswa
    \defineshorthand{"`}{\guillemotright}%
    \defineshorthand{"'}{\guillemotleft}%
Rolf Niepraschk's avatar
Rolf Niepraschk committed
  \fi
  \RequirePackage[final,pdfpagelabels=false,%
    plainpages=false,hypertexnames=true,hyperfootnotes=false]{hyperref}%
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\RequirePackage
Rolf Niepraschk's avatar
Rolf Niepraschk committed
  [autostyle=true,german=guillemets,maxlevel=3]{csquotes}%
\newcommand*\PTB@qrcode{}
\newcommand*\QRcode[1]{\gdef\PTB@qrcode{#1}}
\newcommand*\PTB@location{38116~Braunschweig}
\newcommand*\location[1]{\gdef\PTB@location{#1}}
\newcommand*\PTB@street{Bundesallee~100}
\newcommand*\street[1]{\gdef\PTB@street{#1}}
\newcommand*\PTB@workingGroup{Arbeitsgruppe}
\newcommand*\workingGroup[1]{\gdef\PTB@workingGroup{#1}}
\newcommand*\PTB@department{Fachbereich}
\newcommand*\department[1]{\gdef\PTB@department{#1}}
\newcommand*\PTB@phone{}
\newcommand*\phone[1]{\gdef\PTB@phone{#1}}
\newcommand*\PTB@email{}
\newcommand*\email[1]{\gdef\PTB@email{#1}}
\newcommand*\PTB@fax{}
\newcommand*\fax[1]{\gdef\PTB@fax{#1}}
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\newcommand*\PTB@logo{}
\newcommand*\logo[1]{\gdef\PTB@logo{#1}}
\ifPTB@useCMYK
  \definecolor{PTBcolor}{cmyk}{1,0.32549,0.12549,0.12549}
% icc:model: Europe ISO Coated FOGRA27
\else
%%%\definecolor{PTBcolor}{rgb}{0,0.67451,0.87451}
Rolf Niepraschk's avatar
Rolf Niepraschk committed
  %%%\definecolor{PTBcolor}{HTML}{00ACDF}
  \definecolor{PTBcolor}{RGB}{0,155,206}% 2019

\RequirePackage[texcoord]{eso-pic}
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\RequirePackage{pict2e,picture,ifdraft,booktabs}
\RequirePackage{varwidth,qrcode}
% ===== Behandlung der Autoren (siehe ptb-abstracts.sty ) =====

\newcommand*\first@author{}
\def\author#1{}
\def\@author{}

\renewcommand\footnotetext[2][]{%
  \textsuperscript{#1}\,#2\\
}

\newcommand\PTB@dec@footnotemark[1][]{%
  \addtocounter{footnote}{-1}%
  \begingroup
    \edef\PTB@tempa{#1}%
    \ifx\PTB@tempa\@empty\footnotemark\else\footnotemark[#1]\fi
  \endgroup
}

\newcommand\PTB@fnmark[1]{%
  \begingroup
    \unrestored@protected@xdef\@thefnmark{#1}%
  \endgroup
  \@footnotemark}  

\newcommand\PTB@isnum[1]{%
  \if!\ifnum9<1#1!\else_\fi\expandafter\@firstoftwo
  \else\expandafter\@secondoftwo\fi}%

\newcommand\Author{%
  \begingroup
    \@ifstar{\@tempswatrue\@Author}{\@tempswafalse\@Author}}

Rolf Niepraschk's avatar
Rolf Niepraschk committed
\newcommand\@Author[2][]{%     \PTB@tempf=[!],\PTB@tempb={Firstname}
  \def\PTB@tempf{#1}\def\PTB@tempb{#2}% TODO: ggf. weiterer Optionen in #1
\newcommand\@@Author[2][]{%    \PTB@tempc=[alt. Firstname],\PTB@tempd={Surname}
Rolf Niepraschk's avatar
Rolf Niepraschk committed
  \def\PTB@tempc{#1}\def\PTB@tempd{#2}% TODO: \PTB@tempc unsinnig, oder?
\newcommand\@@@Author[1][]{%   \PTB@tempe=[Address]
    \def\PTB@tempe{#1}%
    \ifx\PTB@tempd\@empty
      % Empty Surname = Addition to the previous author
Rolf Niepraschk's avatar
Rolf Niepraschk committed
      \g@addto@macro\@author{\PTB@fnmark{,}}% TODO: ???
    \else
      \ifx\@author\@empty
        \xdef\@author{\PTB@tempb~\PTB@tempd}%
        \xdef\first@author{\PTB@tempb~\PTB@tempd}%
      \else
        \expandafter\g@addto@macro\expandafter\@author
          \expandafter{\expandafter\and\PTB@tempb~}%
        \expandafter\g@addto@macro\expandafter\@author
          \expandafter{\PTB@tempd}% I like it ;-(
      \fi
    \fi
    \if@tempswa
      %                --> \Author*
      \g@addto@macro\@author{\PTB@dec@footnotemark}%
    \fi
Rolf Niepraschk's avatar
Rolf Niepraschk committed
    \def\reserved@a{!}%
    \ifx\PTB@tempf\reserved@a
      \xdef\first@author{\PTB@tempb~\PTB@tempd}% alternat. first author
    \fi
    \ifx\PTB@tempa\@empty\else
      \expandafter\g@addto@macro\expandafter\@author
        \expandafter{\expandafter\PTB@fnmark\expandafter{\PTB@tempa}}%
    \ifx\PTB@tempe\@empty\else
      \if@tempswa
        \g@addto@macro\@author{\PTB@fnmark{,}}%
      \fi
      \PTB@isnum{\PTB@tempe}{%
        \expandafter\g@addto@macro\expandafter\@author%
          \expandafter{\expandafter\PTB@fnmark\expandafter{\PTB@tempe}}%
      }{%
        \expandafter\g@addto@macro\expandafter\@author%
          \expandafter{\expandafter\thanks\expandafter{\PTB@tempe}}%
      }%
    \fi
  \endgroup
}

\let\PTB@thanks\thanks
\renewcommand\thanks[2][]{%
  \begingroup
    \def\PTB@tempa{#2}%
    \ifx\PTB@tempa\@empty
      \footnotemark[\value{footnote}]%
    \else
      \PTB@thanks{#2}%
    \fi
  \endgroup
}%

%\renewcommand*\labelitemi{\textbullet}
%\renewcommand*\labelitemii{\Huge$\m@th\circ$}
%\renewcommand*\labelitemii{\textasteriskcentered}
%\renewcommand*\labelitemii{\textperiodcentered}
%\renewcommand*\labelitemii{$\m@th\diamond$}
%\renewcommand*\labelitemii{$\m@th\triangleright$}%
\ifdim\paperheight>\paperwidth
  \setlength\PTB@scale@base{\paperheight}
  \PTBlandscapefalse
\else
  \setlength\PTB@scale@base{\paperwidth}
  \PTBlandscapetrue
\fi

\newcommand*\scaleFontSizes[1]{%
  \global\PTB@default@fsize=#1\PTB@default@fontsize@base
}
\@onlypreamble\scaleFontSizes
\newcommand*\scaleTitleFontSize[1]{%
  \global\PTB@default@title@fontsize=#1\PTB@default@title@fontsize@base
}
\@onlypreamble\scaleTitleFontSize

\setlength\PTB@default@title@fontsize{0.0315101893474\PTB@scale@base}%  106.6pt bei A0

\newcommand*\PTB@scaleTitleFontSize[1]{%
  \PTB@tempdima=\PTB@default@title@fontsize
  \PTB@tempdima=#1\PTB@tempdima
  \PTB@tempdimb=1.14\PTB@tempdima
  \xdef\titleFontSize{\noexpand\@setfontsize
    \noexpand\titleFontSize{\the\PTB@tempdima}{\the\PTB@tempdimb}}%
}

\def\authorFontSize{\@setfontsize\authorFontSize{%
  \PTB@default@author@fontsize}{1.2\PTB@default@author@fontsize}}
\def\footFontSize{\@setfontsize\footFontSize{%
  \PTB@default@foot@fontsize}{1.2\PTB@default@foot@fontsize}}
  
\newcommand*\scaleFont[1]{%
  \PTB@tempdima=\f@size pt \PTB@tempdima=#1\PTB@tempdima
  \PTB@tempdimb=\f@baselineskip \PTB@tempdimb=#1\PTB@tempdimb
  \edef\f@size{\strip@pt\PTB@tempdima}%
  \edef\f@baselineskip{\the\PTB@tempdimb}%
  \fontsize{\f@size}{\f@baselineskip}%
  \selectfont
}

\ifcase \PTB@layout
    % 0
  \input{ptbposter-2018.clo}
\or % 1
  \input{ptbposter-2020.clo}
\fi

\scaleFontSizes{1}%     wird ggf. in Präambel noch mal geändert.
\scaleTitleFontSize{1}% wird ggf. in Präambel noch mal geändert. 

  % Skalierungen in der Präambel sind passiert.
  \changefontsizes{\the\PTB@default@fsize}%
  \KOMAoptions{headings=normal,parskip=half}
  \normalsize
  \setlength\PTB@texthsep{.75em}%
  \setlength\PTB@textvsep{.75em}%
  \setlength\PTB@maxtitleheight{0.057\PTB@scale@base}% 
  \setlength\PTB@framethickness{0.00168208578994\PTB@scale@base}%
  \setlength\fboxsep{0.00355\PTB@scale@base}   %   3pt bei A4
  \setlength\fboxrule{0.0004722\PTB@scale@base}% 0.4pt bei A4
  \setlength\PTB@leftmargin{0.5\dimexpr\paperwidth-\PTB@framewidth}%
    \@tempdima=\dimexpr\PTB@leftmargin+\PTB@texthsep %
  \geometry{%
    verbose,
    top=\dimexpr\PTB@topmargin+\PTB@textvsep,%
    left=\@tempdima,
    right=\@tempdima,
    textheight=\dimexpr\PTB@frameheight-2\PTB@textvsep,%
    columnsep=1.5em,hcentering}
Rolf Niepraschk's avatar
Rolf Niepraschk committed

  \setlength\emergencystretch{3em}%
Rolf Niepraschk's avatar
Rolf Niepraschk committed

  \@ifpackageloaded{multicol}{%
    \def\setemergencystretch#1#2{}%
Rolf Niepraschk's avatar
Rolf Niepraschk committed

  \RequirePackage{enumitem}
Rolf Niepraschk's avatar
Rolf Niepraschk committed
  \setlist{leftmargin=.6em,labelsep=.3em,nosep,topsep=.5em,itemsep=.25em}
  \setlist[1]{labelindent=1em}
\KOMAoptions{captions=oneline}
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\newcommand*\ptb@figure{%
  \trivlist\item\relax
Rolf Niepraschk's avatar
Rolf Niepraschk committed
    \minipage{\linewidth}%
      \def\@captype{figure}%
}
\newcommand*\ptb@table{%
  \trivlist\item\relax
Rolf Niepraschk's avatar
Rolf Niepraschk committed
    \minipage{\linewidth}%
      \def\@captype{table}%
}

\newcommand*\ptb@endfigtab{%
    \endminipage
  \endtrivlist
}

\renewenvironment{figure}[1][]{%
  \ptb@figure
}{\ptb@endfigtab}
\renewenvironment{figure*}[1][]{%
  \ptb@figure
}{\ptb@endfigtab}
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\renewenvironment{table}[1][]{%
Rolf Niepraschk's avatar
Rolf Niepraschk committed
  \ptb@table
}{\ptb@endfigtab}
\renewenvironment{table*}[1][]{%
Rolf Niepraschk's avatar
Rolf Niepraschk committed
  \ptb@table
}{\ptb@endfigtab}
\addtokomafont{caption}{\small}
\addtokomafont{captionlabel}{\sffamily\bfseries}
\setcapindent{1em}
%\setcapwidth[l]{\linewidth}
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\AtBeginDocument{%
\RedeclareSectionCommand[%
  style=section,%
  level=1,%
  indent=\z@,%
Rolf Niepraschk's avatar
Rolf Niepraschk committed
  beforeskip=-2ex \@plus -1ex \@minus -.2ex,%
Rolf Niepraschk's avatar
Rolf Niepraschk committed
  afterskip=0.4ex \@plus.2ex,%
Rolf Niepraschk's avatar
Rolf Niepraschk committed
  tocindent=0pt,%
  tocnumwidth=1.5em%
]{section}
\RedeclareSectionCommand[%
  style=section,%
  level=2,%
  indent=\z@,%
  beforeskip=-1.2ex\@plus -1ex \@minus -.2ex,%
  afterskip=0.1ex \@plus .2ex,%
  tocindent=1.5em,%
  tocnumwidth=2.3em%
]{subsection}
\RedeclareSectionCommand[%
  style=section,%
  level=3,%
  indent=\z@,%
  beforeskip=-1.2ex\@plus -1ex \@minus -.2ex,%
  afterskip=0.1ex \@plus .2ex,%
  tocindent=3.8em,%
  tocnumwidth=3.2em%
]{subsubsection}
\RedeclareSectionCommand[%
  style=section,%
  level=4,%
  indent=\z@,%
  beforeskip=1.2ex \@plus1ex \@minus.2ex,%
  afterskip=-1em,%
  tocindent=7.0em,%
  tocnumwidth=4.1em%
]{paragraph}
\RedeclareSectionCommand[%
  style=section,%
  level=5,%
  indent=\scr@parindent,%
  beforeskip=1.2ex \@plus1ex \@minus .2ex,%
  afterskip=-1em,%
  tocindent=10em,%
  tocnumwidth=5em%
]{subparagraph}
}

\setcounter{secnumdepth}{-2}
\renewcommand*\maketitle[1][1]{}
\renewcommand*\tableofcontents{}
\pagestyle{empty}
Rolf Niepraschk's avatar
Rolf Niepraschk committed
\raggedbottom