diff options
author | Karl Berry <karl@freefriends.org> | 2010-04-18 18:05:20 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2010-04-18 18:05:20 +0000 |
commit | 37f1831f5559f99501eb0123e22795ae5300650b (patch) | |
tree | e6553a1abced92a0d91df26466c16f087ab60c6c /Master/texmf-dist | |
parent | b26ee2030e017af00dee74ea37ca13189caa593c (diff) |
new latex package mdframed 0.3 (16apr10)
git-svn-id: svn://tug.org/texlive/trunk@17904 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist')
-rw-r--r-- | Master/texmf-dist/doc/latex/mdframed/README | 6 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/mdframed/mdframed-doc.pdf | bin | 0 -> 526516 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/mdframed/mdframed-doc.tex | 233 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/mdframed/mdframed.sty | 661 |
4 files changed, 900 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/mdframed/README b/Master/texmf-dist/doc/latex/mdframed/README new file mode 100644 index 00000000000..95ffcb58d34 --- /dev/null +++ b/Master/texmf-dist/doc/latex/mdframed/README @@ -0,0 +1,6 @@ +Working with the command \fbox or \fcolorbox, one has to +handle page breaks by hand. The present package defines the +environment mdframed which automatically deals with page breaks. + +Author's name: Marco Daniel +License type: lppl
\ No newline at end of file diff --git a/Master/texmf-dist/doc/latex/mdframed/mdframed-doc.pdf b/Master/texmf-dist/doc/latex/mdframed/mdframed-doc.pdf Binary files differnew file mode 100644 index 00000000000..99208c55a69 --- /dev/null +++ b/Master/texmf-dist/doc/latex/mdframed/mdframed-doc.pdf diff --git a/Master/texmf-dist/doc/latex/mdframed/mdframed-doc.tex b/Master/texmf-dist/doc/latex/mdframed/mdframed-doc.tex new file mode 100644 index 00000000000..515a577c2dd --- /dev/null +++ b/Master/texmf-dist/doc/latex/mdframed/mdframed-doc.tex @@ -0,0 +1,233 @@ +%% Documentation of the package mdframed.sty +\def\mdversion{version 0.3} +\documentclass[american,11pt]{article} +\usepackage{geometry} +\geometry{left=3cm,right=3cm,top=2cm,bottom=2cm} +\usepackage{babel} +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +\newif\ifmdframedcompile +\mdframedcompiletrue %% use lucida als default +\IfFileExists{lucidabr}{% + \usepackage{textcomp} + \ifmdframedcompile + \usepackage[de,T1,altbullet]{lucidabr} + \else + \usepackage[T1,altbullet]{lucidabr} + \fi + }{% + \usepackage[scaled]{libertine} +} +\usepackage{xcolor} +\usepackage[babel]{microtype} +\usepackage{array,tabularx} +%%Load the the package itselfs +\usepackage{mdframed} +\usepackage{amsmath,amsthm} +\newtheorem{mdtheorem}{Theorem}[section] +\newenvironment{theorem}{% + \begin{mdframed}[linewidth=2,margin=40,backgroundcolor=yellow,linecolor=blue]% + \begin{mdtheorem}% + }{% + \end{mdtheorem}% + \end{mdframed}% +} +\definecolor{titleblue}{rgb}{0,0,0.9} + +\usepackage{listings} +\lstnewenvironment{mdexample}[1][] + {\lstset{% + basicstyle=\small, + xleftmargin=20pt, + xrightmargin=20pt, + frame=single, + rulecolor=\color{titleblue}, + framesep=5pt, + framerule=1pt, + language=[LaTeX]TeX,#1, + columns=fixed, fontadjust=true,basewidth=0.5em,breakatwhitespace=true + }} +% morekeywords={\usepackage,\end,\begin,\lipsum,\documentclass,\newtheorem,\newenvironment,\section,\label\mbox{ }}}} + {} + +\usepackage{hyperref} +\hypersetup{% + colorlinks=true, + linkcolor=titleblue, + urlcolor=titleblue, + pdfauthor=Marco Daniel, + pdftitle=Documentation of mdframed, +} +\usepackage{xspace} +\usepackage{multicol} +\columnseprule0.4pt +\makeatletter +\begingroup + \text@command\relax + \global\let\xspace@check@icr\check@icr +\endgroup +\xspaceaddexceptions{\xspace@check@icr} + +\renewcommand\tableofcontents{% + \begin{multicols}{2}[\centering\textbf{\sffamily\Large\contentsname}] + \@starttoc{toc} + \end{multicols} +} +\makeatother +\newcommand*\mdoption[1]{\textsf{\bfseries\color{titleblue}#1}} +\newcommand*\mdname{\textsf{mdframed}\xspace} +\newcommand*\mdpack[1]{\textsf{#1}\xspace} +\newcommand*\mdsetting[1]{\textsf{#1}\xspace} +\newcommand*\mdcommand[1]{\texttt{\textbackslash #1}\xspace} + +\begin{document} + \vspace*{\baselineskip} + + \begin{center} + \color{titleblue} + \Large\bfseries \sffamily The \mdname package\footnote{Extending the package \texttt{framed.sty}.} + + \vspace*{0.5\baselineskip} + \normalfont\large\normalcolor auto-split frame environment + +\vspace*{.5\baselineskip} + \href{mailto:marco.daniel@mada-nada.de}{Marco Daniel}\footnote{With thanks to Heiko Oberdiek, Rolf Niepraschk and Herbert Voss.} \qquad \mdversion\ \qquad \today + \end{center} +\begin{abstract} +Working with the command \mdcommand{fbox} or \mdcommand{fcolorbox}, one has to handle page breaks by hand, +meaning that you have to split up the \mdcommand{fbox} into two. The present package defines the environment \mdname which automatically deals with page +breaks, whence the name \glqq breakable\grqq. + +By using \mdcommand{newenvironment} the user may choose between several individual designs. +\end{abstract} + +\tableofcontents + +\section{Motivation} +Many users wish to (further) emphasize lemmata, definitions, proofs etc.. The package mdframed allows to +create environments with breakable frames. I think an example is the best way to demonstrate the properties. + +The following example gives an idea of how to use mdframed. (For the theorem environment we use the package \mdpack{amsthm}.) +\begin{mdexample} +\usepackage{mdframed,amsthm} +\newtheorem{mdtheorem}{Theorem}[section] +\newenvironment{theorem}{% + \begin{mdframed}% + [linewidth=2,margin=40,backgroundcolor=yellow,linecolor=blue]% + \begin{mdtheorem}}{\end{mdtheorem}\end{mdframed}} +... +\begin{theorem}[Pythagorean theorem] + In any right triangle, the area of the square whose side is the hypotenuse + is equal to the sum of the areas of the squares whose sides are the two legs. + \begin{equation} + a^2+b^2=c^2 + \end{equation} +\end{theorem} +\end{mdexample} +\begin{theorem}[Pythagorean theorem] + In any right triangle, the area of the square whose side is the hypotenuse + (the side opposite the right angle) is equal to the sum of the areas of the + squares whose sides are the two legs (the two sides that meet at a right angle). + \begin{equation} + a^2+b^2=c^2 + \end{equation} +\end{theorem} + +\section{Syntax} +Load the package as usual: +\begin{mdexample} + \usepackage[<GLOBAL OPTIONS>]{mdframed} +\end{mdexample} + +The package defines only one environment with the following syntax +\begin{mdexample} + \begin{mdframed}[<LOCAL OPTIONS>] + <CONTENT> + \end{mdframed} +\end{mdexample} + +\section{Options} +The package allows to set global and local options which are explained below. +\begin{center} +\renewcommand{\arraystretch}{1.5} +\begin{tabularx}{\linewidth}{@{}lXl@{}} + \mdoption{linecolor}=<COLOR> & Sets the color of the line around the environment to <COLOR>. + & default=\mdsetting{black} \\ + \mdoption{backgroundcolor}=<COLOR> & Sets the color of the background of the environment to <COLOR>. + & default=\mdsetting{white} \\ + \mdoption{fontcolor}=<COLOR> & Sets the color of the contents of the environment to <COLOR>. + & default=\mdsetting{black} \\ + \mdoption{margin}=<LENGTH> & Sets the length of the margin text frame of the environment. + The basic unit of the length is pt. So it is possible to set + length to 6 which is equal to 6pt. + & default=\mdsetting{2pt} \\ + \mdoption{linewidth}=<LENGTH>& Sets the width of the line around the environment. + The basic unit of the length is pt. So it is possible to set + length to 6 which is equal to 6pt. + & default=\mdsetting{20pt} \\ + \mdoption{skipabove}=<LENGTH>& Sets an additional skip above the frame. This is + \bfseries only a global option. + & default=\mdsetting{0pt} \\ + \mdoption{skipbelow}=<LENGTH>& Sets an additional skip below the frame. This is + \bfseries only a global option. + & default=\mdsetting{0pt} \\ + \mdoption{xcolor}=<VALUE(S)>& By setting this key the package \mdpack{xcolor} will + be loaded with the given value(s). Without any value \mbox{\mdname} loads + the package \mdpack{color} without any options. This is + \bfseries only a global option. + & default=\mdsetting{none} \\ +\end{tabularx} +\end{center} +\clearpage +\section{Example} + +\begin{mdexample} + \documentclass[10pt]{article} + \usepackage[linewidth=10,% + margin=40,% + backgroundcolor=yellow, + linecolor=blue, + skipbelow=0, + skipabove=0]{mdframed} + \usepackage{amsmath,amsthm} + \newtheorem{mdlemma}{Lemma}[section] + \newenvironment{lemma}{% + \begin{mdframed}[linewidth=2,margin=40,% + backgroundcolor=red,linecolor=black]% + \begin{mdlemma}% + }{% + \end{mdlemma}% + \end{mdframed}% + } + \usepackage{lipsum} + \usepackage{hyperref} + \begin{document} + \section{foo} + \lipsum[1] + \begin{mdframed} + \lipsum[5] + \end{mdframed} + + \lipsum[1] + + \begin{lemma}\label{lem:testA}\mbox{ } + \begin{itemize} + \item Some Text + \item $x^2+y^2=1$ + \item \lipsum[1] + \end{itemize} + \end{lemma} + \end{document}\end{mdexample} + +\section{Known problems} + In this section I will collect known problems. In case you encouter any further problems, please + drop me an email, \href{mailto:marco.daniel@mada-nada.de}{marco.daniel@mada-nada.de}. + + Do you have any ideas / wishes on further extensions to this package? Please let me know! + +\begin{enumerate} + \item So far it is not possible to extend a frame to more than two pages + \item So far there is no implementation that allows to set the left or right margin +\end{enumerate} + +\end{document} diff --git a/Master/texmf-dist/tex/latex/mdframed/mdframed.sty b/Master/texmf-dist/tex/latex/mdframed/mdframed.sty new file mode 100644 index 00000000000..3d3da715f4b --- /dev/null +++ b/Master/texmf-dist/tex/latex/mdframed/mdframed.sty @@ -0,0 +1,661 @@ +%%==================================================%% +%%========It based on the idea of framed.sty========%% +%%==================================================%% +%%===== Currently the packge has a beta-Status =====%% +%%==================================================%% +%% WITH THANKS TO (alphabetically): +%% ROLF NIEPRASCHK +%% HEIKO OBERDIEK +%% HERBERT VOSS + +%% Copyright (c) 2010 Marco Daniel +% +%% This package may be distributed under the terms of the LaTeX Project +%% Public License, as described in lppl.txt in the base LaTeX distribution. +%% Either version 1.0 or, at your option, any later version. +%% +%% +%%==================================================%% +%% Erstellung eines Rahmens, der am Seitenende keine +%% horizontale Linie einfuegt +%%>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>%% +%% _______________ %% +%% | page 1 | %% +%% | Text | %% +%% | __Text__ | %% +%% | | Text | | %% +%% P A G E B R E A K %% +%% | | Text | | %% +%% | |_Text_| | %% +%% | Text | %% +%% |____page 2___| %% +%% %% +%%>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>%% + +%% Allgemeine Angaben +\def\mdframedpackagename{mdframed} +\def\md@PackageWarning#1{\PackageWarning{\mdframedpackagename}{#1}} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{mdframed}[2010/04/16 v0.3: mdframed] + +%%==================================================%% +%%=============== Benoetigte Pakete ================%% +%%==================================================%% +\IfFileExists{kvoptions.sty}{% + \RequirePackage{kvoptions} + \SetupKeyvalOptions{family=mdf,prefix=mdf@} + }{% + \md@PackageWarning{The package kvoptions.sty does not exist\MessageBreak + but it is requiered by \mdframedpackagename}% + } +\IfFileExists{picture.sty}{% + \RequirePackage[etex]{picture} + }{% + \md@PackageWarning{The package picture does not exist\MessageBreak + but it is requiered by \mdframedpackagename}% + } + +\IfFileExists{calc.sty}{% + \RequirePackage{calc} + }{% + \md@PackageWarning{The package calc does not exist\MessageBreak + but it is requiered by \mdframedpackagename}% + } + +\IfFileExists{color.sty}{% + \RequirePackage{color} + }{% + \md@PackageWarning{The package color does not exist\MessageBreak + but it is requiered by \mdframedpackagename}% + } + +%%==================================================%% +%%=============== Globale Optionen ================%% +%%==================================================%% +\DeclareStringOption[2pt]{linewidth} +\DeclareStringOption[black]{linecolor} +\DeclareStringOption[white]{backgroundcolor} +\DeclareStringOption[black]{fontcolor} +\DeclareStringOption[20pt]{margin} +\DeclareStringOption[\z@]{skipabove} +\DeclareStringOption[\z@]{skipbelow} +\DeclareStringOption[none]{xcolor} + +\ProcessKeyvalOptions* + +%%==================================================%% +%%========Sicherstellen der key-value-Syntax========%% +%%================ HIER DER GLOABEL ================%% +%%==================================================%% +\AtBeginDocument{ + \@ifpackageloaded{xcolor}{% + \let\mdf@xcolor\@empty %ignoriere die Eingabe der Optionen + }{% + \def\@tempa{none} + \ifx\mdf@xcolor\@tempa + \else + \PassOptionsToPackage{\mdf@xcolor}{xcolor} + \RequirePackage{xcolor} + \fi + } +} + + +\newcommand*\mdf@get@linewidth[1]{% + \begingroup + \unitlength=1pt\relax + \@tempdima#1\unitlength + \edef\mdf@GET@linewidth{\endgroup\@tempdima=\the\@tempdima}% + \mdf@GET@linewidth +} +\picture@redefine\mdf@get@linewidth{&1} +\begingroup + \mdf@get@linewidth{\mdf@linewidth} + \global\edef\mdf@linewidth{\the\@tempdima} +\endgroup + + + +\newcommand*\mdf@get@margin[1]{% + \begingroup + \unitlength=1pt\relax + \@tempdima#1\unitlength + \edef\mdf@GET@margin{\endgroup\@tempdima=\the\@tempdima}% + \mdf@GET@margin +} +\picture@redefine\mdf@get@margin{&1} +\begingroup + \mdf@get@margin{\mdf@margin} + \global\edef\mdf@margin{\the\@tempdima} +\endgroup + + +\newcommand*\mdf@get@skipabove[1]{% + \begingroup + \unitlength=1pt\relax + \@tempdima#1\unitlength + \edef\mdf@GET@skipabove{\endgroup\@tempdima=\the\@tempdima}% + \mdf@GET@skipabove +} +\picture@redefine\mdf@get@skipabove{&1} +\begingroup + \mdf@get@skipabove{\mdf@skipabove} + \global\edef\mdf@skipabove{\the\@tempdima} +\endgroup + + +\newcommand*\mdf@get@skipbelow[1]{% + \begingroup + \unitlength=1pt\relax + \@tempdima#1\unitlength + \edef\mdf@GET@skipbelow{\endgroup\@tempdima=\the\@tempdima}% + \mdf@GET@skipbelow +} +\picture@redefine\mdf@get@skipbelow{&1} +\begingroup + \mdf@get@skipbelow{\mdf@skipbelow} + \global\edef\mdf@skipbelow{\the\@tempdima} +\endgroup + +%%==================================================%% +%%========Sicherstellen der key-value-Syntax========%% +%%================ HIER DIE LOKALEN ================%% +%%==================================================%% + +\define@key{mdframed}{linecolor}[\mdf@linecolor]{% + \def\md@@linecolor{\color{#1}} +} + + +\define@key{mdframed}{backgroundcolor}[\mdf@backgroundcolor]{% + \mdbackgroundcolor{#1} +} + +\define@key{mdframed}{fontcolor}[\mdf@fontcolor]{% + \mdfontcolor{#1} + \def\md@@fontcolor{\color{#1}} +} + +\newcommand*\md@linewidth{} +\define@key{mdframed}{linewidth}[2pt]{% + \md@get@linewidth{#1} + \edef\md@linewidth{\the\@tempdima} + \md@framed@linewidth\md@linewidth +} +\newcommand*\md@get@linewidth[1]{% + \begingroup + \unitlength=1pt\relax + \@tempdima#1\unitlength + \edef\md@GET@linewidth{\endgroup\@tempdima=\the\@tempdima}% + \md@GET@linewidth +} +\picture@redefine\md@get@linewidth{&1} + + + +\newcommand*\md@margin{} +\define@key{mdframed}{margin}[10pt]{% + \md@get@margin{#1} + \edef\md@margin{\the\@tempdima} + \md@framed@margin\md@margin +} +\newcommand*\md@get@margin[1]{% + \begingroup + \unitlength=1pt\relax + \@tempdima#1\unitlength + \edef\md@GET@margin{\endgroup\@tempdima=\the\@tempdima}% + \md@GET@margin +} +\picture@redefine\md@get@margin{&1} + + + + +%%==================================================%% +%%==Deklaration diverser Eingabe und Hilfsparameter=%% +%%==================================================%% + +\newskip\md@framed@margin \md@framed@margin\mdf@margin %% Abstand |Links<INHALTE>Rechts| +\newskip\md@framed@linewidth \md@framed@linewidth\mdf@linewidth %% Dicke der Linie + + +\newcommand\mdframedabovespace[1]{\def\md@space@above@frame{#1}} +\mdframedabovespace{\baselineskip} %% Abstand vor der Frame-Umgebung + + +\newskip\md@temp@skip@a \md@temp@skip@a\z@ %% Hilfslaenge +\newlength{\fp@putboxa@length@md} +\setlength{\fp@putboxa@length@md}{\z@} %% Hilfslaenge + +\newif\ifmd@content@split \md@content@splitfalse %% Ifabfrage, die prueft, ob der Inhalt von mdframed geteilt wird + %% default - wird nicht geteilt + +\newif\ifmd@box@empty \md@box@emptyfalse %% Ifabfrage, die prueft, ob der Inhalt einer Box leer ist + %% default - ist nicht leer + +\newcommand\mdbackgroundcolor[1]{\def\md@backgroundcolor{#1}} %% User-Command - Hintergrundfarbe + +\newcommand\mdlinecolor[1]{\def\md@linecolor{#1}} %% User-Command - Linienfarbe +\def\md@@linecolor{\color{\mdf@linecolor}} %% Abkuerzungskommando + +\newcommand\mdfontcolor[1]{\def\md@fontcolor{#1}} +\def\md@@fontcolor{\color{\mdf@fontcolor}} + +\mdbackgroundcolor{\mdf@backgroundcolor} +\mdlinecolor{\mdf@linecolor} +%%==================================================%% +%%===Globale Umgebung -- noch keine Modifikation ===%% +%%==================================================%% + +\newenvironment{mdframed}[1][]% default-Umgebung + {\setkeys{mdframed}{#1}% + \vskip\mdf@skipabove + \mdframed@global@env}% + {\endmdframed@global@env\vskip\mdf@skipbelow} + + + + +%%==================================================%% +%%=================== Kommentare ===================%% +%%==================================================%% + +\chardef\md@arrayparboxrestore=\catcode`\| % for debug +\catcode`\|=\catcode`\% % (debug: insert space after backslash) +%% Kommentare werden im Code mit | gekennzeichnet + + +%%==================================================%% +%%================= Breite der BOX =================%% +%%==================================================%% +\def\md@margin@equation{% %% Berechnung der moeglichen Breite fuer den Rahmeninhalt + \advance\hsize by -\md@framed@margin %% hsize minus Randvorgabe + \advance\hsize by -2\md@framed@linewidth %% hsize minus Linienbreite + \advance\hsize by -\width\md@arrayparboxrestore}%% Beruecksichtigung das Auszaehlung bzw. list-Umgebung enthalten + +%%==================================================%% +%%===Bestimmung des Platzbedarfes fuer den Rahmen===%% +%%==================================================%% +\newskip\md@temp@frame@hsize +\newskip\md@temp@frame@vsize +\def\md@sizeofframe{\begingroup + \setbox\z@\vbox{% + \vskip-5in \hbox{\hskip-5in + \fboxsep2\baselineskip\fboxrule\md@framed@linewidth\fbox% + {\hbox{\vrule \@height 4.7in \@depth.3in \@width 5in}}}% + \vskip\z@skip}% + \global\md@temp@frame@hsize\wd\z@ \global\md@temp@frame@vsize\ht\z@ + \endgroup +} + +%%==================================================%% +%%============Start der globalen Umgebung===========%% +%%==================================================%% +\def\mdframed@global@env{\par + %Bestimmung zusatzlichen Freiraumes gemaess Vorgabe des Rahmens + \let\width\md@temp@frame@hsize \let\height\md@temp@frame@vsize + % Einfuegen von Strafpunkten und Abstaenden + \begingroup + \skip@\lastskip + \if@nobreak + \else + \penalty9999 % updates \page parameters <-pruefen + \ifdim\pagefilstretch=\z@ %%% pagefilstretch ist ein internes Register fuer den + %%% Seitenumbruch. Es entaehlt den akkumulierten (gespeicherten) fil-Anteil + %%% auf der aktuellen Seite + \ifdim\pagefillstretch=\z@ %%% pagefillstretch ist ein internes Register fuer den + %%% Seitenumbruch. Es entaehlt den akkumulierten (gespeicherten) fill-Anteil + %%% auf der aktuellen Seite + %%% nicht unendlich dehnbar, so hier foerdern eines Seitenumbruches + \edef\@tempa{\the\skip@}% + \edef\@tempb{\the\z@skip}% + \ifx\@tempa\@tempb %%% ??????? + \penalty-30 + \else + \vskip-\skip@ + \penalty-30 + \vskip\skip@ + \fi + \fi + \fi + \penalty\z@ + % Give a stretchy breakpoint that will always be taken in preference + % to the \penalty 9999 used to update page parameters. The cube root + % of 10000/100 indicates a multiplier of 0.21545, but the maximum + % calculated badness is really 8192, not 10000, so the multiplier + % is 0.2301. + \advance\skip@ \z@ plus-.5\baselineskip + \advance\skip@ \z@ plus-.231\height + \advance\skip@ \z@ plus-.231\skip@ + \advance\skip@ \z@ plus-.231\topsep + \vskip-\skip@ \penalty 1800 \vskip\skip@ + \fi + \addvspace{\topsep}% + \endgroup + % clear out pending page break + \nobreak \vskip 2\baselineskip \vskip\height %%%\@M=10000 + \penalty9999 \vskip -2\baselineskip \vskip-\height + \penalty9999 % updates \pagetotal + \md@adjheight + \setbox\@tempboxa\vbox\bgroup + \begingroup %%% zweites begingroup noetig, dass fontcolor gesetzt werden kann + \md@@fontcolor %%% Setzen der Schriftfarbe + \md@margin@equation + \textwidth\hsize \columnwidth\hsize +} + +\def\endmdframed@global@env{\par + \kern\z@ %%%\z@=0 + \hrule\@width\hsize\@height\z@ + \penalty-100 % put depth into height + \endgroup + \egroup + \begingroup + \md@put@frame + \endgroup +} + + + +%%==================================================%% +%%===========Ausgaberoutine -> Berechnung===========%% +%%==================================================%% + +%% \md@put@frame nimmt den Inhalt der \@tempboxa und packt alles oder nur einen Teil +%% auf die Seite mit dem Rahmen. +%% Es ist rekursiv, solange alles von der \@tempboxa aufgebraucht ist (\@tempboxa muss die Tiefe 0 haben.) +%% Erste Iteration: Versuche alles in einen Rahmen zu bekommen. Falls es nicht passt, +%% splitte es für die erste Rahmenumgebung +%% Spaetere Iteration: Versuche alles in den letzten Rahmen zu bekommen. Falls es nicht passt, +%% splitte es erneut. (Versuchsstadium -- Da bisher nur Anfang und Ende enthalten) + +\def\md@put@frame{\relax + \ifdim\pagegoal=\maxdimen \pagegoal\vsize \fi %%%% \pagegoal aktuelle Seitenhöhe für den Seitenumbruch + %%%% Der Wert wird mit \vsize initialisiert + %%%% \pagegoal - \pagetotal ist dann der noch freie Raum auf einer Seite + %%%% + \ifinner %Rekursion-sind in der Box %%%% testet auf internal mode: Dieser ist im internal vertical mode, + %%%% also im Innern einer \vbox, oder im restricted horizontal mode, + %%%% also im Innern einer \hbox, gesetzt. +%% \md@putbox@second %%%% Rahmen um den zweiten Teil der Box "noch zu bearbeiten" +%% \md@afterframe %%%% siehe Anweisung + \else %Noch keinen Teil der Box gesetzt. + \dimen@\pagegoal + \advance\dimen@-\pagetotal %%% \dimen@ hat jetzt den noch freien Platz auf der Seite gespeichert + \advance\dimen@-\topskip + \ifdim\dimen@<2\baselineskip %%% Ist freier Platz < 2 Zeilenabstaenden, zu wenig Platz + \clearpage %%% Beginne neue Seite + \md@put@frame % %%% Rufe \md@put@frame erneut auf + \else %%% Es ist akzeptabler Platz auf der Seite +% \begingroup %%% +% \advance\dimen@0.1\pageshrink %%% \pageshrink ist ein internes Register fuer den Seitenumbruch. Es ent- + %%% haelt den akkumulierten Schrumpfanteil auf der aktuellen Seite; + %%% das heisst die Laenge, um die der Leerraum auf der aktuellen Seite + %%% bei Bedarf noch zusammengeschoben werden kann; + %%% Somit ist hier der maximale Seitenplatz ermittelt + \expandafter%%% ???? +% \endgroup + \ifdim\dimen@>\ht\@tempboxa %%% Pruefe, ob Box noch auf Seite passt + \ifmd@content@split %%% Pruefe ob \@tempboxa gesplittet wurde + \md@putbox@second %%% Wurde gesplittet- nehme zweiten Teil der Umrandung + \else %%% + \md@putbox@single %%% Box wurde nicht gesplitter - einfacher Rahmen + \fi% + \md@afterframe %%% siehe Anweisung + \else %%%Box muss gesplittet werden + \setbox\@tempboxa\vbox{ %%% Simuliere den Rahmen und die Flexibilitaet der Seite + %%% \pagestretch ist ein internes Register fuer den Seitenumbruch. Es ent- + %%% haelt den akkumulierten Zuwachsanteil auf der aktuellen Seite; + %%% das heisst die Laenge, um die der Leerraum auf der aktuellen Seite + %%% bei Bedarf noch auseinander gezogen werden kann; + \vskip \z@ \@plus0.2\pagestretch \@minus.3\pageshrink + \kern137sp\kern-137sp\penalty-30 %%% ???? + \unvbox\@tempboxa} %%% + \edef\md@resto@set{\boxmaxdepth\the\boxmaxdepth %%% \boxmaxdepth ist die maximale Tiefe (depth) einer \vbox, + %%% die diese annehmen darf. Dieser Wert ist mit \maxdimen, + %%% das heisst 16383,99999 pt, vorbelegt. Damit duerffen Boxen + %%% beliebige Unterlaengen (‘depth’) besitzen. + \splittopskip\the\splittopskip}% %%% \splittopskip ist der Leerraum, + %%% der automatisch zu Beginn einer abgesplitteten Box gesetzt wird. + \boxmaxdepth\z@ \splittopskip\z@ %%% + %%% Hier wird die \@tempboxa gesplittet + \setbox\tw@\vsplit\@tempboxa to 1\dimen@ %%% \tw@ enthaelt oberen Teil der \@tempboxa mit der Groesse \dimen@ + \ifdim\ht\@tempboxa=\z@ + \md@box@emptytrue + \fi +| \toks99\expandafter{\splitfirstmark}% %%% \splitfirstmark internes Register, welches den mittels + %%% \mark gesetzten Text ausgibt, der bei der letzten \vsplit-Operation + %%% gefunden wurde. Dies ist der erste \mark-Text im abgesplitteten Text + +| \toks98\expandafter{\splitbotmark} %%% splitbotmark internes Register, welches den mittels \mark gesetzten + %%% Text ausgibt, der bei der letzten \vsplit-Operation gefunden wurde. + %%% Dies ist der letzte \mark-Text im abgesplitteten Text + \setbox\tw@\vbox{\unvbox\tw@} %%% Natuerliche Groesse der ersten Teilbox erhalten + % If the split-to size > (\vsize-\topskip), then set box to full size + %%% \topskip Ist der Mindestabstand, den die Grundlinie der ersten Zeile (Box) einer jeden Seite vom Seitenanfang haben soll. + \begingroup + \advance\dimen@\topskip %%% Addiere zum noch freien Platz auf der Seite topskip + \expandafter\endgroup %%% ???? + \ifdim\dimen@>\pagegoal %%% Ist \dimen@ groesser der Seitenhoehe + \dimen@ii\pagegoal %%% \dimen@ii wird zur Seitenhoehe + \advance\dimen@ii -\topskip %%% \dimen@ii wird zur Seitenhoehe Minus + \advance\dimen@ii \md@space@above@frame %%% \dimen@ii bekommt zusaetzlich den gewuenschten Oberen Abstand + \else %%% \dimen@ ist kleiner als die aktuelle Seitenhoehe + %%% Es ist ausreichend Platz auf der Seite + \advance\dimen@.9\pageshrink %%% siehe oben -> \dimen@ wird vergroessert + \ifdim\ht\tw@>\dimen@ %%% Ist die Hoehe der abgesplitteten Box groesser als \dimen@ + \dimen@ii=\dimen@ + \else %%% abgesplittete Box ist kleiner + \dimen@ii\ht\tw@ %%% \dimen@ -> setze \dimen@ii auf aktuelle Boxgroesse + \fi + \fi +%% % Re-box contents to desired size \dimen@ii +%% \advance\dimen@ii -\md@frh + \setbox\tw@\vbox to\dimen@ii % %%% Setze die abgesplittete Box auf \dimen@ii + \bgroup + \vskip -\z@ \@plus-\pagestretch \@minus-.8\pageshrink %%% Entferne den simulierte Rahmen und Seitenflexibilitaet + \unvbox\tw@ \unpenalty\unpenalty %%% \unpenalty entfernt einen vorangehenden \penalty + %%% in der Arbeitsliste, falls ein solcher vorhanden ist + \ifdim\lastkern=-137sp %%% \lastkern liefert, falls das letzte Element eine \kern-Operation + %%% war, dieses aus. Das Element bleibt aber erhalten. + %%% Komplette Box geht auf naechste Seite + % need work here??? + \egroup %%%Moegliches egroup + \md@resto@set + \clearpage %%% ??? \eject % (\vskip for frame size was discarded) + %\md@adjheight + \md@put@frame % INSERTED ??? + \else % Bekommt Material fuer das Abspalten am Kopf (Got material split off at the head) + \egroup %%%Moegliches egroup + \md@resto@set + \ifvoid\@tempboxa %%% prueft, ob die \tempbox@ (abgesplitteter unterer Teil) leer ist. + \setbox\@tempboxa\box\tw@ + \ifmd@box@empty + \md@putbox@single % + \else + \md@putbox@second % + \fi + \md@afterframe + \else % Es ist wirklich gesplittet mit oberen Teil in \tw@ und unteren Teil in \tempboxa@ + \ifdim\wd\tw@>\z@ %%%Ist der Obere Teil breiter als 0pt + \wd\tw@\wd\@tempboxa %%%setze die Beite des oberen Teils auf die Breite des unteren Teils + \global\md@content@splittrue %%%% Merke, dass Box gesplittet wird + %%%% gebe den oberen Teil der Box aus + \md@putbox@first %%% Ausgabe der ersten Teilbox + \else %%Oberer Teil ist Leer + \box\tw@ %%% Ausgabe und Leerung + \fi + \hrule \@height\z@ \@width\hsize + \clearpage + \md@adjheight + \md@put@frame + \fi + \fi + \fi + \fi +\fi +} + + +%%==================================================%% +%%=Ausgabe der Box nach Vorgabe der Ausagaberoutine=%% +%%==================================================%% +\let\md@textwidth\textwidth +\def\md@putbox@single{%%%%% Ausgabe der ungesplitteten Gesamtbox + \ifvoid\@tempboxa + \else + \centerline{% + \rlap{\color{\md@backgroundcolor}% + \setlength{\fp@putboxa@length@md}{\ht\@tempboxa}% + \addtolength{\fp@putboxa@length@md}{\baselineskip}% + \addtolength{\fp@putboxa@length@md}{\md@framed@linewidth}% + \rule[-0.5\baselineskip]{\md@textwidth}{\fp@putboxa@length@md}% + }% + \setlength{\fp@putboxa@length@md}{\ht\@tempboxa}% + \addtolength{\fp@putboxa@length@md}{0.5\baselineskip}% + \rlap{\md@@linecolor% + \vrule width \md@framed@linewidth height \fp@putboxa@length@md% + \rule[-0.5\baselineskip-\md@framed@linewidth]{\hsize-2\md@framed@linewidth}{\md@framed@linewidth}% + }% + \hfill% + {\box\@tempboxa}% + \hfill% + \llap{\md@@linecolor% + \llap{% + \rule[-0.5\baselineskip-\md@framed@linewidth]{0pt}{\md@framed@linewidth}% + \vrule width \md@framed@linewidth height \fp@putboxa@length@md}% + }% + \llap{\md@@linecolor\rule[\fp@putboxa@length@md]{\hsize}{\md@framed@linewidth}}% + }% + \fi +} + + +\def\md@putbox@first{%%%% Ausgabe der Teilbox 1 + \centerline{% + \rlap{\color{\md@backgroundcolor}% + \setlength{\fp@putboxa@length@md}{\ht\tw@}% + \addtolength{\fp@putboxa@length@md}{0.5\baselineskip}% + \addtolength{\fp@putboxa@length@md}{-\md@framed@linewidth}% + \rule{\md@textwidth}{\fp@putboxa@length@md}% + }% + \setlength{\fp@putboxa@length@md}{\ht\tw@}% + \addtolength{\fp@putboxa@length@md}{0.5\baselineskip}% + \rlap{\md@@linecolor% + \vrule width \md@framed@linewidth height \fp@putboxa@length@md% + \rule[\fp@putboxa@length@md-\md@framed@linewidth]{\hsize-\md@framed@linewidth}{\md@framed@linewidth}% + }% + \hfill% + {\box\tw@}% + \hfill% + \llap{\md@@linecolor% + \vrule width \md@framed@linewidth height \fp@putboxa@length@md% + }% + }%% ??? \centerline bad idea +} + + +\def\md@putbox@second{%%%%% Ausgabe der Teilbox 2 + \ifvoid\@tempboxa + \else + \centerline{% + \rlap{\color{\md@backgroundcolor}% + \setlength{\fp@putboxa@length@md}{\ht\@tempboxa}% + \addtolength{\fp@putboxa@length@md}{.7\baselineskip}% + \addtolength{\fp@putboxa@length@md}{\md@framed@linewidth}% + \rule[-0.5\baselineskip-\md@framed@linewidth]{\md@textwidth}{\fp@putboxa@length@md}% + }% + \setlength{\fp@putboxa@length@md}{\ht\@tempboxa}% + \addtolength{\fp@putboxa@length@md}{0.2\baselineskip}% %Linienueberschuss auf zweiter Seite + \rlap{\md@@linecolor% + \vrule width \md@framed@linewidth height \fp@putboxa@length@md% + \rule[-0.5\baselineskip-\md@framed@linewidth]{\hsize-2\md@framed@linewidth}{\md@framed@linewidth}% + }% + \hfill% + {\box\@tempboxa}% + \hfill% + \llap{\md@@linecolor% + \llap{% + \rule[-0.5\baselineskip-\md@framed@linewidth]{0pt}{\md@framed@linewidth}% + \vrule width \md@framed@linewidth height \fp@putboxa@length@md}% + }% + }% + \fi +} + + + +%%==================================================%% +%%======Deklaration nach der Ausgabe einer Box======%% +%%==================================================%% +\def\md@afterframe{% + \global\md@content@splitfalse + \global\md@box@emptyfalse + \nointerlineskip \null %{\showoutput \showlists} + \penalty-30 \vskip\topsep \relax +} + +%%==================================================%% +%%=====Berechnung bzw. Festlegung des Abstandes=====%% +%%==================================================%% +\def\md@adjheight{% + \ifdim\md@space@above@frame>\z@ + \vbox to 1.2\md@space@above@frame{}% get proper baseline skip from above. + \nobreak \nointerlineskip + \vskip-1.2\md@space@above@frame + \penalty\@M% + \else + \vbox to \md@space@above@frame{}% get proper baseline skip from above. + \penalty\@M \nointerlineskip + \vskip-0.6\md@space@above@frame + \penalty\@M% + \fi +} % useful for tops of pages + + + +%%%%%KEINE AHNUNG +\catcode`\|=\md@arrayparboxrestore %%%???? + + + + +% \md@arrayparboxrestore has parts of \@parboxrestore, performing a similar but +% less complete restoration of a default layout. See how it is used in the +% "settings" argument of \MakeFrame. Though not a parameter, \hsize +% should be set to the desired total line width available inside the +% frame before invoking \md@arrayparboxrestore. +\def\md@arrayparboxrestore{% + %%%AUS ltboxes.dtx -> \@arrayparboxrestore + \let\if@nobreak\iffalse + \let\if@noskipsec\iffalse + \let\-\@dischyph %%%Default \let\@dischyph=\- + \let\'\@acci\let\`\@accii\let\=\@acciii %%%Default: \let\@acci\' \let\@accii\` \let\@acciii\= <- Sicher gehen + %%%dass Defaultwerte erhalten sind + %%%Scheinen Mathesymbole zu sein ??? + % Test ob Listenumgebung enthalten ist + \ifnum \ifdim\@totalleftmargin>\z@ 1\fi %%%In latex.ltx->totalleftmargin=\z@, ausser in list-Umgebung: + %%%\advance\@totalleftmargin \leftmargin + \ifdim\rightmargin >\z@ 1\fi %%%Default \rightmargin=\z@, ausnahme: quote usw. + \ifnum\@listdepth >0 1\fi %%%Zaehler fuer Listentiefe -> Keine Liste \@listdepth=0 sonst, je ebene +1 + 0>\z@ %%%Ist ein Parameter erfuellt, dann ist es eine Listenumgebung + \@setminipage %%%Passform rund um das Element + % Nun wird versucht, Aenderungen der Breite von \hsize antsprechend der Listenparameter zu uebergeben. + % Dies ist defizitaer, denn eine erweiterte Möglichkeit, Aenderungen der Textdimension anzugegeben + % ist (noch) nicht vorgesehen, insbesondere keine getrennte linke / rechte Einstellung. + \advance\linewidth-\columnwidth \advance\linewidth\hsize + \parshape\@ne \@totalleftmargin \linewidth %%% parshape definiert das Aussehen eines Absatzes Zeile fuer Zeile. + %%% Seine Parameterversorgung geschieht mittels der folgenden Syntax: + %%% \parshape = n i1 l1 i2 l2 ... in ln. + %%% Dabei gibt der Parameter n an, fuer wieviele Zeilen Definitionspaare folgen. + %%% Jedes Definitionspaar besteht aus der Angabe i_j fuer den Einzug und + %%% der Laengenangabe l_j fuer die entsprechende Zeile. Sind mehr als n Zeilen + %%% vorhanden, so wird die letzte Angabe stets weiter verwendet + \else % Not in list + \linewidth=\hsize + \fi + \sloppy +} + +\endinput +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |