\def\mmmversion{1.1 Time-stamp: <2004-12-30 12:46:18 wand>} \message{mmm.sty - Mitch's Math Macros version \mmmversion} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Revision history: %% Tue Dec 17 13:28:29 2002: initial version, based on material from %% my various macros files. %%%%%%%%%%%%%%%% TABLE OF CONTENTS %%%%%%%%%%%%%%%% % 0. Imported Packages % 1. Special TT Characters % 2. Mathematics and Semantics % 2.1 \ensuremath and friends % 2.2 creating operators % 2.3 Greek Letters Abbreviated % 2.4 Metavariables % 2.5 Some special things for semantics % 2.6 {block} -- for calculations or indented formulas % 2.7 opspace and friends % 3. BNF Grammars % 3.1 Grammar Elements % 3.2 Grammar Environments % 4. Diagrams (not much here) % 5. Figures and Displays (handy!) % 6. Miscellaneous Handy Things %%%%%%%%%%%%%%%% 0. Imported Packages %%%%%%%%%%%%%%%% \RequirePackage{alltt} \RequirePackage{xspace} %\RequirePackage{psfig} \RequirePackage{epsf} %%%%%%%%%%%%%%%% 1. Special TT Characters %%%%%%%%%%%%%%%% % tilde, backslash \def\til{{\tt\char'176}} % \tt tilde \def\bs{{\tt\char'134}} % \tt backslashes \def\hash{{\tt\char'043}} % \tt hash \def\hasht{{\tt \hash t}} % \tt #t \def\hashf{{\tt \hash f}} % \tt #f \def\lbr{{\tt \char'173}} % \tt braces \def\rbr{{\tt \char'175}} \def\ttvert{{\tt \char'174}} % \tt vertical line %%%%%%%%%%%%%%%% 2. Mathematics %%%%%%%%%%%%%%%% %%%% 2.1 \ensuremath % Like \ensuremath, only better. \xspace is your friend! \newcommand{\ma}[1]{\ensuremath{#1}\xspace} % use \mdef for 0-arg macros that are smart enough to go into mathmode without % your telling them to. \def\mdef#1#2{\def#1{\ma{#2}}} %%%% 2.2 creating operators \def\rmop#1{\ma{\mathop{\hbox{\rm #1\/}}\nolimits}} \def\itop#1{\ma{\mathop{\hbox{\it #1\/}}\nolimits}} \def\bfop#1{\ma{\mathop{\hbox{\bf #1\/}}\nolimits}} \def\ttop#1{\ma{\mathop{\hbox{\ttfamily #1\/}}\nolimits}} \def\itord#1{\ma{\mathord{\hbox{\it #1\/}}}} \def\rmord#1{\ma{\mathord{\hbox{\rm #1\/}}}} \def\bford#1{\ma{\mathord{\hbox{\bf #1\/}}}} \def\ttord#1{\ma{\mathord{\hbox{\ttfamily #1\/}}}} %% declaration syntax for these guys: \def\newrmop#1#2{\def#1{\rmop{#2}}} \def\newitop#1#2{\def#1{\itop{#2}}} \def\newbfop#1#2{\def#1{\bfop{#2}}} \def\newttop#1#2{\def#1{\ttop{#2}}} \def\newitord#1#2{\def#1{\itord{#2}}} \def\newrmord#1#2{\def#1{\rmord{#2}}} \def\newbford#1#2{\def#1{\bford{#2}}} \def\newttord#1#2{\def#1{\ttord{#2}}} %%%% 2.3 Greek Letters abbreviated \mdef\a{\alpha} \mdef\b{\beta} \mdef\g{\gamma} \mdef\rr{\rho} \mdef\l{\lambda} \mdef\m{\mu} \mdef\G{\Gamma} \mdef\s{\sigma} \mdef\t{\tau} \mdef\z{\zeta} %%% 2.4 Metavariables: You should never write e, you should write \exp or %%% the like. %% \newmeta defines a new metavariable, which is automatically %% subscripted. \newcommand\newmeta[2]{\def#1##1{\ma{#2_{##1}}}} % Example: \newmeta\exp{\itop{e}} % use as: \exp0, \exp1, \exp2, \exp{} %%% 2.5 Math stuff for semantics: % \setof creates a set with brackets around it. Use \alt for ``such % that''. % Example: \setof{\exp{} \alt \rmop{fv}(\exp{}) \not= \emptyset} \def\setof#1{\ensuremath{\{#1\}}} %% \semfcn takes two arguments: a semantic operator and an argument, %% and surrounds the argument in open braces. \def\semfcn#1#2{\mathop{#1}\nolimits\lbrack\!\lbrack{#2}\rbrack\!\rbrack} % \newdom: declare a new domain (probably same as \newitop). \def\newdom#1#2{\mdef#1{\mathop{\hbox{{\it #2}}}\nolimits\xspace}} % \car, \cdr, \cons \mdef\car{\rmop{car}} \mdef\cdr{\rmop{cdr}} \mdef\cons{\rmop{cons}} %% 2.6 For block-structure & indented formulas \newcommand{\block}[1]{\begin{array}[t]{@{}l@{}l@{}l@{}l@{}l@{}l}#1\end{array}} %% 2.7 opspace and friends \newcommand\opspace{\mathop{}{}} % from Krivine paper \newcommand\opdots{\opspace \dots \opspace\opspace} % math mode only \newcommand\commadots{, \dots, } % math mode only %%%%%%%%%%%%%%%% 3. BNF Grammars %%%%%%%%%%%%%%%% %%%% 3.1 Grammar Elements % basic grammar elements % nonterminal names default to roman, even in theorems. \def\nt#1{\hbox{$\langle\hbox{\rm #1\/}\rangle$}} \def\term#1{\hbox{\tt #1}} % I usually put \, before and after the hbox. \def\alt{~\vert~} \def\lparen{\term{(}} % deprecated, because it breaks paren matching. \def\rparen{\term{)}} % likewise \def\st#1{\ensuremath{\{#1\}^*}} \def\pl#1{\ensuremath{\{#1\}^+}} \def\seplist#1#2{\ensuremath{\{#1\}^{*({#2})}}} \def\pst#1{\term(\st{#1}\term)} %%%% 3.2 Grammar Environments %% Adapted from eopl.sty %% The grammar environment normally lives inside a displaymath. %% It automatically generates a ::= on each line. %% It has 3 fields: lll . The 3th field is for commentary. %% Alas, Latex does not have a good way of automatically switching modes on a %% per-field basis, so you'll have to put in $...$ around text-mode stuff,or %% $|...|$ around tt-mode stuff. %% If you want different things in place of the ::=, use altgrammar %% instead. %% Also you can use \multilineproduction for productions that are too %% long to fit on a single line. \newenvironment{grammar}{\begin{array}{l@{{}::={}}l@{\quad}l}}{\end{array}} % This version puts about the right amount of space around the % operator, at least to my eye. \newenvironment{altgrammar}{\begin{array}{l@{\ }c@{\ }l@{\qquad}l}}{\end{array}} % alternate version, with less space. % \newenvironment{altgrammar}{\begin{array}{l@{{}}c@{}ll}}{\end{array}} %% \production: for simple productions. rhs goes into tt by default. %% If you want a comment in field 3, put it in an mbox. Example: % \production{\nt{expression}} % {if \nt{expression} then \nt{expression} else \nt{expression}} % & \mbox{conditional expression} \\ \def\production#1#2{{#1} & \texttt{#2}} % \altproduction: like \production, but for use with \altgrammar. \def\altproduction#1#2#3{{#1} &{#2} \texttt{#3}} % rhs for multiline production: This is like a little array that can be used % for a production that spans multiple lines, as in: % % &\multilineproduction{ % \term{simpleclass}\ \nt{varlist}\ \nt{varlist}\ \nt{methdecls}\ % \nt{exp} \\ % \quad $|new-simpleclass (c-vars i-vars methdecls init-exp)|$ } \\ \def\multilineproduction#1{\multicolumn{2}{@{}l}{\begin{array}[t]{@{}l}#1\end{array}}} %%%%%%%%%%%%%%%% 4. Diagrams %%%%%%%%%%%%%%%% %% I don't really know how to get a diagram centered reliably. Here's %% the code that I have. %% Wed Mar 12 14:46:32 2003: This seems to work. %% Wed Mar 12 14:47:12 2003 the diagramdirectory should end with a ``/''! \def\diagramdirectory{} \def\diagram#1{\centerline{\epsffile{\diagramdirectory#1}}} %% http://mars.fis.uc.pt/hera-b/epsfigures.html#epslatex suggests %% using epsfig, rather than psfig, and using \centering, as in: %\begin{figure}[htbp] %\centering %\epsfig{file=example.eps, width=\textwidth} %\caption{ Caption text. } %\label{fig:example} %\end{figure} % We'll have to try this sometime. %%%%%%%%%%%%%%%% 5. Figures and Displays %%%%%%%%%%%%%%%% %% separators for top and bottom of displays and figures: \def\dstart{\hbox to \hsize{\vrule depth 4pt\hrulefill\vrule depth 4pt}} \def\dend{\hbox to \hsize{\vrule height 4pt\hrulefill\vrule height 4pt}} % not used, I think. % \def\niceline{\hrule height 0.75pt} %% put nice lines at the top and bottom of figures to make them stand out from %% text. Set these to {} to reset. \def\figstart{\bigskip\dstart} \def\figend{\dend\bigskip} %% display: like displaymath, but with nice lines at beginning and end \newenvironment{display}{\bigskip\dstart\begin{displaymath}}% {\end{displaymath}\dend\bigskip} %% titled displays: handy for grammars and stuff: \newenvironment{tdisplay}[1]{\vbox\bgroup\bigskip{\bf #1}\vspace{-8pt}\\\dstart\begin{displaymath}}% {\end{displaymath}\dend\bigskip\egroup} \renewenvironment{display}{\begin{tdisplay}{\ }}{\end{tdisplay}} % Example: this also shows short-form grammars (but see above about % metavariables). %\begin{tdisplay}{Sets2} %\begin{altgrammar} %v &\in& \Val &\mbox{Expressed Values} \\ %l &\in& \Loc &\mbox{Locations} \\ %s &\in& \Sto &\mbox{Stores} \\ %\end{altgrammar} %\end{tdisplay} % in an altgrammar environment, the lhs's are left-aligned, whereas % they are right aligned in the first example. Right now, I am % recommending altgrammar, which looks good to me. YMMV. %%%%%%%%%%%%%%%% 6. Miscellaneous Handy Things %%%%%%%%%%%%%%%% % Use this with emacs time-stamp mode. \def\timestamp{} \def\Time-stamp: <#1>{\gdef\timestamp{#1}} % Put % % \Time-stamp: <> % somewhere in the first few lines of your file. Emacs will rewrite % the <> to a timestamp, and then you can do things like put the % following in your \author: % {Draft of \timestamp}\\ % Better than \date! % To use time-stamp mode in emacs, put the following lines in your % .emacs : % (add-hook 'write-file-hooks 'time-stamp) % ; optional: for compatibility with Emacs 20, Y2K: % (setq time-stamp-format "%:y-%02m-%02d %02H:%02M:%02S %u") % Mitch likes spaces between paragraphs! \def\betterspacing{\parskip=0.75ex plus 0.25ex}