%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /data/old/usr/share/texlive/texmf-dist/tex/latex/finstrut/
Upload File :
Create Path :
Current File : //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

Zerion Mini Shell 1.0