%PDF- %PDF-
| Direktori : /proc/self/root/data/old/usr/share/texlive/texmf-dist/tex/latex/finstrut/ |
| Current File : //proc/self/root/data/old/usr/share/texlive/texmf-dist/tex/latex/finstrut/finstrut.sty |
\NeedsTeXFormat{LaTeX2e}[1994/12/01]
\ProvidesPackage{finstrut}[2011/03/14 v0.5 vmode final strut (DA/UL)]
%% Copyright (C) 2010 2011 Uwe Lueck,
%% http://www.contact-ednotes.sty.de.vu
%% -- author-maintained in the sense of LPPL below --
%%
%% This file can be redistributed and/or modified under
%% the terms of the LaTeX Project Public License; either
%% version 1.3c of the License, or any later version.
%% The latest version of this license is in
%% http://www.latex-project.org/lppl.txt
%% We did our best to help you, but there is NO WARRANTY.
%%
%% Please report bugs, problems, and suggestions via
%%
%% http://www.contact-ednotes.sty.de.vu
%%
%% % *** Another Introduction ***
%% % This is a variant of LaTeX's `\@finalstrut'
%% % that doesn't produce a spurious empty line
%% % in vmode. In general, this deals with a
%% % closing `\par' from users in footnotes,
%% % the idea especially came from using the
%% % 'lipsum' package.
%% % See `source2e.pdf' (`ltboxes.dtx') for the rationale
%% % behind the original definition; it may imply
%% % that the present suggestion is bad with
%% % `p' columns in `tabular' etc.
%% %
%% % With v0.4, the code essentially is Donald Arseneau's.
%%
%% === Outline ===
%% v0.5 considers recommendations by Donald Arseneau.
%% Some of them may break in applications that we do not
%% know about, therefore they must be called by package
%% options. Package Option |[full]| calls all of them.
%% %% 2011/03/14:
%% Package Option |[fullpar]| calls a variant of them
%% where instead of testing for `hmode' vs.~`vmode',
%% `vmode' is \emph{forced} by a `\par', saving some tokens.
%%
%% The choices shall not be checked at each invocation
%% of `\@finalstrut', instead they are evaluated at the
%% definition of `\@finalstrut', at the end of the package.
%% Choices are prepended to this definition by defining
%% `\@tempe', `\@tempd', `\@tempc', and `\@tempb'.
%%
%% === Options ===
%% According to `ltboxes.dtx', a `vmode' test once
%% was introduced for \LaTeXe, but in 1994 removed again---it
%% ``broke" in `p' columns. For this reason, v0.1 and v0.3
%% used an `hmode' test instead.
%% `ltboxes.dtx' does not tell exactly what code broke in
%% exactly which situation. Bad.
%% Brave users may dare the `vmode' test again by choosing
%% package option |[v]|. It sets `\@tempe' for
%% `\edef\@finalstrut'. The #1 argument of `\@tempe' is
%% applied in `hmode', #2 in `vmode'---assuming we are not
%% in `math' `mode' ...!? (TODO)%%%
%% %% <- !?? don't understand 2011/02/16 ->
%% %---While other conditionals
%% % are disabled right before the latter,
%% % we disable the mode test here:
\AtEndOfPackage{\def\@tempe#1#2{\noexpand\ifhmode#1\else#2\fi}}
\DeclareOption{v}{%
\AtEndOfPackage{%
\def\@tempe#1#2{\noexpand\ifvmode#2\else#1\fi}}}
%% Replacing the `hmode' or `vmode' test by \emph{forcing} `vmode'
%% (and then applying Donald Arseneau's suggestions for `vmode')
%% seems just to save a few tokens. With v0.5, option |[par]|
%% picks this idea.
\DeclareOption{par}{\AtEndOfPackage{\def\@tempe#1#2{\par#2}}}
%% |[argdelim]| appends a `\relax' to `\@finalstrut''s argument
%% in case the box number is given as a string of digits
%% (whereas `latex.ltx' only has `\strutbox' and
%% `\@arstrutbox' as arguments).
%% This does not work when somebody tries (e.g.\@)
%% `\@finalstrut11 '. I.e., a ``multi-token" argument must
%% be enclosed in braces indeed.
\AtEndOfPackage{\let\@tempd\@empty}
\DeclareOption{argdelim}{%
\AtEndOfPackage{\def\@tempd{\relax}}}
%% %% v0.5 move \@tempc down
%% |[dptest]| caters for depth exceeeding the depth of the
%% strut box and for negative depth. The test requires that
%% a multi-token argument (see above) is enclosed in braces.
\AtEndOfPackage{\let\@tempc\@secondoftwo}
\DeclareOption{dptest}{%
\AtEndOfPackage{%
\def\@tempd{\relax}%
\let\@tempc\@firstoftwo}}
%% |[full]| enables all of Donald Arseneau's suggestions:
\DeclareOption{full}{%
\AtEndOfPackage{%
\def\@tempe#1#2{\noexpand\ifvmode#2\else#1\fi}%
\def\@tempd{\relax}%
\let\@tempc\@firstoftwo
}}
%% |[fullpar]| enables all of Donald Arseneau's suggestions
%% apart from replacing the `vmode' test by \emph{forcing}
%% `vmode', as with option |[par]|:
\DeclareOption{fullpar}{%
\AtEndOfPackage{%
\def\@tempe#1#2{\par#2}%
\def\@tempd{\relax}%
\let\@tempc\@firstoftwo
}}
%% |[show]| displays the definition of `\@finalstrut'
%% actually resulting:
\AtEndOfPackage{\let\@tempb\relax}
\DeclareOption{show}{%
\AtEndOfPackage{\def\@tempb{\show\@finalstrut}}}
%% Appending choices to the end-of-package hook:
\ProcessOptions
%%
%% === Core Code ===
%% Now we append the `\edef' of `\@finalstrut' to the
%% end-of-package hook
%% (we must hurry so that nobody changes `\@tempe' etc.).
%% |\dp@only| will be an abbreviation for invoking a strut rule;
%% it will only be enabled after the `\edef':
\let\dp@only\relax
\AtEndOfPackage{%
\begingroup
%% Some conditionals are disabled for the `\edef'.
\let\ifdim\relax \let\else\relax \let\fi\relax
%% Actually, they will be restored by `\endgroup';
%% and in order to get the final `\@finalstrut'
%% outside the group, we ``emulate" its `\edef'
%% by `\xdef'ing an alias `\@gtempa' of it etc. ...
\xdef\@gtempa#1{%
\unskip
\@tempe{% %% \ifhmode/\ifvmode
\noexpand\nobreak
\vrule \dp@only #1\@tempd %% maybe \relax
}{%
%% Whereas v0.1 and v0.3 used `\kern' to get the bottom
%% distance in `vmode', Donald Arseneau recommends `\hrule'
%% for the sake of bottom alignment with 'array.sty'
%% (`b' type columns):
\@tempc{% %% depth test or not
\ifdim\prevdepth<\dp#1\relax
\ifdim\prevdepth>\z@
\kern -\prevdepth
\fi
\hrule \dp@only#1\relax
\fi
}{\hrule \dp@only #1\@tempd}% %% maybe \relax
}%
}
\endgroup
\let\@finalstrut\@gtempa
\@tempb %% maybe \show
%% |\dp@only|
\def\dp@only{\@width\z@ \@height\z@ \@depth\dp}
}
%%
%% === Example Result === %% 2011/02/17
%% Option |[fullpar]| amounts to
%% \begin{verbatim}
%% \def\@finalstrut#1{%
%% \unskip\par
%% \ifdim\prevdepth<\dp#1\relax
%% \ifdim\prevdepth>\z@
%% \kern -\prevdepth
%% \fi
%% \hrule \@width\z@ \@height\z@ \@depth\dp#1\relax
%% \fi
%% }
%% \end{verbatim}
%%
%% === Leaving ===
\endinput
%%
%% === VERSION HISTORY ===
v0.1 2010/12/20 very first
v0.2 2011/02/09 redundancies removed -- still bad
NOT DISTRIBUTED
v0.3 2011/02/11 code much reduced again (no \expandafter at all!);
wrong comments replaced; \subsection
v0.4 2011/02/12 Donald Arseneau's full suggestions as options
v0.5 2011/02/12 first \@tempc line moved down
2011/02/16 options [par] and [fullpar]
2011/02/17 explaining \edef/\xdef
2011/02/18 "emulate" \edef
2011/03/14 some more text on v0.5