%%
%% A collection of useful commands
%%

%% can call commands even when they are not defined
\def\safe#1{%
\ifdefined#1%
#1%
\else%
{\color{red}\bf?}%
\fi%
}


%% larger skip
\newskip\hugeskipamount
  \hugeskipamount=24pt plus8pt minus8pt
\def\hugeskip{\vskip\hugeskipamount}


%% penalty before large blocks
\def\preblock{
  \penalty-500
}

%% listparpenalty prevents page breaks before lists
\newcount\prevparpenalty
\def\listparpenalty{
  \prevparpenalty=\@beginparpenalty
  \@beginparpenalty=10000
}
%% back to previous value
\def\unlistparpenalty{
  \@beginparpenalty=\prevparpenalty
}

%% stack relations in subscript or superscript
\def\mAthop#1{\displaystyle\mathop{\scriptstyle #1}}

%% array spanning the entire line
\newlength\largearray@width
\setlength\largearray@width\textwidth
\addtolength\largearray@width{-10pt}
\def\largearray{\begin{array}{@{}>{\displaystyle}l@{}}\hphantom{\hspace{\largearray@width}}\\[-.5cm]}
\def\endlargearray{\end{array}}

%% qedsquare
\def\qed{\penalty10000\hfill\penalty10000$\square$}
