Created
June 13, 2012 08:11
-
-
Save xiaom/2922693 to your computer and use it in GitHub Desktop.
macros used by Jeff Erickson
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
% http://www.cs.uiuc.edu/~jeffe/pubs/latex.html | |
% ============================-*- LaTeX -*-============================= | |
% | |
% jeffe.sty -- macros I use everywhere | |
% | |
% Jeff Erickson ([email protected]) | |
% Last modified 22 May 2010 | |
% This is free; caveat emptor! | |
% | |
% Requirements that may not be part of every TeX distribution: | |
% (1) The standard AMS math packages amsmath and amssymb. These are | |
% absolutely vital to anyone who typesets mathematics of any | |
% kind. If you don't have them, get them NOW!! | |
% (2) The stmaryrd package. Cosmetic only. | |
% (3) Knuth's manual font `manfnt'. Cosmetic only. | |
% | |
% ====================================================================== | |
\RequirePackage{latexsym,amsmath,amssymb} | |
\RequirePackage[dvipsnames,usenames]{color} | |
\RequirePackage[colorlinks=true,urlcolor=Blue,citecolor=Green,linkcolor=BrickRed]{hyperref} | |
\RequirePackage{stmaryrd} % comment out if unavailable | |
\urlstyle{same} | |
\hyphenation{co-or-din-ate co-or-din-ates half-plane half-space stereo-iso-mers | |
stereo-iso-mer Round-table homol-ogous homol-ogy} | |
\pdfstringdefDisableCommands{\let\boldmath\relax} % allow \boldmath in section titles | |
% ---------------------------------------------------------------------- | |
% Common abbreviations and words with accents | |
% ---------------------------------------------------------------------- | |
% ---- LATIN ---- | |
\def\etal{\emph{et~al.}} % and others | |
%\def\ie{\emph{i.e.}} % that is | |
\def\ie{\textcolor{red}{that is}} | |
%\def\eg{\emph{e.g.}} % for example | |
\def\eg{\textcolor{red}{for example}} | |
\def\vitae{vit\ae{}} | |
\def\apriori{\emph{a~priori}} | |
\def\aposteriori{\emph{a~posteriori}} | |
% ---- FRENCH ---- | |
\def\naive{na\"{\i}ve} | |
\def\Naive{Na\"{\i}ve} | |
\def\naively{na\"{\i}vely} % Okay, I know, this isn't French. | |
\def\Naively{Na\"{\i}vely} | |
\def\cafe{caf\'e} | |
% ---- GERMAN ---- | |
\def\fur{f\"ur} | |
\def\Universitat{Universit\"at} | |
\def\Saarbrucken{Saar\-br\"ucken} % Bypass TeX hyphenation | |
\def\Zurich{Z\"urich} | |
% ---- PORTUGESE (Hi Jorge!) ---- | |
\def\Computacao{Computa\c{c}\~ao} | |
% ---- PROPER NAMES (because I'm lazy) ---- | |
\def\Benes{Bene\v{s}} % ...network | |
\def\Bezier{B\'ezier} % ...spline/curve/surface | |
\def\Bjorner{Bj\"orner} | |
\def\Bochis{Bochi\c{s}} % Daciana | |
\def\Boruvka{Bor\.uvka} % ...'s MST algorithm | |
\def\Bragger{Br\"agger} | |
\def\Bronnimann{Br\"onnimann} \def\Herve{Herv\'e} | |
\def\Bruckner{Br\"uckner} | |
\def\Caratheodory{Carath\'eodory} % Constantin | |
\def\Chvatal{Chv\'atal} \def\Vasek{Va\v{s}ek} | |
\def\Joao{Jo\~ao} % Compa | |
\def\Cortes{Cort\'es} % Carmen | |
\def\Dujmovic{Dujmovi\'c} % Vida | |
\def\Fredo{Fr\'edo} % Durand | |
\def\Erdos{Erd\H{o}s} \def\Pal{P\'al} | |
\def\Frechet{Fr\'echet} | |
\def\Furedi{F\"uredi} \def\Zoltan{Zolt\'an} | |
\def\Grobner{Gr\"obner} % ... basis | |
\def\Grunbaum{Gr\"unbaum} % Branko | |
\def\Hanoi{Hano\"\i} % Tower of... | |
\def\Jarnik{Jarn\a'{\i}k} % ...'s (`Prim's') MST algorithm | |
\def\Komlos{Koml\'os} | |
\def\Kovari{K\"ov\'ari} | |
\def\Lovasz{Lov\'asz} \def\Laszlo{L\'aszl\'o} | |
\def\Matousek{Matou\v{s}ek} \def\Jiri{Ji\v{r}\'\i} | |
\def\Mnev{Mn\"ev} | |
\def\Mobius{M\"obius} % ... strip/transformation/function | |
\def\Mucke{M\"ucke} % Ernst | |
\def\ODunliang{\'O'D\'unliang} | |
\def\Oleinik{Ole\u{\i}nik} | |
\def\Janos{J\'anos} % Pach | |
\def\Palasti{Pal\'asti} | |
\def\Belen{Bel\'en} % Palop | |
\def\Petrovskii{Petrovski\u{\i}} | |
\def\Pinar{P\i nar} % Ali | |
\def\Plucker{Pl\"ucker} % ... coordinates | |
\def\Poincare{Poincar\'e} % ... duality/halfplane | |
\def\Gunter{G\"unter} % Rote, Ziegler | |
\def\Sacristan{Sacrist\'an} % Vera | |
\def\Saskin{\v{S}a\v{s}kin} | |
\def\Schomer{Sch\"omer} | |
\def\Schonhardt{Sch\"onhardt} % ... polyhedron | |
\def\Sos{S\'os} | |
\def\Stackel{St\"ackel} % Paul | |
\def\Szekely{Sz\'ekely} | |
\def\Szemeredi{Szemer\'edi} | |
\def\Toth{T\'{o}th} % Geza | |
\def\Turan{Tur\'an} | |
\def\Ungor{\"Ung\"or} % Alper | |
\def\Voronoi{Vorono\"i} % ... diagram [for francophile pedants only] | |
% Other | |
\def\Cplusplus{C\raisebox{0.5ex}{\tiny\textbf{++}}} | |
% ---------------------------------------------------------------------- | |
% Simple math stuff | |
% ---------------------------------------------------------------------- | |
% ---- SYMBOLS ---- | |
\let\e\varepsilon % a ``real'' epsilon | |
%\def\Integer{\mathsf{Z\hspace{-0.4em}Z}} | |
%\def\Natural{\mathrm{I\!N}} | |
%\def\Real{\mathrm{I\!R}} | |
%\def\Proj{\mathrm{I\!P}} % projective space | |
%\def\Hyper{\mathrm{I\!H}} % hyperbolic space | |
% | |
%% | |
%% These two look okay in Computer Modern 11pt, or Concrete Roman | |
%% 12pt, but they need serious work in other sizes. I need to figure | |
%% out how to draw a vertical bar, or better yet a shallow arc, inside | |
%% the bowls. Or maybe I need to learn METAFONT. Or maybe I should just | |
%% hold my nose and use \mathbb. | |
%% | |
%\def\Complex{\mathrm{\,\raise 0.33ex\hbox{\scriptsize\bf(}\!\!\!C}} | |
%\def\Rational{\mathrm{\,\raise 0.33ex\hbox{\scriptsize\bf(}\!\!\!Q}} | |
% | |
% I give up. These are in the wrong font, but my kludged versions | |
% LOOK like kludges, especially \Z, \Q, and \C. | |
% | |
\def\Real{\mathbb{R}} | |
\def\Proj{\mathbb{P}} | |
\def\Hyper{\mathbb{H}} | |
\def\Integer{\mathbb{Z}} | |
\def\Natural{\mathbb{N}} | |
\def\Complex{\mathbb{C}} | |
\def\Rational{\mathbb{Q}} | |
\let\N\Natural | |
\let\Q\Rational | |
\let\R\Real | |
\let\Z\Integer | |
\def\Rd{\Real^d} | |
\def\RP{\Real\Proj} | |
\def\CP{\Complex\Proj} | |
% ---- OPERATORS (requires amsmath) ---- | |
\def\aff{\operatorname{aff}} | |
\def\area{\operatorname{area}} | |
\def\argmax{\operatornamewithlimits{arg\,max}} | |
\def\argmin{\operatornamewithlimits{arg\,min}} | |
\def\Aut{\operatorname{Aut}} % Automorphism group | |
\def\card{\operatorname{card}} % cardinality, deprecated for \abs | |
\def\conv{\operatorname{conv}} | |
\def\E{\operatorname{E}} % Expectation: $\E[X]$ (like \Pr) | |
\def\EE{\operatornamewithlimits{E}} | |
\def\Hom{\operatorname{Hom}} % Homomorphism group | |
\def\id{\operatorname{id}} % identity | |
\def\im{\operatorname{im}} % image | |
\def\lcm{\operatorname{lcm}} | |
\def\lfs{\operatorname{lfs}} % local feature size | |
\def\poly{\operatorname{poly}} | |
\def\polylog{\operatorname{polylog}} | |
\def\rank{\operatorname{rank}} | |
\def\rel{\operatorname{rel\,}} % relative (interior, boundary, etc.) | |
\def\sgn{\operatorname{sgn}} | |
\def\vol{\operatorname{vol}} % volume | |
\def\fp#1{^{\underline{#1}}} % falling powers: $n\fp{d}$ | |
\def\rp#1{^{\overline{#1}}} % rising powers: $n\rp{d}$ | |
% --- Darts and fences --- | |
% less nice replacements for stmaryrd characters | |
\@ifundefined{shortrightarrow}{\let\shortrightarrow\rightarrow}{} | |
\@ifundefined{shortleftarrow}{\let\shortleftarrow\leftarrow}{} | |
\@ifundefined{shortuparrow}{\let\shortuparrow\uparrow}{} | |
\@ifundefined{shortdownarrow}{\let\shortdownarrow\downarrow}{} | |
\def\arcto{\mathord\shortrightarrow} | |
\def\arc#1#2{#1\arcto#2} | |
\def\cra#1#2{#1\mathord\shortleftarrow#2} | |
\def\fence#1#2{#1\mathord\shortuparrow#2} | |
\def\ecnef#1#2{#1\mathord\shortdownarrow#2} | |
% --- Cheap displaystyle operators --- | |
\def\Frac#1#2{{\displaystyle\frac{#1}{#2}}} | |
\def\Sum{\sum\limits} | |
\def\Prod{\prod\limits} | |
\def\Union{\bigcup\limits} | |
\def\Inter{\bigcap\limits} | |
\def\Lor{\bigvee\limits} | |
\def\Land{\bigwedge\limits} | |
\def\Lim{\lim\limits} | |
\def\Max{\max\limits} | |
\def\Min{\min\limits} | |
% ---- RELATORS ---- | |
\def\deq{\stackrel{\scriptscriptstyle\triangle}{=}} % Use := instead. | |
\def\into{\DOTSB\hookrightarrow} % = one-to-one | |
\def\onto{\DOTSB\twoheadrightarrow} | |
\def\inonto{\DOTSB\lhook\joinrel\twoheadrightarrow} | |
\def\from{\leftarrow} | |
\def\tofrom{\leftrightarrow} | |
\def\mapsfrom{\mathrel{\reflectbox{$\mapsto$}}} | |
\def\longmapsfrom{\mathrel{\reflectbox{$\longmapsto$}}} | |
% ---- DELIMITER PAIRS ---- | |
\def\floor#1{\lfloor #1 \rfloor} | |
\def\ceil#1{\lceil #1 \rceil} | |
\def\seq#1{\langle #1 \rangle} | |
\def\set#1{\{ #1 \}} | |
\def\abs#1{\mathopen| #1 \mathclose|} % use instead of $|x|$ | |
\def\norm#1{\mathopen\| #1 \mathclose\|} % use instead of $\|x\|$ | |
\def\indic#1{\big[#1\big]} % indicator variable; Iverson notation | |
% e.g., Kronecker delta = [x=0] | |
% --- Self-scaling delmiter pairs --- | |
\def\Floor#1{\left\lfloor #1 \right\rfloor} | |
\def\Ceil#1{\left\lceil #1 \right\rceil} | |
\def\Seq#1{\left\langle #1 \right\rangle} | |
\def\Set#1{\left\{ #1 \right\}} | |
\def\Abs#1{\left| #1 \right|} | |
\def\Norm#1{\left\| #1 \right\|} | |
\def\Paren#1{\left( #1 \right)} % need better macro name! | |
\def\Brack#1{\left[ #1 \right]} % need better macro name! | |
\def\Indic#1{\left[ #1 \right]} % indicator variable; Iverson notation | |
% | |
% Macros to typeset sets like {foo|bar} with all three delimiters | |
% correctly scaled to fit. What I *really* want is a \middle macro | |
% that acts just like \left and \right. Grumble. | |
% | |
\def\Bigbar#1{\mathrel{\left|\vphantom{#1}\right.\n@space}} | |
\def\Setbar#1#2{\Set{#1 \Bigbar{#1 #2} #2}} | |
\def\Seqbar#1#2{\Seq{#1 \Bigbar{#1 #2} #2}} | |
\def\Brackbar#1#2{\Brack{#1 \Bigbar{#1 #2} #2}} | |
% Math mode fbox | |
\def\mfbox#1{\mathchoice{{\fbox{\ensuremath{\displaystyle #1}}}} | |
{{\fbox{\ensuremath{\textstyle #1}}}} | |
{{\fbox{\ensuremath{\scriptstyle #1}}}} | |
{{\fbox{\ensuremath{\scriptscriptstyle #1}}}}} | |
% ---- ``ACCENTS'' ---- | |
% NB: Commands equivalent to \lrarrowfill and \overlrarrow are | |
% already defined in amstex! | |
\def\lrarrowfill{$\m@th\mathord\leftarrow\mkern-6mu% | |
\cleaders\hbox{$\mkern-2mu\mathord-\mkern-2mu$}\hfill | |
\mkern-6mu\mathord\rightarrow$} | |
\def\overlrarrow#1{\vbox{\ialign{##\crcr | |
\lrarrowfill\crcr\noalign{\kern-\p@\nointerlineskip} | |
$\hfil\displaystyle{#1}\hfil$\crcr}}} | |
\def\Line#1{\!\overlrarrow{\vphantom{t}\smash{\,#1\,}}\!} | |
\def\Ray#1{\overrightarrow{\vphantom{t}#1\,}\!} | |
\def\Seg#1{\overline{\vphantom{t}#1}} | |
% ---- TEXT STYLES ---- | |
\def\mathsc#1{\text{\textsc{#1}}} | |
\def\mathbs#1{\text{\boldmath\ensuremath{#1}}} | |
\def\EMPH#1{\textbf{\emph{\boldmath #1}}} | |
% ---------------------------------------------------------------------- | |
% \begin{bigabstract}...\end{bigabstract} | |
% For use in documents with title pages. Use normal-sized text in | |
% the abstract! | |
% ---------------------------------------------------------------------- | |
\newenvironment{bigabstract}% | |
{\medskip\noindent\centerline{\textbf{\large\abstractname}}\begin{quotation}}% | |
{\end{quotation}} | |
% ---------------------------------------------------------------------- | |
% Make captions smaller than the text, make their titles bold. | |
% Arguments: #1 == figure name: "Figure 5" | |
% #2 == caption: "Papers by \Erdos, 1900--2000 (projected)" | |
% Less space after floats and before caption, since captions are smaller | |
% ---------------------------------------------------------------------- | |
\@ifundefined{abovecaptionskip}{\newlength\abovecaptionskip} | |
\long\def\@makecaption#1#2{ | |
\vskip \abovecaptionskip | |
\setbox\@tempboxa\hbox{{\sffamily\footnotesize \textbf{#1.} #2}} | |
\ifdim \wd\@tempboxa >\hsize % if more than one line, | |
{\sffamily\footnotesize \textbf{#1.} #2\par} % typeset normally | |
\else % else | |
\hbox to\hsize{\hfil\box\@tempboxa\hfil} % center | |
\fi} | |
\dbltextfloatsep 18pt plus 2pt minus 4pt % was 20pt plus 2pt minus 4pt | |
\textfloatsep 18pt plus 2pt minus 4pt % was 20pt plus 2pt minus 4pt | |
\abovecaptionskip 6pt % was 10pt | |
% ---------------------------------------------------------------------- | |
% Revised theorem environment: | |
% Add a period after the theorem number, and make theorems slanted | |
% instead of italic to help distinguish text from math. Use | |
% \boldmath in theorem label in case it includes math. | |
% ---------------------------------------------------------------------- | |
\def\@opargbegintheorem#1#2#3{\trivlist | |
\item[\hskip\labelsep{\bfseries\boldmath #1\ #2\ (#3).}]\slshape} | |
\def\@begintheorem#1#2{\trivlist | |
\item[\hskip\labelsep{\bfseries\boldmath #1\ #2.}]\slshape} | |
% ---------------------------------------------------------------------- | |
% \newproof{type}{text}(style)[post]: | |
% Define a new type of unnumbered ``theorem'' environment. The last | |
% two arguments are optional; most environments will not use them. | |
% | |
% To change label style, put new style command in label: | |
% \newproof{comment}{\textsf{Comment}} | |
% ---------------------------------------------------------------------- | |
\def\newproof#1#2{\@ifnextchar({\@snproof{#1}{#2}}{\@snproof{#1}{#2}()}} | |
\def\@snproof#1#2(#3){\@ifnextchar[{\@xnproof{#1}{#2}{#3}} | |
{\@xnproof{#1}{#2}{#3}[]}} | |
\def\@xnproof#1#2#3[#4]{%\expandafter\@ifdefinable\csname #1\endcsname | |
{\global\@namedef{#1}{\@prf{#2}{#3}}\global\@namedef{end#1}{\@endprf{#4}}}} | |
\def\@prf#1#2{\@ifnextchar[{\@xprf{#1}{#2}}{\@yprf{#1}{#2}}} | |
\def\@xprf#1#2[#3]{\@yprf{#1\ (#3)}{#2}} | |
\def\@yprf#1#2{\begin{trivlist}\item[\hskip\labelsep{\bfseries\boldmath #1:}]#2} | |
\def\@endprf#1{#1\end{trivlist}} | |
% | |
% Standard proof envrionment: last line has a halmos at the right margin. | |
% Insert \qed to override default halmos placement. | |
% Incompatible with amsprf package! | |
% | |
\newif\ifneedqed | |
\global\needqedfalse | |
\@ifundefined{square}{\let\square\Box}{} % grumble latex2e | |
\def\QED{\ensuremath{{\square}}} | |
\def\markatright#1{\leavevmode\unskip\nobreak\quad\hspace*{\fill}{#1}} | |
\def\qed{\ifneedqed\markatright{\QED}\global\needqedfalse\else\null\fi} | |
\newproof{proof}{Proof\global\needqedtrue}[\qed] | |
\newproof{sketch}{Proof Sketch\global\needqedtrue}[\qed] | |
% | |
% 'Fake' proof environment, for use with wrapfig and similar packages | |
% | |
\newenvironment{rawproof}% | |
{\begin{trivlist}\item[\hskip\labelsep\textbf{Proof:}\global\needqedtrue]}% | |
{\qed\end{trivlist}} | |
% | |
% If the proof ends with a displayed equation, use \aftermath just | |
% before \end{proof} to put the halmos in the ``right'' place. | |
% Doesn't work worth a damn. | |
% | |
\def\aftermath{\par\vspace{-\belowdisplayskip}\vspace{-\parskip}\vspace{-\baselineskip}} | |
% ---------------------------------------------------------------------- | |
% One-shot theoremish environment. For named things like ``Zorn's | |
% Lemma'' or ``The Death Leap Principle'' or ``The Zone Theorem''. | |
% To get one-shot proofish environment, put \normalfont inside. | |
% New improved version stolen from Erik Demaine. | |
% ---------------------------------------------------------------------- | |
\newenvironment{oneshot}[1]{\@begintheorem{#1}{\unskip}}{\@endtheorem} | |
% ---------------------------------------------------------------------- | |
% Algorithm and code environments -- Algorithms are set in normal | |
% text, with 2em indenting, surrounded by a box. Code is set in | |
% typewriter text, with 4 space indenting, and no box. I've never | |
% actually used the code environment. | |
% | |
% WARNING! The true width of the minipage environment is determined | |
% by the contents of the longest line, because the minipage environment | |
% contains a tabbing environment and nothing else. It's a HaX! | |
% | |
% Both environments really need optional line numbering and a better | |
% comment macros. But bold keywords are just distracting, so if you | |
% want them, you're on you own, | |
% ---------------------------------------------------------------------- | |
\def\begin@lgo{\begin{minipage}{1in}\begin{tabbing} | |
\quad\=\qquad\=\qquad\=\qquad\=\qquad\=\qquad\=\qquad\=\qquad\=\qquad\=\qquad\=\qquad\=\qquad\=\qquad\=\kill} | |
\def\end@lgo{\end{tabbing}\end{minipage}} | |
\newenvironment{algorithm} | |
{\begin{tabular}{|l|}\hline\begin@lgo} | |
{\end@lgo\\\hline\end{tabular}} | |
\newenvironment{algo} | |
{\begin{center}\small\begin{algorithm}} | |
{\end{algorithm}\end{center}} | |
% Meh. | |
\def\Comment#1{\textsf{\textsl{$\langle\!\langle$#1\/$\rangle\!\rangle$}}} | |
\def\beginc@de{\noindent\begin{center}\begin{minipage}{1in}\tt | |
\begin{tabbing}~~~~\=~~~~\=~~~~\=~~~~\=~~~~\=~~~~\=~~~~\=\kill} | |
\def\endc@de{\end{tabbing}\end{minipage}\end{center}} | |
\newenvironment{code}{\beginc@de}{\endc@de} | |
% | |
% These only work with <1 line of text. Use sparingly!! | |
% | |
\def\textul#1{\underline{\smash{#1}\vphantom{.}}} | |
\def\strike#1{\ensuremath{\overline{\text{\smash{#1}\vphantom{.}}}}} | |
% ---------------------------------------------------------------------- | |
% Include a file verbatim. Searches the TEXINPUTS path for the file, | |
% even though that's probably not what you really want. Stolen from | |
% ``verbatimfiles.sty'' by Chris Rowley and others. [Don't use their | |
% \vertbatimlisting macro; it has some bizarre side-effects!] | |
% ---------------------------------------------------------------------- | |
\def\verbinput#1{ | |
\begingroup\@verbatim\frenchspacing\@vobeyspaces\input#1\endgroup | |
} | |
% ---------------------------------------------------------------------- | |
% \now -- Current time in h:mm AM/PM format | |
% \mdyy -- Today's date in m/d/yy format. Forget Y2K; this is for humans! | |
% ---------------------------------------------------------------------- | |
\newcount\timehh\timehh=\time | |
\divide\timehh by 60 | |
\newcount\timemm\timemm=\time | |
\count255=\timehh | |
\multiply\count255 by -60 | |
\advance\timemm by \count255 | |
\newif\iftimePM | |
\ifnum\timehh>11 \timePMtrue\else\timePMfalse\fi | |
\ifnum\timehh<1 \advance\timehh by 12\fi | |
\ifnum\timehh>12 \advance\timehh by -12\fi | |
\def\now{\number\timehh:\ifnum\timemm<10 0\fi\number\timemm | |
\iftimePM pm\else am\fi} | |
\newcount\mdYY\mdYY=\year | |
\count255=\year | |
\divide\count255 by 100 | |
\multiply\count255 by 100 | |
\advance\mdYY by -\count255 | |
\def\mdyy{\number\month/\number\day/\ifnum\mdYY<10 0\fi\number\mdYY} | |
% ---------------------------------------------------------------------- | |
% Notes to myself. The margin flags are broken, thanks to an | |
% incompatibility with the geometry package. | |
% ---------------------------------------------------------------------- | |
\def\n@te#1{\textsf{\boldmath \textbf{$\langle\!\langle$#1$\rangle\!\rangle$}}\leavevmode} | |
\def\n@tew@rn{\GenericWarning{}{AUTHOR WARNING: Unresolved \protect\note}} | |
\def\n@ten@te#1{\marginpar | |
[\hfill\llap{\textcolor{red}{\textcircled{#1}$\!\Longrightarrow$}}] | |
{\rlap{\textcolor{red}{$\Longleftarrow\!$\textcircled{#1}}}}} | |
% Warning: The textcomp and mathdesign packages are incompatible! | |
\def\n@tedingb@t{\@ifundefined{textmusicalnote} | |
{$\maltese$} % if you don't have textcomp | |
{\textmusicalnote}} % if you do have textcomp | |
\def\note#1{\textcolor{red}{\n@tew@rn\n@te{\n@ten@te{\n@tedingb@t}#1}}} | |
\def\sidenote#1{\marginpar{\tiny\textsf{#1}}} | |
\setlength{\marginparsep}{0.1in} | |
\setlength{\marginparwidth}{\paperwidth} | |
\addtolength{\marginparwidth}{-\oddsidemargin} | |
\addtolength{\marginparwidth}{-\textwidth} | |
\addtolength{\marginparwidth}{-1.0\marginparsep} | |
\addtolength{\marginparwidth}{-1.0in} | |
%---------------------------------------------------------------------- | |
% Bibliography aliases, so I can use mnemonic citation keys and | |
% geom.bib at the same time. \bibalias{foo}{bar} makes \cite{foo} | |
% act (almost) exactly like \cite{bar}. | |
%---------------------------------------------------------------------- | |
\def\bibalias#1#2{% | |
\global\@namedef{b@#1}{% | |
{\@ifundefined{b@#2}{\textsf{?}}{}\csname b@#2\endcsname}}} | |
%---------------------------------------------------------------------- | |
% Flag bad citations and refernces in the margin. Dangerous if you | |
% have lots of undefined refs; use batchmode the first time. | |
% Incompatible with some document classes. | |
%---------------------------------------------------------------------- | |
\DeclareOption{flagerrors} | |
{ | |
\def\badcite{\ifinner\else\n@ten@te{\textcent}\fi} | |
\def\badref{\ifinner\else\n@ten@te{$\Join$}\fi} | |
\def\bibalias#1#2{% | |
\global\@namedef{b@#1}{% | |
{\@ifundefined{b@#2}{\textsf{>>#1??}}{}\csname b@#2\endcsname}}} | |
\def\@citex[#1]#2{% | |
\let\@citea\@empty | |
\@cite{\@for\@citeb:=#2\do | |
{\@citea\def\@citea{,\penalty\@m\ }% | |
\edef\@citeb{\expandafter\@firstofone\@citeb\@empty}% | |
\if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi | |
\@ifundefined{b@\@citeb}{\mbox{\reset@font\sffamily>\@citeb?}% | |
\badcite% | |
\G@refundefinedtrue% | |
\@latex@warning | |
{Citation `\@citeb' on page \thepage \space undefined}}% | |
{\hbox{\csname b@\@citeb\endcsname}}}}{#1}} | |
\def\@setref#1#2#3{ | |
\ifx#1\relax | |
\protect\G@refundefinedtrue | |
\badref\mbox{\reset@font\sffamily >#3?} | |
\@latex@warning{Reference `#3' on page \thepage \space undefined}% | |
\else | |
\expandafter#2#1\null | |
\fi} | |
} | |
% ---------------------------------------------------------------------- | |
% Draft notice. Put \DRAFT on the title page, in place of \date. | |
% ---------------------------------------------------------------------- | |
\def\draftnotice{Preliminary draft --- \mdyy\ --- Not for distribution} | |
\def\DRAFT{ | |
\date{\fbox{\textsf{\textbf{\draftnotice}}}} | |
\def\@oddfoot{\footnotesize\hss\fbox{\textbf{\textsf{\draftnotice}}}\hss} | |
\let\@evenfoot\@oddfoot | |
} | |
% ---------------------------------------------------------------------- | |
% Dingbats from the TeX/METAFONT-book manual font | |
% Use only with 11 or 12 pt text. | |
% Doesn't work with TeXtures, which doesn't know about manfnt. | |
% ---------------------------------------------------------------------- | |
\font\manual=manfnt | |
\def\goodcube{{\manual\char28}} % possible cube from MF-book | |
\def\badcube{{\manual\char29}} % impossible cube from MF-book | |
\def\starknot{{\manual\char30}} % 2,5 torus knot from MF-book | |
\def\target{{\manual\char36}} % concentric circles from MF-book | |
\def\xflower{{\manual\char38}} % X flower dingbat from MF-book | |
\def\tflower{{\manual\char39}} % + flower dingbat from MF-book | |
\def\changeto{{\manual\char121}} % change arrow | |
\def\dbend{{\manual\char127}} % dangerous bend sign | |
% ---------------------------------------------------------------------- | |
% Dangerous bend environments, stolen from TeXbook and slightly | |
% massaged. | |
% | |
% Invoke as \begin{[d]danger}...\end{[d]danger}. The enclosed text | |
% is offset just like any other list (theorem, proof, etc.) Puts | |
% sign[s] in front of first two lines of first paragraph, which are | |
% (supposedly) never split by a page boundary. Does NOT shrink or | |
% otherwise modify the text. | |
% ---------------------------------------------------------------------- | |
% The dangerous bend signs are the correct size to match two lines of | |
% Computer Modern 9pt type. I really ought to scale them up to | |
% fit whatever size we're using, but I won't. Unfortunately, manfnt | |
% thinks it's a 10pt font, so if we want to match 11pt Computer | |
% Modern, we have to scale manfnt to 12.222222pt! Thanks, Don. | |
% | |
% TeX is a FuXing HaX. | |
% ---------------------------------------------------------------------- | |
% Single danger | |
\def\danger{\begin{trivlist}\item[]\noindent% | |
\begingroup\hangindent=2.5pc\hangafter=-2\clubpenalty=10000% | |
\def\par{\endgraf\endgroup}% | |
\hbox to 0pt{\hskip-\hangindent\dbend\hfill}\ignorespaces} | |
\def\enddanger{\end{trivlist}} | |
% Double danger | |
\def\ddanger{\begin{trivlist}\item[]\noindent% | |
\begingroup\hangindent=4pc\hangafter=-2\clubpenalty=10000% | |
\def\par{\endgraf\endgroup}% | |
\hbox to 0pt{\hskip-\hangindent\dbend\kern2pt\dbend\hfill}\ignorespaces} | |
\def\endddanger{\end{trivlist}} | |
%---------------------------------------------------------------------- | |
% 'cramped' list style, stolen from Jeff Vitter. Doesn't always work. | |
%---------------------------------------------------------------------- | |
\def\cramped | |
{\parskip\@outerparskip\@topsep\parskip\@topsepadd2pt\itemsep0pt | |
% \settowidth{\labelwidth}{\@itemlabel} | |
% \advance\leftmargin-\labelsep | |
% \advance\leftmargin-\labelwidth | |
% \advance\@totalleftmargin-\leftmargin | |
% \advance\linewidth\leftmargin | |
% \parshape1\@totalleftmargin\linewidth | |
} | |
%---------------------------------------------------------------------- | |
% More footnote symbols, please. | |
%---------------------------------------------------------------------- | |
\def\@fnsymbol#1{\ensuremath{\ifcase#1\or *\or \dagger\or \ddagger\or | |
\mathsection\or \mathparagraph\or \|\or **\or \dagger\dagger | |
\or \ddagger\ddagger \or \mathsection\mathsection \or | |
\mathparagraph\mathparagraph \else\@ctrerr\fi}} | |
%---------------------------------------------------------------------- | |
% TeXbook style quotations -- I should really use the right font, tho. | |
%---------------------------------------------------------------------- | |
\newenvironment{rightquote}[1] | |
{\flushright\begin{minipage}{#1\textwidth} | |
\parskip0pt\footnotesize\sffamily\slshape} | |
{\end{minipage}\par\bigskip} | |
\def\quotee#1{\par\vspace{0.5ex}\begin{flushright}\unskip\textup{--- #1}\end{flushright}\unskip} | |
%---------------------------------------------------------------------- | |
% Creative Commons license | |
%---------------------------------------------------------------------- | |
\def\CCLicense#1{\vfill\vbox to 0pt{\centering\tiny\sffamily \textcopyright\ Copyright \number\year\ Jeff Erickson. \quad Released under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License (\url{http://creativecommons.org/licenses/by-nc-sa/3.0/}).\\ Free distribution is strongly encouraged; commercial distribution is expressly forbidden.\quad See {#1} for the most recent revision.\vss}} | |
\ProcessOptions |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment