summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/niceframe
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2009-09-09 23:49:29 +0000
committerKarl Berry <karl@freefriends.org>2009-09-09 23:49:29 +0000
commit6b6cdb5a62b8daaafcfd6a7fbea94c0510a2765c (patch)
treed4115068d3a639db97c6838cfda1ccace4ee919b /Master/texmf-dist/source/latex/niceframe
parent2888e7fbb9e303365f43f648b7dbaa9a8c91c2bc (diff)
install niceframe, LPPL now (9sep)
git-svn-id: svn://tug.org/texlive/trunk@15193 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/niceframe')
-rw-r--r--Master/texmf-dist/source/latex/niceframe/niceframe.drv72
-rw-r--r--Master/texmf-dist/source/latex/niceframe/niceframe.dtx515
-rw-r--r--Master/texmf-dist/source/latex/niceframe/niceframe.ins89
3 files changed, 676 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/niceframe/niceframe.drv b/Master/texmf-dist/source/latex/niceframe/niceframe.drv
new file mode 100644
index 00000000000..90ba4c2dee5
--- /dev/null
+++ b/Master/texmf-dist/source/latex/niceframe/niceframe.drv
@@ -0,0 +1,72 @@
+%%
+%% This is file `niceframe.drv',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% niceframe.dtx (with options: `driver')
+%%
+%% This file 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.
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Marcus Ohlhaut.
+%%
+%% This work consists of the files niceframe.dtx and niceframe.ins
+%% and the derived file niceframe.sty.
+%%
+%% Copyright (C) 2009 Marcus Ohlhaut (marcus@ohlhaut.de).
+%% All rights reserved.
+%%
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+\def\fileversion{1.1c}
+\def\filedate{2009/31/08}
+\documentclass{ltxdoc}
+
+\setlength\textwidth{31pc} \setlength\textheight{54pc}
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{2pt plus 1pt minus 1pt}
+\setlength{\oddsidemargin}{8pc}
+\setlength{\marginparwidth}{8pc}
+\setlength{\topmargin}{-2.5pc}
+\setlength{\headsep}{20pt}
+\setlength{\columnsep}{1.5pc}
+\setlength{\columnwidth}{18.75pc}
+\EnableCrossrefs
+\RecordChanges
+\CodelineIndex
+
+\MakeShortVerb{\|}
+\begin{document}
+
+\DocInput{niceframe.dtx}
+
+\end{document}
+\endinput
+%%
+%% End of file `niceframe.drv'.
diff --git a/Master/texmf-dist/source/latex/niceframe/niceframe.dtx b/Master/texmf-dist/source/latex/niceframe/niceframe.dtx
new file mode 100644
index 00000000000..6553db0f327
--- /dev/null
+++ b/Master/texmf-dist/source/latex/niceframe/niceframe.dtx
@@ -0,0 +1,515 @@
+% \iffalse meta-comment
+%
+% This package 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.
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Marcus Ohlhaut.
+%
+% This work consists of the files niceframe.dtx and niceframe.ins
+% and the derived file niceframe.sty.
+%
+% Copyright (C) 2009 Marcus Ohlhaut (marcus@ohlhaut.de).
+% All rights reserved.
+%
+% \fi
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+\def\fileversion{1.1c}
+\def\filedate{2009/31/08}
+%
+% \CheckSum{282}
+%
+%\iffalse
+%
+% Package NiceFrame to be used with LaTeX 2e
+% Copyright (C) 1996-2009 Marcus Ohlhaut (marcus@ohlhaut.de).
+% All rights reserved.
+%
+% Error reports for UNCHANGED versions please to:
+% marcus@ohlhaut.de
+%
+%\fi
+%
+% \title{A style option to create nice frames with the \textbf{dingbat}
+% fonts\thanks{This file has version number \fileversion\ --
+% last revision \filedate.}}
+%
+% \author{Marcus Ohlhaut\\
+% Wertheimer Stra\ss e 59\\
+% D-81243 M\"unchen\\
+% {\tt marcus@ohlhaut.de}}
+%
+% \date{Printed \today}
+% \maketitle
+%
+% \changes{1.0}{1995/07/08}{Adapted this to LaTeX2e}
+% \changes{1.0a}{1995/07/13}{Added CurlyFrame and ArtDecoFrame}
+% \changes{1.0b}{1995/07/16}{Fixed documentation}
+% \changes{1.0c}{1996/02/11}{Fixed 8+3 names}
+% \changes{1.1}{1996/02/20}{Redesign of GeneralFrame}
+% \changes{1.1b}{1996/10/20}{Fixed alignment of right vleaders}
+% \changes{1.1b}{1996/10/20}{Changed command names to lowercase}
+% \changes{1.1b}{1996/10/20}{Adapted installation to new version of docstrip}
+% \changes{1.1c}{2009/08/31}{Changed license to LPPL 1.3}
+%
+% \DoNotIndex{\addtolength,\baselineskip,\begin,\bigskip,\box}
+% \DoNotIndex{\centerline,\char,\CodelineIndex,\columnsep,\columnwidth}
+% \DoNotIndex{\DocInput,\documentclass,\dots,\dp}
+% \DoNotIndex{\EnableCrossrefs,\end}
+% \DoNotIndex{\font,\hbox,\headsep,\hfill,\hsize,\hss,\ht}
+% \DoNotIndex{\LARGE,\Large,\leaders,\MakeShortVerb,\marginparwidth}
+% \DoNotIndex{\NeedsTeXFormat,\newcommand,\newlength,\oddsidemargin}
+% \DoNotIndex{\pagestyle,\parindent,\parskip,\pixel,\ProvidesPackage,\pxl}
+% \DoNotIndex{\RecordChanges,\setbox,\setlength,\settowidth}
+% \DoNotIndex{\textheight,\textwidth,\thin,\topmargin,\typeout}
+% \DoNotIndex{\usepackage,\vbox,\vfill,\vsize,\vskip,\vss}
+% \DoNotIndex{\wd,\\,\|\ }
+%
+% \begin{abstract}
+% This article describes a new style option that can be used with the
+% document styles that are distributed with the \LaTeX\ distributions.
+% It defines new commands to frame material with decorative frames,
+% using \textbf{dingbat} fonts.
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \section{Introduction}
+%
+% When I set out to become familar with all the fonts available for
+% \TeX, I came across the \textbf{dingbat} font. Only a few glyphs have
+% been defined in that font, and some of them are intended to yield
+% nice frames when set appropriately.
+%
+% I didn't want to work out the details of arranging the glyphs each
+% time I needed to frame text, and hence wrote this little package to
+% do the work for me.
+%
+% When testing this, I noticed that one of the glyphs was wrongly coded
+% in the original \textbf{dingbat} distribution. Together with this
+% package, a corrected version of \textbf{dingbat} is distributed.
+%
+% This package has no options. It requires the package |calc| by Kresten~K.
+% Thorup and Frank Jensen.
+%
+% \section{The user interface}
+% This package defines three commands, |\niceframe|, |\curlyframe| and
+% |\artdecoframe|. All three take one mandatory and one optional argument.
+% The mandatory argument specifies the material that is to be framed
+% (anything which can go into a |\vbox|), whereas the optional argument
+% specifies the final width of the frame.
+%
+% If the optional argument is omitted, the frame will be exactly of
+% width |\textwidth|. The height of the frame is calculated from the
+% natural height of the enclosed material.
+%
+% These frames have to be set into their own paragraphs, otherwise the
+% width of the surrounding text will not be correct.
+%
+% The package also defines a more general macro called |\generalframe|
+% to allow control over the symbols which are used to build the frame.
+%
+% \section{The implementation}
+% \subsection{The {\sc docstrip} modules}
+%
+% The following modules are used in the implementation to direct
+% {\sc docstrip} in generating the external files:
+% \begin{center}
+% \begin{tabular}{ll}
+% driver & produce the documentation driver file \\
+% package & produce the package file \\
+% example & produce an example file \\
+% \end{tabular}
+% \end{center}
+%
+% \subsection{Producing the documentation}
+%
+% A short driver is provided that can be extracted (if necessary)
+% by the {\sc docstrip} program provided with \LaTeXe.
+% \begin{macrocode}
+%<*driver>
+\documentclass{ltxdoc}
+
+% dimensions from ltugboat.sty:
+\setlength\textwidth{31pc} \setlength\textheight{54pc}
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{2pt plus 1pt minus 1pt}
+\setlength{\oddsidemargin}{8pc}
+\setlength{\marginparwidth}{8pc}
+\setlength{\topmargin}{-2.5pc}
+\setlength{\headsep}{20pt}
+\setlength{\columnsep}{1.5pc}
+\setlength{\columnwidth}{18.75pc}
+\EnableCrossrefs
+\RecordChanges
+\CodelineIndex
+
+\MakeShortVerb{\|}
+\begin{document}
+
+\DocInput{niceframe.dtx}
+
+\end{document}
+%</driver>
+% \end{macrocode}
+%
+% \subsection{The example}
+%
+% This is just a short \LaTeX-file to test the installation. Install
+% the |niceframe| package, and run |latex example.tex|.
+% \begin{macrocode}
+%<*example>
+\documentclass[a4paper]{article}
+\usepackage{niceframe}
+
+\begin{document}
+\pagestyle{empty}
+
+\parindent 0pt
+% \end{macrocode}
+% First, a |\niceframe| that spans the whole |\textwidth|.
+% \begin{macrocode}
+\niceframe{%
+ \begin{center}
+ May the road rise to meet you\\
+ May the wind be always at your back\\
+ May the sun shine warm upon your face\\
+ The rain fall soft upon your fields\\
+ And until we meet again\\
+ May God hold you in the hollow of his hand\\
+ \end{center}
+ \bigskip
+ \hfill The Blessing of St.~Patrick
+}
+\vfill
+% \end{macrocode}
+% Then, a centered |\curlyframe| that is only |0.75\textwidth| wide.
+% \begin{macrocode}
+\centerline{%
+ \curlyframe[0.75\textwidth]{%
+ \begin{center}
+ \LARGE I am not flexible!\\
+ Just disorganized!\\
+ \end{center}
+}}
+\vfill
+% \end{macrocode}
+% And an |\artdecoframe| for the philosophical bit.
+% \begin{macrocode}
+\centerline{or is it\dots}
+\vfill
+\artdecoframe{%
+ \begin{center}
+ \LARGE I am not disorganized!\\
+ Just flexible!\\
+ \end{center}
+}
+\newpage
+% \end{macrocode}
+% The following three frames are examples of |\generalframe|.
+% \begin{macrocode}
+\font\border=karta15
+\generalframe{\border\char'307}{\border\char'324}{\border\char'322}
+ {\border\char'310} {\border\char'323}
+ {\border\char'174}{\border\char'325}{\border\char'175}
+ {This is a \texttt{generalframe}, using eight different
+ characters from font \texttt{karta15} as parts of the
+ framework. One might use it to point other people to
+ important notes, hints and/or messages.
+ }
+\vfill
+\font\border=umranda
+\generalframe{\border\char'136}{\border\char'137}{\border\char'140}
+ {\border\char'145} {\border\char'141}
+ {\border\char'144}{\border\char'143}{\border\char'142}
+ {This \texttt{generalframe} uses symbols from Alexander
+ Schrell's \texttt{umranda} (his eMail is:
+ alexander\_ schrell@w2.maus.de) collection.
+ The material to be framed consists of quite a few lines to
+ emphasize the fact that virtually anything can go
+ inside a \texttt{generalframe}. Note that we are limited
+ by \TeX's memory as the material to frame has to be passed
+ as an argument. You can't cheat by passing a \texttt{vbox}
+ that has already been set (as you might with some other
+ macros) since \texttt{generalframe} has to re-set all of it.
+ }
+\vfill
+\font\border=umrandb
+\generalframe{\border\char'165}{\border\char'151}{\border\char'164}%
+ {\border\char'150} {\border\char'150}%
+ {\border\char'166}{\border\char'151}{\border\char'167}
+ {Last, but not least! This \texttt{generalframe} (with
+ symbols from \texttt{umrandb}) displays some math:
+ $$ E = mc^2 $$
+ which everyone will immediately recognize as the famous
+ Einstein formula for energy-mass-equivalence.
+ }
+\end{document}
+%</example>
+% \end{macrocode}
+%
+% \subsection{Useful fonts}
+%
+% The font used for setting the frames is the \textbf{dingbat} font by
+% Doug Henderson. Since the original distribution contained a wrongly
+% coded char, I have included a corrected version with this package.
+% Except from the code for |char("e")|, this is Doug's original file.
+%
+% I have also added the fonts \textbf{bbding10}, \textbf{karta15},
+% \textbf{umranda} and \textbf{umrandb} for they are used in the examples.
+%
+% \StopEventually{\PrintIndex\PrintChanges}
+%
+% \subsection{The code}
+%
+% We begin by identifying the version of this file on the terminal and
+% in the transcript fileand by loading the package |calc|.
+% \begin{macrocode}
+%<*package>
+\NeedsTeXFormat{LaTeX2e}[1994/06/01]
+\ProvidesPackage{niceframe}[\filedate\space v\fileversion\space niceframe package (MO)]
+\typeout{Package: niceframe v\fileversion\space <\filedate> (Marcus Ohlhaut)}
+\RequirePackage{calc}
+% \end{macrocode}
+% We then load the font used for setting the standard frames.
+% \begin{macrocode}
+\font\ding dingbat scaled 1200
+% \end{macrocode}
+% A few internal dimensions need to be defined and initialized.
+% \begin{macrocode}
+\newlength{\nicefr@mechar}
+\settowidth{\nicefr@mechar}{\ding\char'141}
+\newlength{\nicefr@mewidth}
+\setlength{\nicefr@mewidth}{\hsize}
+\newlength{\nicefr@meheight}
+\setlength{\nicefr@meheight}{\vsize}
+\newlength{\@ldhsize}
+\setlength{\@ldhsize}{\hsize}
+% \end{macrocode}
+% \begin{macro}{\upd@ublerulefill}
+% \begin{macro}{\dnd@ublerulefill}
+% \begin{macro}{\ltd@ublerulefill}
+% \begin{macro}{\rtd@ublerulefill}
+% These internal macros define a set of leaders for each of the four
+% sides of |\niceframe|. The appropriate chars are taken from the
+% \textbf{dingbat} font.
+% \begin{macrocode}
+\newcommand{\upd@ublerulefill}{\xleaders\hbox to 10pt
+ {\hss\ding\char'142 \hss}\hfill}
+\newcommand{\dnd@ublerulefill}{\xleaders\hbox to 10pt
+ {\hss\ding\char'147 \hss}\hfill}
+\newcommand{\ltd@ublerulefill}{\xleaders\vbox to 10pt
+ {\vss\hbox{\ding\char'144}\vss}\vfill}
+\newcommand{\rtd@ublerulefill}{\xleaders\vbox to 10pt
+ {\vss\hbox{\ding\char'145}\vss}\vfill}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\niceframe}
+% Finally, we define the user interfaces.
+% \begin{macrocode}
+\newcommand{\niceframe}[2][\textwidth]{{
+% \end{macrocode}
+% First, we have to set the material that is passed to |\niceframe| to
+% an appropriate width. That width is the requested width of the final
+% |\vbox| minus twice the size of the chars that make up the corners of
+% the frame (ie.\ |\nicefr@mechar|). The set material is stored for
+% further use in |\box0|.
+% \begin{macrocode}
+ \setlength{\hsize}{#1 - 2\nicefr@mechar}
+ \setbox0=\vbox{#2}
+% \end{macrocode}
+% We then use height and depth of |\box0| to calculate the required
+% height of the |\vbox| that encloses the vertical leaders.
+% \begin{macrocode}
+ \setlength{\nicefr@meheight}{\ht0 + \dp0}
+% \end{macrocode}
+% Similarily, we then use the width of |\box0| for enclosing the
+% horizontal leaders.
+% \begin{macrocode}
+ \setlength{\nicefr@mewidth}{\wd0 + 2\nicefr@mechar}
+% \end{macrocode}
+% Finally, when all the relevant dimensions have been determined, the
+% frame is compiled. We start with the top row (corner char, horizontal
+% leader, corner char), set the middle part (vertical leader, things to
+% frame, vertical leader) and finish with the bottom row (corner char,
+% horizontal leader, corner char).
+% \begin{macrocode}
+ \vbox{%
+ \hbox to\nicefr@mewidth{\ding\char'141\upd@ublerulefill\char'143}
+ \hbox to\nicefr@mewidth{\vbox to\nicefr@meheight{\ltd@ublerulefill}
+ \hss\raise\dp0\box0\hss
+ \vbox to\nicefr@meheight{\rtd@ublerulefill}}
+ \hbox to\nicefr@mewidth{\ding\char'146\dnd@ublerulefill\char'150}
+ }
+}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\curlyframe}
+% This macro works exactly like |\niceframe|. The only difference is
+% that we use stretchable space instead of leaders and different glyphs
+% for the four corners (obviously). We halso have to move the text a bit
+% closer to the corners due to their shape.
+% \begin{macrocode}
+\newcommand{\curlyframe}[2][\textwidth]{{
+ \setlength{\hsize}{#1 - 2\nicefr@mechar}
+ \setbox0=\vbox{#2}
+ \setlength{\nicefr@meheight}{\ht0 + \dp0}
+ \setlength{\nicefr@mewidth}{\wd0 + 2\nicefr@mechar}
+ \vbox{%
+ \hbox to\nicefr@mewidth{\ding\char'105\hfill\char'106}
+ \vskip-\baselineskip
+ \hbox to\nicefr@mewidth{\hss\raise\dp0\box0\hss}
+ \vskip-\baselineskip
+ \hbox to\nicefr@mewidth{\ding\char'110\hfill\char'107}
+ }
+}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\artdecoframe}
+% This is just a variation of |\curlyframe|.
+% \begin{macrocode}
+\newcommand{\artdecoframe}[2][\textwidth]{{
+ \setlength{\hsize}{#1 - 2\nicefr@mechar}
+ \setbox0=\vbox{#2}
+ \setlength{\nicefr@meheight}{\ht0 + \dp0}
+ \setlength{\nicefr@mewidth}{\wd0 + 2\nicefr@mechar}
+ \vbox{%
+ \hbox to\nicefr@mewidth{\ding\char'115\hfill\char'114}
+ \hbox to\nicefr@mewidth{\hss\raise\dp0\box0\hss}
+ \hbox to\nicefr@mewidth{\ding\char'112\hfill\char'113}
+ }
+}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\generalframe}
+% Finally, I have designed a more general macro for framing.
+% |\generalframe| takes nine parameters (right to the limit) and
+% produces a |\vbox|. The width of this box is less than (or equal to)
+% the current |\hsize|; and it consists of a border generated from the
+% characters in the first eight arguments and a box which contains the
+% material passed in the very last argument.
+%
+% The first eight parameters to |\generalframe| are used as follows:
+% \begin{itemize}
+% \item |#1| is the character for the top left corner,
+% \item |#2| builds the top horizontal leader,
+% \item |#3| is the character for the top right corner,
+% \item |#4| builds the left vertical leader,
+% \item |#5| builds the right vertical leader,
+% \item |#6| is the character for the bottom left corner,
+% \item |#7| builds the top horizontal leader,
+% \item |#8| is the character for the bottom right corner,
+% \end{itemize}
+%
+% This box is centered with respect to the frame, and there is at least
+% |\fboxsep| between the frame and the enclosed material. To ensure that the
+% inner box is calculated properly, all the characters for framing need
+% to be of equal width and height.
+%
+% We first define some internal quantities. |times| holds the number
+% |\hsize| \emph{div} |\fr@mecharTT| which is required in the process
+% of rounding, |\fr@mecharTT| and |\fr@mecharLL| hold the width and
+% height of the characters that make up the top/bottom and left/right
+% parts of the frame, respectively.
+%
+% |\fr@mewidth| holds the final width of the frame and is always less than
+% or equal to the current |\hsize|, whereas |\fr@meheight| holds the
+% final height of the frame minus the heights of the top and bottom row.
+% \begin{macrocode}
+\newcounter{times}
+\newlength{\fr@mecharTT}
+\newlength{\fr@mecharLL}
+\newlength{\fr@mewidth}
+\newlength{\fr@meheight}
+% \end{macrocode}
+% |\generalframe| initializes |\fr@mecharTT| and |\fr@mecharLL| every
+% time it is called, relying on the fact that the user specifies
+% the eight border characters in such a way that |#1|, |#2|, |#3|, |#6|,
+% |#7| and |#8| have the same width and |#1|, |#3|, |#4|, |#5|, |#6| and
+% |#8| have the same height.
+% \begin{macrocode}
+\newcommand{\generalframe}[9]{{
+ \settowidth{\fr@mecharTT}{#2}
+ \settoheight{\fr@mecharLL}{#4}
+% \end{macrocode}
+% In order to enable a packed alignment of the horizontal leaders, we
+% have to round |\fr@mewidth| to an integer multiple of |\fr@mecharTT|.
+% \begin{macrocode}
+ \setcounter{times}{1 * \ratio{\hsize}{\fr@mecharTT}}
+ \setlength{\fr@mewidth}{\fr@mecharTT * \value{times}}
+% \end{macrocode}
+% |\fr@mewidth| is then used to calculate the |\hsize| of the innermost
+% box, allowing for some horizontal space at either side. The box is set
+% and stored in |\box0| for later use.
+% \begin{macrocode}
+ \setlength{\hsize}{\fr@mewidth - 2\fr@mecharTT - 2\fboxsep}
+ \setbox0=\vbox{#9}
+% \end{macrocode}
+% We then calculate |\fr@meheight| (height plus depth of |\box0|, with
+% some vertical space added) and round it to an integer multiple of
+% |\fr@mecharLL|. We add one to ensure at least one character in the
+% vertical leaders.
+% \begin{macrocode}
+ \setlength{\fr@meheight}{\ht0 + \dp0 + 2\fboxsep}
+ \setcounter{times}{1 * \ratio{\fr@meheight}{\fr@mecharLL}}
+ \setcounter{times}{\value{times} + 1}
+ \setlength{\fr@meheight}{\fr@mecharLL * \value{times}}
+% \end{macrocode}
+% Four leaders are used to construct the main part of the frame.
+% \begin{macrocode}
+ \newcommand{\up@fill}{\leaders\hbox{#2}\hfill}
+ \newcommand{\lt@fill}{\leaders\vbox{\hbox{#4}}\vfill}
+ \newcommand{\rt@fill}{\leaders\vbox{\hbox{#5}}\vfill}
+ \newcommand{\dn@fill}{\leaders\hbox{#7}\hfill}
+% \end{macrocode}
+% Finally, everthing is packed together, centered nicely.
+% \begin{macrocode}
+ \vbox{%
+ \hbox to\fr@mewidth{#1\up@fill#3}\nointerlineskip
+ \hbox to\fr@mewidth{\vbox to\fr@meheight{\lt@fill}%
+ \hfill%
+ \vbox to\fr@meheight{\vfill\box0\vfill}%
+ \hfill%
+ \vbox to\fr@meheight{\rt@fill}%
+ }\nointerlineskip
+ \hbox to\fr@mewidth{#6\dn@fill#8}\nointerlineskip
+ }
+}}
+% \end{macrocode}
+% \end{macro}
+% That's all there is.
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+% \Finale
+%
+\endinput
diff --git a/Master/texmf-dist/source/latex/niceframe/niceframe.ins b/Master/texmf-dist/source/latex/niceframe/niceframe.ins
new file mode 100644
index 00000000000..5e0c905c67d
--- /dev/null
+++ b/Master/texmf-dist/source/latex/niceframe/niceframe.ins
@@ -0,0 +1,89 @@
+%%
+%% This file will generate fast loadable files and documentation
+%% driver files from the doc files in this package when run through
+%% LaTeX or TeX.
+%%
+%% This package 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.
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Marcus Ohlhaut.
+%%
+%% This work consists of the files niceframe.dtx and niceframe.ins
+%% and the derived file niceframe.sty.
+%%
+%% Copyright (C) 2009 Marcus Ohlhaut (marcus@ohlhaut.de).
+%% All rights reserved.
+%%
+%% --------------- start of docstrip commands ------------------
+%%
+\def\batchfile{niceframe.ins}
+\input docstrip.tex
+\keepsilent
+\preamble
+
+ This file 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.
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+
+This work has the LPPL maintenance status `maintained'.
+
+The Current Maintainer of this work is Marcus Ohlhaut.
+
+This work consists of the files niceframe.dtx and niceframe.ins
+and the derived file niceframe.sty.
+
+Copyright (C) 2009 Marcus Ohlhaut (marcus@ohlhaut.de).
+All rights reserved.
+
+\endpreamble
+
+\generate{\file{niceframe.drv}{\from{niceframe.dtx}{driver}}
+ \file{niceframe.sty}{\from{niceframe.dtx}{package}}
+ \file{example.tex} {\from{niceframe.dtx}{example}}
+}
+
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the following}
+\Msg{* files into a directory searched by TeX resp. MetaFont:}
+\Msg{*}
+\Msg{* \space\space niceframe.sty}
+\Msg{* \space\space bbding10.mf}
+\Msg{* \space\space dingbat.mf}
+\Msg{* \space\space karta.mf}
+\Msg{* \space\space karta15.mf}
+\Msg{* \space\space umrand.mf}
+\Msg{* \space\space umranda.mf}
+\Msg{* \space\space umrandb.mf}
+\Msg{*}
+\Msg{* To produce the documentation,}
+\Msg{* \space\space run the file niceframe.drv through LaTeX.}
+\Msg{*}
+\Msg{* To typeset an example,}
+\Msg{* \space\space run the file example.tex through LaTeX.}
+\Msg{*}
+\Msg{*}
+\Msg{* Happy TeXing}
+\Msg{*}
+\Msg{***********************************************************}
+
+\endinput