| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552 |
- % timetable.sty - The LaTeX timetable stylesheet V1.4
- % http://www.planetk.de/index.php?title=Stundenplan
- %
- % Copyright (C) 2007-2009 Pascal Gwosdek
- % Modifications (C) 2008 Daniel Bader
- %
- % This program is free software; you can redistribute it and/or modify it
- % under the terms of the GNU General Public License as published by the
- % Free Software Foundation; either version 3 of the License, or (at your
- % option) any later version.
- %
- % This program is distributed in the hope that it will be useful, but
- % WITHOUT ANY WARRANTY; without even the implied warranty of
- % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
- % Public License for more details.
- %
- % You should have received a copy of the GNU General Public License along
- % with this program; if not, see <http://www.gnu.org/licenses/>.
- %
- \NeedsTeXFormat{LaTeX2e}
- \ProvidesPackage{timetable}
- \RequirePackage{ifthen, calc, color}
- % Preset the colors
- \definecolor{ttframecol1}{rgb}{0.8,0.8,0.8}
- \definecolor{ttframecol2}{rgb}{0.7,0.7,0.7}
- \definecolor{ttfontcolor}{rgb}{0.0,0.0,0.0}
- \definecolor{ttlinecol1}{rgb}{0.0,0.0,0.0}
- \definecolor{ttlinecol2}{rgb}{0.0,0.0,0.0}
- % Simple for loop construct as proposed by N. Setzer
- \newcommand{\@ttforloop}[5][1]
- {
- \setcounter{#2}{#3}
- \ifthenelse{#4}
- {
- #5
- \addtocounter{#2}{#1}
- \@ttforloop[#1]{#2}{\value{#2}}{#4}{#5}
- }
- {}
- }
- % SansSerif font
- \newcommand{\timetablefont}{\sffamily}
- \newcommand{\@ttfont}{\timetablefont\selectfont}
- % Dimensions
- \newlength{\@rowheight}
- \newlength{\@colwidth}
- \newcounter{@rowcount}
- \newcounter{@colcount}
- \newlength{\@textframe}
- \newlength{\@bottomspace}
- \newlength{\@totalheight}
- \newlength{\@totalwidth}
- \newlength{\@toprowheight}
- % Arbitrary stuff
- \newcounter{@timemarks}
- \newcounter{@daymarks}
- \newcounter{@topheight}
- \newcounter{@printtimestamps}
- \newlength{\@cornerradius}
- \newcounter{@frametype}
- \newcounter{@framevalign}
- % Predefines
- \setlength{\@cornerradius}{3pt}
- \setcounter{@frametype}2
- \setcounter{@framevalign}2
- \setlength{\@rowheight}{1.2cm}
- \setlength{\@colwidth}{2.8cm}
- \setlength{\@textframe}{0.8mm}
- \setlength{\@bottomspace}{8pt}
- \setcounter{@rowcount}9
- \setcounter{@colcount}5
- \setcounter{@topheight}{2}
- \setcounter{@printtimestamps}{0}
- \newcommand{\@bottomstyle}{\scriptsize}
- \newcommand{\@timestyle}{\tiny}
- % Event declarations
- \newlength{\@startposx}
- \newlength{\@startposy}
- \newlength{\@eventheight}
- \newlength{\@newcolwidth}
- \newlength{\@newrowheight}
- \newlength{\@newcolleft}
- \newlength{\@newrowtop}
- % Helpers
- \newcounter{@hourslot}
- \newcounter{@durationslots}
- \newcounter{@minutesperslot}
- \newcounter{@timetablehelp}
- \newcounter{@day}
- \newcounter{@column}
- \newcounter{@row}
- \newcounter{@hour}
- \newcounter{@minute}
- \newcounter{@minuteStep}
- \newcounter{@startHour}
- \newcounter{@startMinute}
- \newcounter{@endHour}
- \newcounter{@endMinute}
- \newcounter{@hoursset}
- \setcounter{@hoursset}{0}
- \newcounter{@hourzero}
- \newcommand{\seteventcornerradius}[1]
- {
- \setlength{\@cornerradius}{#1}
- \ifthenelse{\strip@pt\@cornerradius > 7}
- {
- \setlength{\@cornerradius}{7pt}
- }
- {
- \ifthenelse{\strip@pt\@cornerradius < 0}
- {
- \setlength{\@cornerradius}{0pt}
- }
- {}
- }
- }
- \newcommand{\settopheight}[1]
- {
- \addtocounter{@rowcount}{#1-\value{@topheight}}
- \setcounter{@topheight}{#1}
- }
- \newcommand{\setframetype}[2][c]
- {
- % Set frame type
- \ifthenelse{#2 < 1}
- {
- % Lines
- \setcounter{@frametype}{1}
- }
- {
- \ifthenelse{#2 > 2}
- {
- % Checkerboard
- \setcounter{@frametype}{2}
- }
- {
- \setcounter{@frametype}{#2}
- }
- }
- % Caption vertical alignment
- \ifthenelse{\equal{#1}{b}}
- {\setcounter{@framevalign}{1}}
- {\ifthenelse{\equal{#1}{t}}
- {\setcounter{@framevalign}{0}}
- {\setcounter{@framevalign}{2}}
- }
- }
- \newcommand{\setprinttimestamps}[1]
- {
- \setcounter{@printtimestamps}{#1}
- }
- \newcommand{\setbottomstyle}[1]
- {
- \renewcommand{\@bottomstyle}{#1}
- }
- \newcommand{\settimestyle}[1]
- {
- \renewcommand{\@timestyle}{#1}
- }
- \newcommand{\setbottomspace}[1]
- {
- \setlength{\@bottomspace}{#1}
- }
- \newcommand{\@fmtTime}[2]
- {
- % Arguments: {hour}{minute}
- \ifthenelse{\value{#1} < 10}{0}{}\arabic{#1}:\ifthenelse{\value{#2} < 10}{0}{}\arabic{#2}
- }
- \newcommand{\slotevent}[7]
- {
- % Arguments: {x}{y}{duration}{title}{lecturer}{place}{type}{textcolor}
- \renewcommand{\baselinestretch}{0.75}\normalsize
- \setlength{\@startposx}{#1\@colwidth+0.5pt}
- \setlength{\@startposy}{-#2\@rowheight-1.5pt}
- \setlength{\@eventheight}{#3\@rowheight-1pt}
- \addtolength{\@startposy}{-\@eventheight}
- \addtolength{\@startposx}{\@cornerradius}
- \put(\strip@pt\@startposx,\strip@pt\@startposy){\textcolor{@timetable#7block}{\rule[-\dp\strutbox]{\@colwidth-1pt-2\@cornerradius}{\@eventheight}}}
- \addtolength{\@startposx}{-\@cornerradius}
- \addtolength{\@startposy}{\@cornerradius}
- \put(\strip@pt\@startposx,\strip@pt\@startposy){\textcolor{@timetable#7block}{\rule[-\dp\strutbox]{\@colwidth-1pt}{\@eventheight-2\@cornerradius}}}
- \addtolength{\@startposy}{-\@cornerradius}
- \setlength{\@cornerradius}{2\@cornerradius}
- \ifthenelse{\strip@pt\@cornerradius > 0}
- {
- % Left rounded corners
- \addtolength{\@startposx}{.5\@cornerradius}
- \addtolength{\@startposy}{.5\@cornerradius-\dp\strutbox}
- \put(\strip@pt\@startposx,\strip@pt\@startposy){\textcolor{@timetable#7block}{\circle*{\strip@pt\@cornerradius}}}
- \addtolength{\@startposy}{-.5\@cornerradius+\dp\strutbox}
- \addtolength{\@startposy}{-.5\@cornerradius-\dp\strutbox+\@eventheight}
- \put(\strip@pt\@startposx,\strip@pt\@startposy){\textcolor{@timetable#7block}{\circle*{\strip@pt\@cornerradius}}}
- \addtolength{\@startposy}{.5\@cornerradius+\dp\strutbox-\@eventheight}
- \addtolength{\@startposx}{-.5\@cornerradius}
- % Right rounded corners
- \addtolength{\@startposx}{-.5\@cornerradius+\@colwidth-1pt}
- \addtolength{\@startposy}{.5\@cornerradius-\dp\strutbox}
- \put(\strip@pt\@startposx,\strip@pt\@startposy){\textcolor{@timetable#7block}{\circle*{\strip@pt\@cornerradius}}}
- \addtolength{\@startposy}{-.5\@cornerradius+\dp\strutbox}
- \addtolength{\@startposy}{-.5\@cornerradius-\dp\strutbox+\@eventheight}
- \put(\strip@pt\@startposx,\strip@pt\@startposy){\textcolor{@timetable#7block}{\circle*{\strip@pt\@cornerradius}}}
- \addtolength{\@startposy}{.5\@cornerradius+\dp\strutbox-\@eventheight}
- \addtolength{\@startposx}{.5\@cornerradius-\@colwidth-1pt}
- }{}
- \setlength{\@cornerradius}{0.5\@cornerradius}
- \setlength{\@newrowheight}{\@rowheight}
- \addtolength{\@newrowheight}{-2\@textframe-1pt}
- \setlength{\@newcolwidth}{\@colwidth}
- \addtolength{\@newcolwidth}{-2\@textframe-1pt}
- \setlength{\@newrowtop}{-#2\@rowheight}
- \addtolength{\@newrowtop}{-2\@textframe}
- \setlength{\@newcolleft}{#1\@colwidth+.5pt}
- \addtolength{\@newcolleft}{\@textframe}
- \ifthenelse{\value{@hoursset} = 0}{\setcounter{@printtimestamps}{0}}{}
- % Title
- \addtolength{\@newrowtop}{-1pt}
- \put(\strip@pt\@newcolleft,\strip@pt\@newrowtop)
- {\begin{minipage}[t]{\@newcolwidth}%
- \@ttfont\raggedright\color{@timetable#7text}%
- \ifthenelse{\value{@printtimestamps} > 0}%
- {{\@timestyle \@fmtTime{@startHour}{@startMinute}}%
- \ifthenelse{\value{@printtimestamps} = 2}%
- {{\@timestyle -- \@fmtTime{@endHour}{@endMinute}}}%
- {}%
- \\}%
- {}%
- {#4}%
- \end{minipage}}
- \addtolength{\@newrowtop}{1pt}
- \renewcommand{\baselinestretch}{0.5}\normalsize
- \setlength{\@newrowtop}{-#2\@rowheight-#3\@rowheight}
- \addtolength{\@newrowtop}{2\@textframe + \@bottomspace}
- % Lecturer
- \put(\strip@pt\@newcolleft,\strip@pt\@newrowtop)
- {\begin{minipage}[t]{0.6\@newcolwidth}%
- \@ttfont\raggedright\color{@timetable#7text}{\@bottomstyle #5%
- \vphantom{A}}
- \ifthenelse{\value{@printtimestamps} = 1}%
- {{\@timestyle \@fmtTime{@endHour}{@endMinute}}}%
- {}%
- \end{minipage}}
- \setlength{\@newcolleft}{#1\@colwidth + \@colwidth}
- \addtolength{\@newcolleft}{-\@textframe-0.4\@newcolwidth}
- % Location
- \put(\strip@pt\@newcolleft,\strip@pt\@newrowtop)
- {\begin{minipage}[t]{0.4\@newcolwidth}%
- \@ttfont\raggedleft\color{@timetable#7text}{\@bottomstyle #6%
- \vphantom{A}}%
- \end{minipage}}
- \renewcommand{\baselinestretch}{1.0}\normalsize
- }
- \newcommand{\event}[7]
- {
- % Arguments: {@day}{@start}{@end}{title}{lecturer}{place}{type}
- % Use the time format, if hours are defined, and a slot number otherwise:
- \ifthenelse{\value{@hoursset} > 0}
- {
- \setcounter{@startHour}{#2 / 100}
- \setcounter{@startMinute}{#2 - #2 / 100 * 100}
- \setcounter{@endHour}{#3 / 100}
- \setcounter{@endMinute}{#3 - #3 / 100 * 100}
-
- \setcounter{@hourslot}{((#2 - \value{@hourzero}) / 100 * (60 / \value{@minutesperslot})) + 2 + ((#2 - #2 / 100 * 100) / \value{@minutesperslot})}
- \setcounter{@durationslots}{((#3 - \value{@hourzero}) / 100 * (60 / \value{@minutesperslot})) + 2 + ((#3 - #3 / 100 * 100) / \value{@minutesperslot}) - \value{@hourslot}}
- % Compensate for 24h wrap
- \ifthenelse{\value{@hourslot} < 0}{\addtocounter{@hourslot}{(24 * (60 / \value{@minutesperslot}))}}{}
- \addtocounter{@hourslot}{\value{@topheight}-2}
- }
- {
- \setcounter{@hourslot}{#2}
- \setcounter{@durationslots}{#3-#2}
- }
- \slotevent{#1}{\value{@hourslot}}{\value{@durationslots}}{#4}{#5}{#6}{#7}
- }
- \newcommand{\legend}[3]
- {
- % Arguments: <horizontal> <vertical> <text>
- % Lets you manually set slot contents (use this really rarely and
- % SEE: \daymark, \timemark )
- \setlength{\@newrowtop}{\@rowheight*(-#2+1)-\dp\strutbox}
- \setlength{\@newcolleft}{#1\@colwidth-\@colwidth}
- \ifthenelse{\value{@hoursset} = 0}
- {\setcounter{@minutesperslot}{60}}
- {}
- % Select frame type
- \ifthenelse{\value{@frametype} = 1}
- { % Lines
- \ifthenelse{#1 = 1}{\put(\strip@pt\@newcolleft,\strip@pt\@newrowtop){\textcolor{ttframecol2}{\rule{\@colwidth}{1pt}}}}{}
- \addtolength{\@newrowtop}{-\value{@topheight}\@rowheight}
- \addtolength{\@newcolleft}{-1pt}
- \ifthenelse{#2 = 1}{\put(\strip@pt\@newcolleft,\strip@pt\@newrowtop){\textcolor{ttframecol2}{\rule{1pt}{\value{@topheight}\@rowheight}}}}{}
- \addtolength{\@newcolleft}{1pt}
- \addtolength{\@newrowtop}{\value{@topheight}\@rowheight}
- }
- { % Checkerboard
- % Horizontal stripe
- \ifthenelse{#2 = 1}
- {\setcounter{@timetablehelp}{#1 * \real{0.5} * \real{2.0}}
- \ifthenelse{\value{@timetablehelp} = #1}
- {\addtolength{\@newrowtop}{-\value{@topheight}\@rowheight}
- \put(\strip@pt\@newcolleft,\strip@pt\@newrowtop)
- {\textcolor{ttframecol2}{\rule{\@colwidth}{\value{@topheight}\@rowheight}}}
- \addtolength{\@newrowtop}{\value{@topheight}\@rowheight}
- }
- {}
- }
- {}
- % Vertical stripe
- \ifthenelse{#1 = 1}
- {\setcounter{@timetablehelp}{(((#2-\value{@topheight}-1) * \value{@minutesperslot} / 120) * 2) - ((#2-\value{@topheight}-1) * \value{@minutesperslot} / 60)}
- \ifthenelse{\value{@timetablehelp} = 0}
- {\setcounter{@timetablehelp}{60 / \value{@minutesperslot}}
- \addtolength{\@newrowtop}{-\value{@timetablehelp}\@rowheight}
- \put(\strip@pt\@newcolleft,\strip@pt\@newrowtop)
- {\textcolor{ttframecol2}{\rule{\@colwidth}{\value{@timetablehelp}\@rowheight}}}
- \addtolength{\@newrowtop}{\value{@timetablehelp}\@rowheight}
- }
- {}
- }
- {}
- }
- % Print text
- \addtolength{\@newcolleft}{\@textframe}
- \addtolength{\@newrowtop}{-\@textframe-\heightof{\large #3}}
- % Optionally move caption to middle or bottom
- \ifthenelse{\value{@framevalign} > 0}
- {
- \ifthenelse{#1 = 1}
- {
- \addtolength{\@newrowtop}{(- \@rowheight * (60 / \value{@minutesperslot}) + 2\@textframe + \heightof{\Large #3})/\value{@framevalign}}
- }
- {
- \ifthenelse{#2 = 1}
- {
- \addtolength{\@newrowtop}{(- \value{@topheight}\@rowheight + 2\@textframe + \heightof{\Large #3})/\value{@framevalign}}
- }{}
- }
- }{}
- \put(\strip@pt\@newcolleft,\strip@pt\@newrowtop){\makebox{\textcolor{ttfontcolor}{\@ttfont\large #3}}}
- }
- \newcommand{\timemark}[1]
- {
- \stepcounter{@timemarks}
- \legend 1 {\value{@timemarks}} {#1}
- }
- \newcommand{\daymark}[1]
- {
- \stepcounter{@daymarks}
- \legend {\value{@daymarks}} 1 {#1}
- }
- \newcommand{\defineevent}[7]
- {
- \definecolor{@timetable#1block}{rgb}{#2, #3, #4}
- \definecolor{@timetable#1text} {rgb}{#5, #6, #7}
- }
- \newcommand{\printheading}[1]
- {
- {\@ttfont\LARGE #1}\par\vspace{5mm}\par
- }
- \newcommand{\setslotsize}[2]
- {
- % Arguments: <width> <height>
- % Defines the slot size
- \setlength{\@rowheight}{#2}
- \setlength{\@colwidth}{#1}
- }
- \newcommand{\setslotcount}[2]
- {
- % Arguments: <days> <hours per day>
- % Defines the number of slots in both dimensions
- \setcounter{@colcount}{#1}
- \setcounter{@rowcount}{#2+\value{@topheight}}
- \stepcounter{@colcount}
- }
- \newcommand{\settextframe}[1]
- {
- % Arguments: <width>
- % Defines the width of the border of each entry (i.e. the
- % distance between outer border and text)
- \setlength{\@textframe}{#1}
- }
- \newcommand{\hours}[3]
- {
- % Arguments: <start hour> <minute stepping> <print end time?>
- % Automatically sets the time slots to full hours, beginning with <start hour>
- \setcounter{@hoursset}{1}
- \setcounter{@hourzero}{(#1 * 100)}
- \setcounter{@hour}{#1}
- \setcounter{@minute}{0}
- \setcounter{@minuteStep}{#2}
- \setcounter{@minutesperslot}{\value{@minuteStep}}
- \@ttforloop{@row}{\value{@topheight}}{\value{@row} < \value{@rowcount}}
- {
- \ifthenelse{\value{@minute} = 0}{
- \timemark{\@fmtTime{@hour}{@minute}\ifthenelse{#3 > 0}{-\setcounter{@hour}{\value{@hour}+1}\@fmtTime{@hour}{@minute}\setcounter{@hour}{\value{@hour}-1}}{}}
- }{\stepcounter{@timemarks}}
- \addtocounter{@minute}{#2}
- \ifthenelse{\value{@minute} = 60}{\stepcounter{@hour}\setcounter{@minute}{0}}{}
- \ifthenelse{\value{@hour} > 23}{\addtocounter{@hour}{-24}}{}
- }
- }
- \newcommand{\englishdays}[1]
- {
- % Arguments: <number of start day>
- % Macro for the english week days
- \setcounter{@day}{#1}
- \@ttforloop{@column}{1}{\value{@column} < \value{@colcount}}
- {
- \ifthenelse{\equal{\value{@day}}1}{\daymark{Monday}}{}
- \ifthenelse{\equal{\value{@day}}2}{\daymark{Tuesday}}{}
- \ifthenelse{\equal{\value{@day}}3}{\daymark{Wednesday}}{}
- \ifthenelse{\equal{\value{@day}}4}{\daymark{Thursday}}{}
- \ifthenelse{\equal{\value{@day}}5}{\daymark{Friday}}{}
- \ifthenelse{\equal{\value{@day}}6}{\daymark{Saturday}}{}
- \ifthenelse{\equal{\value{@day}}7}{\daymark{Sunday}}{}
- \stepcounter{@day}
- \ifthenelse{\value{@day} > 7}{\addtocounter{@day}{-7}}{}
- }
- }
- \newcommand{\germandays}[1]
- {
- % Arguments: <number of start day>
- % Macro for the english week days
- \setcounter{@day}{#1}
- \@ttforloop{@column}{1}{\value{@column} < \value{@colcount}}
- {
- \ifthenelse{\equal{\value{@day}}1}{\daymark{Montag}}{}
- \ifthenelse{\equal{\value{@day}}2}{\daymark{Dienstag}}{}
- \ifthenelse{\equal{\value{@day}}3}{\daymark{Mittwoch}}{}
- \ifthenelse{\equal{\value{@day}}4}{\daymark{Donnerstag}}{}
- \ifthenelse{\equal{\value{@day}}5}{\daymark{Freitag}}{}
- \ifthenelse{\equal{\value{@day}}6}{\daymark{Samstag}}{}
- \ifthenelse{\equal{\value{@day}}7}{\daymark{Sonntag}}{}
- \stepcounter{@day}
- \ifthenelse{\value{@day} > 7}{\addtocounter{@day}{-7}}{}
- }
- }
- \newenvironment{timetable}%
- {\noindent%
- % Arguments: None
- % Starts a new timetable
- %
- % Set the new layout setting
- \setlength{\@totalheight}{-\value{@rowcount}\@rowheight}%
- \setlength{\@totalwidth}{\value{@colcount}\@colwidth}%
- %
- % Reset the counters
- \setcounter{@timemarks}{\value{@topheight}}%
- \setcounter{@daymarks}{1}%
- %
- % Minipage to correct bounding box
- \begin{minipage}[t][-\@totalheight]{\@totalwidth}
- %
- % Begin. Note the offset hack of the picture, this is to make it consistent to the old pstricks package.
- \begin{picture}(\strip@pt\@totalwidth,\strip@pt\@totalheight)(0,-\strip@pt\baselineskip)
- % Draw the grey frame
- \put(0,\strip@pt\@totalheight){\textcolor{ttframecol1}{\rule[-\dp\strutbox]{\@colwidth}{-\@totalheight}}}
- \setlength{\@toprowheight}{\value{@topheight}\@rowheight}
- \put(0,-\strip@pt\@toprowheight){\textcolor{ttframecol1}{\rule[-\dp\strutbox]{\@totalwidth}{\@toprowheight}}}
- }
- {
- % Draw the contours
- % Inner
- \addtolength{\@colwidth}{-1pt}
- \put(\strip@pt\@colwidth,-\strip@pt\@toprowheight){\textcolor{ttlinecol2}{\rule[-\dp\strutbox]{\@totalwidth-\@colwidth+1pt}{1pt}}}
- \put(\strip@pt\@colwidth,\strip@pt\@totalheight){\textcolor{ttlinecol2}{\rule[-\dp\strutbox]{1pt}{-\@totalheight-\@toprowheight}}}
- \addtolength{\@colwidth}{1pt}
- % Outer
- \put(0,0){\textcolor{ttlinecol1}{\rule[-\dp\strutbox]{\@totalwidth}{1pt}}}
- \put(0,\strip@pt\@totalheight){\textcolor{ttlinecol1}{\rule[-\dp\strutbox]{1pt}{-\@totalheight}}}
- \put(\strip@pt\@totalwidth,\strip@pt\@totalheight){\textcolor{ttlinecol1}{\rule[-\dp\strutbox]{1pt}{-\@totalheight+1pt}}}
- \addtolength{\@totalheight}{-0.5pt}
- \put(0,\strip@pt\@totalheight){\textcolor{ttlinecol1}{\rule[-\dp\strutbox]{\@totalwidth}{1pt}}}
- \addtolength{\@totalheight}{0.5pt}
- \end{picture}
- \end{minipage}
- }
|