\ProvidesPackage{dlfltxbcodetips}[2007/05/07 v0.1 by Lars 'daleif' Madsen] % this pacakge collects some macros presented as code tips in my LaTeX % book: "Introduktion til LaTeX". As the macros might be useful for % other than the normal readers of my book, the longer macros are % collected in this package. % This package 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 2003/12/01 or later. %% %% This work has the LPPL maintenance status "maintained". %% %% The Current Maintainer of this work is Lars Madsen (daleif@imf.au.dk). %% \RequirePackage{amsmath,amssymb} % \InsertTheoremBreak removes the spacing above the first item, % \InsertTheoremBreak* does not \newcommand\InsertTheoremBreak{% \@ifstar{\item[\vbox{\null}]}{% \begingroup % keep changes local \setlength\itemsep{0pt}% \setlength\parsep{0pt}% \item[\vbox{\null}]% \endgroup% }} % macro made on request by Morten H\o gholm % \ArrowBetweenLines adds arrow on the left % \ArrowBetweenLines* on the right % more information is needed % requires the amsmath package \def\ArrowBetweenLines{\relax \iffalse{\fi\ifnum0=`}\fi \@ifstar{\ArrowBetweenLines@auxI{00}}{\ArrowBetweenLines@auxI{01}}} \def\ArrowBetweenLines@auxI#1{% \@ifnextchar[% {\ArrowBetweenLines@auxII{#1}}% {\ArrowBetweenLines@auxII{#1}[\Updownarrow]}} \def\ArrowBetweenLines@auxII#1[#2]{% \ifnum0=`{\fi \iffalse}\fi \crcr \noalign{\nobreak\vskip-\baselineskip\vskip-\lineskip}% \noalign{\expandafter\in@\expandafter{\@currenvir}% {alignedat,aligned,gathered}}% \if#1 &&\quad #2\else #2\quad\fi \ifin@ \else\notag\fi \\\noalign{\nobreak\vskip-\lineskip}} % for making theorems with shaded background % requires the use of ntheorem, (x)color and framed % currently only ntheorem is supported (perhaps support for amsthm or % theorem will be added later) % has the same syntax as \newtheorem \newcommand\NewShadedTheorem[1]{% \@ifnextchar[{\NST@levelii{#1}}{\NST@levelii{#1}[]}} \def\NST@levelii#1[#2]#3{% \@ifnextchar[{\NST@leveliii{#1}[#2]{#3}}{\NST@leveliii{#1}[#2]{#3}[]}} \newcommand\NST@helper[1]{% \edef\@tempa{c@#1}\edef\@tempb{c@#1@inner}% \expandafter\let\csname\@tempa\expandafter\endcsname\csname\@tempb\endcsname% \edef\@tempa{the#1}\edef\@tempb{the#1@inner}% \expandafter\let\csname\@tempa\expandafter\endcsname\csname\@tempb\endcsname% } \def\NST@leveliii#1[#2]#3[#4]{% \ifx\\#2\\% i.e. no common counter \ifx\\#4\\% i.e. no dominant counter \newtheorem{#1@inner}{#3}% \NST@helper{#1}% \else% i.e. dominant counter \newtheorem{#1@inner}{#3}[#4]% \NST@helper{#1}% \fi% \else% i.e. common counter \newtheorem{#1@inner}[#2]{#3}% \fi% \newenvironment{#1}{% \begin{shaded}% \setlength\theorempreskipamount{0pt}% \setlength\theorempostskipamount{0pt}% \begin{#1@inner}}{\end{#1@inner}\end{shaded}\@endparenv}% \newtheorem*{#1@innerstr}{#3} \newenvironment{#1*}{% \begin{shaded}% \setlength\theorempreskipamount{0pt}% \setlength\theorempostskipamount{0pt}% \begin{#1@innerstr}}{\end{#1@innerstr}\end{shaded}\@endparenv}% } % Mathematics into Type by Ellen Swanson recommends that line-broken % displayed alignments should be indented by 2em (and other rules) % instead of aligning ti the left and indenting all subsequent lines, % it is easier to just pull back the first line. Just align all lines % to the left and replace the & on the fist line with \PullBack % The indentation amount can be changed by \PullBack[3], i.e. no unit, % 'em will be used automatically \newlength\PullBackLength \newcommand\PullBack[1][2]{% \setlength{\global\PullBackLength}{#1em}% \kern\PullBackLength% & \kern-\PullBackLength} % this implements a stack that holds a user build mathindent % not easy to explain in words see the documentation \newtoks\dlf@STACK \def\dlf@Prepend#1(to:)#2{\toks0={#1}% \global\edef\act{\global\noexpand#2={\the\toks0 \the#2}}% \act} \def\dlf@PopOff#1{\global\edef\act{\global\noexpand\dlf@SplitOff\the#1% (tail:)\noexpand#1}\act} \def\dlf@SplitOff#1#2(tail:)#3{#3={#2}} \newlength\MathIndentLength \newcommand\MathIndent{\kern\MathIndentLength} \newcommand\PopMathIndent{% \@ifstar{\@PopMathIndent\relax}{\@PopMathIndent\MathIndent}} \newcommand\@PopMathIndent[1]{\dlf@PopOff\dlf@STACK \settowidth\@tempdimc{\ensuremath{\displaystyle\phantom{\the\dlf@STACK}}} \setlength{\global\MathIndentLength}{\@tempdimc}#1} \newcommand\SetMathIndent[1]{\dlf@STACK={}\dlf@Prepend{{#1}}(to:)\dlf@STACK \settowidth\@tempdimc{\ensuremath{\displaystyle\phantom{\the\dlf@STACK}}} \setlength{\global\MathIndentLength}{\@tempdimc}#1} \newcommand\AddtoMathIndent[1]{\dlf@Prepend{{#1}}(to:)\dlf@STACK \settowidth\@tempdimc{\ensuremath{\displaystyle\phantom{\the\dlf@STACK}}} \setlength{\global\MathIndentLength}{\@tempdimc}#1} % constructs a \bigtimes symbol, in the same category as e.g. \sum % etc. Since we are using \DeclareMathOperator, the amsmath package is % required, thus autoloaded by this pacakge \newcommand\SNYDINTERN[1]{\vcenter{{\hbox{#1\ensuremath\times}}}} \newcommand\SNYD{% \mathchoice{\SNYDINTERN\huge\displaystyle}% display style {\SNYDINTERN\LARGE\textstyle\mkern-3.5mu} % text style {\SNYDINTERN{}\scriptstyle\mkern-2mu} % script style {\SNYDINTERN\footnotesize\scriptscriptstyle\mkern-2mu}% script script style } \DeclareMathOperator*\bigtimes{\SNYD} % constructor for creating negated \up/downarrow % requires graphicx \newcommand*\nrotarrowconstructor[2]{% \mathrel{\m@th\sbox\z@{$ #1 $}% \raisebox{1.3\dp\z@}{% \makebox[\wd\z@][c]{% \reflectbox{\rotatebox[origin=cB]{90}{$ #2 $}}% \kern0.32\wd\z@% }}}% } \newcommand\nuparrow{\nrotarrowconstructor\uparrow\nrightarrow} \newcommand\ndownarrow{\nrotarrowconstructor\downarrow\nleftarrow} % this can be used as the first thing in an amsmath alignment % environments for displayed math. It switches \abovedisplayskip and % \abovedisplayshortskip before the display, usefull in some cases to % save some space \newcommand\SwapDeadSpace{% \noalign{\vskip-\abovedisplayskip\vskip\abovedisplayshortskip} }