summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/oberdiek/settobox.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/oberdiek/settobox.dtx')
-rw-r--r--Master/texmf-dist/source/latex/oberdiek/settobox.dtx636
1 files changed, 636 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/oberdiek/settobox.dtx b/Master/texmf-dist/source/latex/oberdiek/settobox.dtx
new file mode 100644
index 00000000000..1ee9a3260de
--- /dev/null
+++ b/Master/texmf-dist/source/latex/oberdiek/settobox.dtx
@@ -0,0 +1,636 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2000, 2006 by Heiko Oberdiek <oberdiek@uni-freiburg.de>
+%
+% 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".
+%
+% This Current Maintainer of this work is Heiko Oberdiek.
+%
+% This work consists of the main source file settobox.dtx
+% and the derived files
+% settobox.sty, settobox.pdf, settobox.ins, settobox.drv,
+% settobox-example.tex.
+%
+% Distribution:
+% CTAN:macros/latex/contrib/oberdiek/settobox.dtx
+% CTAN:macros/latex/contrib/oberdiek/settobox.pdf
+%
+% Unpacking:
+% (a) If settobox.ins is present:
+% tex settobox.ins
+% (b) Without settobox.ins:
+% tex settobox.dtx
+% (c) If you insist on using LaTeX
+% latex \let\install=y\input{settobox.dtx}
+% (quote the arguments according to the demands of your shell)
+%
+% Documentation:
+% (a) If settobox.drv is present:
+% latex settobox.drv
+% (b) Without settobox.drv:
+% latex settobox.dtx; ...
+% The class ltxdoc loads the configuration file ltxdoc.cfg
+% if available. Here you can specify further options, e.g.
+% use A4 as paper format:
+% \PassOptionsToClass{a4paper}{article}
+%
+% Programm calls to get the documentation (example):
+% pdflatex settobox.dtx
+% makeindex -s gind.ist settobox.idx
+% pdflatex settobox.dtx
+% makeindex -s gind.ist settobox.idx
+% pdflatex settobox.dtx
+%
+% Installation:
+% TDS:tex/latex/oberdiek/settobox.sty
+% TDS:doc/latex/oberdiek/settobox.pdf
+% TDS:doc/latex/oberdiek/settobox-example.tex
+% TDS:source/latex/oberdiek/settobox.dtx
+%
+%<*ignore>
+\begingroup
+ \def\x{LaTeX2e}
+\expandafter\endgroup
+\ifcase 0\ifx\install y1\fi\expandafter
+ \ifx\csname processbatchFile\endcsname\relax\else1\fi
+ \ifx\fmtname\x\else 1\fi\relax
+\else\csname fi\endcsname
+%</ignore>
+%<*install>
+\input docstrip.tex
+\Msg{************************************************************************}
+\Msg{* Installation}
+\Msg{* Package: settobox 2006/02/20 v1.2 Getting box sizes (HO)}
+\Msg{************************************************************************}
+
+\keepsilent
+\askforoverwritefalse
+
+\preamble
+
+This is a generated file.
+
+Copyright (C) 2000, 2006 by Heiko Oberdiek <oberdiek@uni-freiburg.de>
+
+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".
+
+This Current Maintainer of this work is Heiko Oberdiek.
+
+This work consists of the main source file settobox.dtx
+and the derived files
+ settobox.sty, settobox.pdf, settobox.ins, settobox.drv,
+ settobox-example.tex.
+
+\endpreamble
+
+\generate{%
+ \file{settobox.ins}{\from{settobox.dtx}{install}}%
+ \file{settobox.drv}{\from{settobox.dtx}{driver}}%
+ \usedir{tex/latex/oberdiek}%
+ \file{settobox.sty}{\from{settobox.dtx}{package}}%
+ \usedir{doc/latex/oberdiek}%
+ \file{settobox-example.tex}{\from{settobox.dtx}{example}}%
+}
+
+\obeyspaces
+\Msg{************************************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the following}
+\Msg{* file into a directory searched by TeX:}
+\Msg{*}
+\Msg{* settobox.sty}
+\Msg{*}
+\Msg{* To produce the documentation run the file `settobox.drv'}
+\Msg{* through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{*}
+\Msg{************************************************************************}
+
+\endbatchfile
+%</install>
+%<*ignore>
+\fi
+%</ignore>
+%<*driver>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesFile{settobox.drv}%
+ [2006/02/20 v1.2 Getting box sizes (HO)]
+\documentclass{ltxdoc}
+\usepackage{holtxdoc}
+\usepackage{calc}
+\usepackage{settobox}
+\begin{document}
+ \DocInput{settobox.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{97}
+%
+% \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 \~}
+%
+% \GetFileInfo{settobox.drv}
+%
+% \title{The \xpackage{settobox} package}
+% \date{2006/02/20 v1.2}
+% \author{Heiko Oberdiek\\\xemail{oberdiek@uni-freiburg.de}}
+%
+% \maketitle
+%
+% \begin{abstract}
+% Commands are defined for getting box sizes similar
+% to \LaTeX's \cs{settowidth} commands.
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \section{Usage}
+%
+% \subsection{Get box dimensions}
+%
+% \begin{declcs}^^A
+% {settoboxwidth}\,\M{\LaTeX\ length}\,\M{\LaTeX\ box}\\
+% \SpecialUsageIndex{\settoboxheight}^^A
+% \cs{settoboxheight}\,\M{\LaTeX\ length}\,\M{\LaTeX\ box}\\
+% \SpecialUsageIndex{\settoboxdepth}^^A
+% \cs{settoboxdepth}\,\M{\LaTeX\ length}\,\M{\LaTeX\ box}\\
+% \SpecialUsageIndex{\settoboxtotalheight}^^A
+% \cs{settoboxtotalheight}\,\M{\LaTeX\ length}\,\M{\LaTeX\ box}
+% \end{declcs}
+% A \meta{\LaTeX\ box} is allocated by \cs{newsavebox}.
+% It can be filled by \cs{sbox} or the environment \texttt{lrbox}.
+% The commands above extract then the desired lengths.
+%
+% \subsection{Set box dimensions}
+%
+% \begin{declcs}^^A
+% {setboxwidth}\,\M{\LaTeX\ box}\,\M{\LaTeX\ length expression}\\
+% \SpecialUsageIndex{\setboxheight}^^A
+% \cs{setboxheight}\,\M{\LaTeX\ box}\,\M{\LaTeX\ length expression}\\
+% \SpecialUsageIndex{\setboxdepth}^^A
+% \cs{setboxdepth}\,\M{\LaTeX\ box}\,\M{\LaTeX\ length expression}
+% \end{declcs}
+% These commands allow the manipulation of the box. Package \xpackage{calc}
+% is supported in the \meta{\LaTeX\ length expression}.
+% Also the following length are available in this expression:
+% \begin{quote}
+% \begin{tabular}{@{}ll@{}}
+% \cs{width}& width of the box\\
+% \cs{height}& height of the box\\
+% \cs{depth}& depth of the box\\
+% \cs{totalheight}& totalheight of the box\\
+% \end{tabular}
+% \end{quote}
+% Note, the base point (point at the left margin of the baseline)
+% always remain constant.
+%
+% \subsection{Move box}
+%
+% \begin{declcs}^^A
+% {setboxmoveleft}\,\M{\LaTeX\ box}\,\M{\LaTeX\ length expression}\\
+% \SpecialUsageIndex{\setboxmoveright}^^A
+% \cs{setboxmoveright}\,\M{\LaTeX\ box}\,\M{\LaTeX\ length expression}\\
+% \SpecialUsageIndex{\setboxlower}^^A
+% \cs{setboxlower}\,\M{\LaTeX\ box}\,\M{\LaTeX\ length expression}\\
+% \SpecialUsageIndex{\setboxright}^^A
+% \cs{setboxright}\,\M{\LaTeX\ box}\,\M{\LaTeX\ length expression}
+% \end{declcs}
+% Note, the box is shifted relative to the base point. The base point
+% is always inside the box, however the width and height of the
+% box change along with the movement.
+%
+% \subsection{Example}
+%
+% \subsubsection{Short example}
+%
+% \begin{quote}
+%\begin{verbatim}
+%\newsavebox{\mybox}
+%\newlength{\mylength}
+%\sbox{\mybox}{Hello World}
+%\settoboxwidth{\mylength}{\mybox}
+%\end{verbatim}
+% \end{quote}
+%
+% \subsubsection{Test file that shows box manipulations}
+%
+% \begin{macrocode}
+%<*example>
+\documentclass{article}
+
+\usepackage{settobox}
+\usepackage{calc}
+
+\newsavebox{\mybox}
+
+\setlength{\fboxsep}{0pt}
+\setlength{\parindent}{20pt}
+\setlength{\parskip}{10pt}
+\pagestyle{empty}
+
+ % \test{#1}
+ % The macro is called with commands in #1 that manipulates
+ % the box \mybox. These commands along with the result of
+ % the manipulation is shown. Thus the essence of the
+ % macro is:
+ %
+ % a) \sbox{\mybox}{The cracy fox.}
+ % b) #1 % manipulates \mybox
+ % c) Print #1 commands.
+ % d) Print box with frame
+ %
+ % The implemenation looks more weird:
+\makeatletter
+\newcommand*{\test}[1]{%
+ \par
+ \begingroup
+ \raggedright
+ \edef\x{\detokenize{#1}}
+ \let\do\@makeother
+ \dospecials
+ \catcode`\~\active
+ \catcode`\ =10\relax
+ \def~{\\}%
+ \noindent
+ \texttt{\scantokens\expandafter{\x}}
+ \par
+ \endgroup
+ \begingroup
+ \let~\relax
+ \sbox{\mybox}{The cracy fox.}
+ #1%
+ A---\fbox{\usebox\mybox}---B
+ \endgroup
+ \par
+}
+\makeatother
+
+\begin{document}
+
+\test{\setboxwidth{\mybox}{1.25\width}}
+\test{\setboxheight{\mybox}{0pt}}
+\test{\setboxheight{\mybox}{2\height}}
+\test{\setboxdepth{\mybox}{\height}}
+\test{\setboxmoveleft{\mybox}{5pt}}
+\test{%
+ \setboxmoveleft{\mybox}{5pt}~%
+ \setboxwidth{\mybox}{\width + 5pt}%
+}
+\test{\setboxmoveright{\mybox}{0.5\width}}
+\test{\setboxlower{\mybox}{\height}}
+\test{\setboxraise{\mybox}{\depth}}
+\test{%
+ \setboxmoveright{\mybox}{5pt}~%
+ \setboxwidth{\mybox}{\width + 5pt}~%
+ \setboxheight{\mybox}{\height + 5pt}~%
+ \setboxdepth{\mybox}{\depth + 5pt}%
+}
+
+\end{document}
+%</example>
+% \end{macrocode}
+%
+% \noindent
+% The result:
+%
+% \vspace{1ex}
+% \hrule
+%
+% \begingroup
+% \newsavebox{\mybox}
+%
+% \setlength{\fboxsep}{0pt}
+% \setlength{\parindent}{20pt}
+% \setlength{\parskip}{10pt}
+%
+% \makeatletter
+% \newcommand*{\test}[1]{^^A
+% \par
+% \begingroup
+% \raggedright
+% \edef\x{\detokenize{#1}}
+% \let\do\@makeother
+% \dospecials
+% \catcode`\~\active
+% \catcode`\ =10\relax
+% \def~{\\}^^A
+% \noindent
+% \texttt{\scantokens\expandafter{\x}}
+% \par
+% \endgroup
+% \begingroup
+% \let~\relax
+% \sbox{\mybox}{The cracy fox.}
+% #1^^A
+% A---\fbox{\usebox\mybox}---B
+% \endgroup
+% \par
+% }
+% \makeatother
+%
+% \test{\setboxwidth{\mybox}{1.25\width}}
+% \test{\setboxheight{\mybox}{0pt}}
+% \test{\setboxheight{\mybox}{2\height}}
+% \test{\setboxdepth{\mybox}{\height}}
+% \test{\setboxmoveleft{\mybox}{5pt}}
+% \test{^^A
+% \setboxmoveleft{\mybox}{5pt}~^^A
+% \setboxwidth{\mybox}{\width + 5pt}^^A
+% }
+% \test{\setboxmoveright{\mybox}{0.5\width}}
+% \test{\setboxlower{\mybox}{\height}}
+% \test{\setboxraise{\mybox}{\depth}}
+% \test{^^A
+% \setboxmoveright{\mybox}{5pt}~^^A
+% \setboxwidth{\mybox}{\width + 5pt}~^^A
+% \setboxheight{\mybox}{\height + 5pt}~^^A
+% \setboxdepth{\mybox}{\depth + 5pt}^^A
+% }
+%
+% \endgroup
+% \vspace{1ex}
+% \hrule
+% \vspace{4ex}
+%
+% \StopEventually{
+% }
+%
+% \section{Implementation}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+% Package identification.
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{settobox}%
+ [2006/02/20 v1.2 Getting box sizes (HO)]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand*{\settoboxwidth}[2]{\setlength{#1}{\wd#2}}
+\newcommand*{\settoboxheight}[2]{\setlength{#1}{\ht#2}}
+\newcommand*{\settoboxdepth}[2]{\setlength{#1}{\dp#2}}
+\newcommand*{\settoboxtotalheight}[2]{%
+ \setlength{#1}{\ht#2}%
+ \addtolength{#1}{\dp#2}%
+}
+% \end{macrocode}
+%
+% \begin{macro}{\setboxwidth}
+% \begin{macrocode}
+\newcommand*{\setboxwidth}[2]{%
+ \settobox@length\wd{#1}{#2}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\setboxheight}
+% \begin{macrocode}
+\newcommand*{\setboxheight}[2]{%
+ \settobox@length\ht{#1}{#2}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\setboxheight}
+% \begin{macrocode}
+\newcommand*{\setboxdepth}[2]{%
+ \settobox@length\dp{#1}{#2}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\setboxmoveleft}
+% \begin{macrocode}
+\newcommand*{\setboxmoveleft}[2]{%
+ \settobox@horiz{-}{#1}{#2}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\setboxmoveright}
+% \begin{macrocode}
+\newcommand*{\setboxmoveright}[2]{%
+ \settobox@horiz{}{#1}{#2}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\setboxlower}
+% \begin{macrocode}
+\newcommand*{\setboxlower}[2]{%
+ \settobox@vert\lower{#1}{#2}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\setboxraise}
+% \begin{macrocode}
+\newcommand*{\setboxraise}[2]{%
+ \settobox@vert\raise{#1}{#2}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\settobox@length}
+% The work for the \cs{setbox...} commands is done by
+% \cs{settobox@length}. Inside the length expression
+% \cs{width}, \cs{height}, \cs{depth}, \cs{totalheight}
+% are set to the dimensions of the box.\\
+% \begin{tabular}{@{}ll@{}}
+% |#1|:& the property of the box that is to be changed
+% (\cs{wd}, \cs{ht}, \cs{dp})\\
+% |#2|:& the box\\
+% |#3|:& length expression
+% \end{tabular}
+% \begin{macrocode}
+\def\settobox@length#1#2#3{%
+ \settobox@calc{#2}{#3}{#1#2=##1sp\relax}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\settobox@horiz}
+% \begin{macrocode}
+\def\settobox@horiz#1#2#3{%
+ \settobox@calc{#2}{#3}{\setbox#2=\hbox{\kern#1##1sp\copy#2}}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\settobox@vert}
+% \begin{macrocode}
+\def\settobox@vert#1#2#3{%
+ \settobox@calc{#2}{#3}{\setbox#2=\hbox{#1##1sp\copy#2}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\settobox@calc}
+% \begin{macrocode}
+\def\settobox@calc#1#2#3{%
+ \begingroup
+ \def\width{\wd#1}%
+ \def\height{\ht#1}%
+ \def\depth{\dp#1}%
+ \dimen@\ht#1\relax
+ \advance\dimen@\dp#1\relax
+ \def\totalheight{\dimen@}%
+ \setlength{\dimen@}{#2}%
+ \count@\dimen@
+ \def\x##1{\endgroup
+ #3%
+ }%
+ \expandafter\x\expandafter{\the\count@}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+% \section{Installation}
+%
+% \paragraph{CTAN.} This package is available on
+% CTAN\footnote{\url{ftp://ftp.ctan.org/tex-archive/}}:
+% \begin{description}
+% \item[\CTAN{macros/latex/contrib/oberdiek/settobox.dtx}] The source file.
+% \item[\CTAN{macros/latex/contrib/oberdiek/settobox.pdf}] Documentation.
+% \end{description}
+%
+% \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting
+% \docstrip\ archive. The files are extracted by running the
+% \xfile{.dtx} through \plainTeX:
+% \begin{quote}
+% \verb|tex settobox.dtx|
+% \end{quote}
+%
+% \paragraph{TDS.} Now the different files must be moved into
+% the different directories in your installation TDS tree
+% (also known as \xfile{texmf} tree):
+% \begin{quote}
+% \sbox0{^^A
+% \begin{tabular}{@{}>{\ttfamily}l@{$\quad\rightarrow\quad$}>{\ttfamily}l@{}}
+% settobox.sty & tex/latex/oberdiek/settobox.sty\\
+% settobox.pdf & doc/latex/oberdiek/settobox.pdf\\
+% settobox-example.tex & doc/latex/oberdiek/settobox-example.tex\\
+% settobox.dtx & source/latex/oberdiek/settobox.dtx\\
+% \end{tabular}^^A
+% }%
+% \ifdim\wd0>\linewidth
+% \mbox{}\nobreak\hskip0pt minus\leftmargin
+% \usebox0
+% \nobreak\hskip0pt minus\rightmargin
+% \else
+% \usebox0
+% \fi
+% \end{quote}
+% If you have a \xfile{docstrip.cfg} that configures and enables \docstrip's
+% TDS installing feature, then some files can already be in the right
+% place, see the documentation of \docstrip.
+%
+% \paragraph{Refresh file databases.} If your \TeX~distribution
+% (\teTeX, \mikTeX, \dots) rely on file databases, you must refresh
+% these. For example, \teTeX\ users run \verb|texhash| or
+% \verb|mktexlsr|.
+%
+% \subsection{Some details for the interested}
+%
+% \paragraph{Attached source.}
+%
+% The PDF documentation on CTAN also includes the
+% \xfile{.dtx} source file. It can be extracted by
+% AcrobatReader 6 or higher. Another option is \textsf{pdftk},
+% e.g. unpack the file into the current directory:
+% \begin{quote}
+% \verb|pdftk settobox.pdf unpack_files output .|
+% \end{quote}
+%
+% \paragraph{Unpacking with \LaTeX.}
+% The \xfile{.dtx} chooses its action depending on the format:
+% \begin{description}
+% \item[\plainTeX:] Run \docstrip\ and extract the files.
+% \item[\LaTeX:] Generate the documentation.
+% \end{description}
+% If you insist on using \LaTeX\ for \docstrip\ (really,
+% \docstrip\ does not need \LaTeX), then inform the autodetect routine
+% about your intension:
+% \begin{quote}
+% \verb|latex \install=y\input{settobox.dtx}|
+% \end{quote}
+% Do not forget to quote the argument according to the demands
+% of your shell.
+%
+% \paragraph{Generating the documentation.}
+% You can use both the \xfile{.dtx} or the \xfile{.drv} to generate
+% the documentation. The process can be configured by the
+% configuration file \xfile{ltxdoc.cfg}. For instance, put this
+% line into this file, if you want to have A4 as paper format:
+% \begin{quote}
+% \verb|\PassOptionsToClass{a4paper}{article}|
+% \end{quote}
+% An example follows how to generate the
+% documentation with pdf\LaTeX:
+% \begin{quote}
+%\begin{verbatim}
+%pdflatex settobox.dtx
+%makeindex -s gind.ist settobox.idx
+%pdflatex settobox.dtx
+%makeindex -s gind.ist settobox.idx
+%pdflatex settobox.dtx
+%\end{verbatim}
+% \end{quote}
+%
+% \begin{History}
+% \begin{Version}{2000/02/11 v1.0}
+% \item
+% First public release, written as answer in the
+% newsgroup \xnewsgroup{de.comp.text.tex} in the thread
+% \textit{Die Hoehe von Minipages und Bild}, date: 2000/02/11.
+% \end{Version}
+% \begin{Version}{2000/09/07 v1.1}
+% \item
+% Documentation added.
+% \item
+% CTAN release.
+% \end{Version}
+% \begin{Version}{2006/02/20 v1.2}
+% \item
+% \cs{setboxwidth}, \cs{setboxheight}, \cs{setboxdepth} added.
+% \item
+% Box move commands added.
+% \item
+% DTX framework.
+% \item
+% LPPL 1.3
+% \end{Version}
+% \end{History}
+%
+% \PrintIndex
+%
+% \Finale
+\endinput