More work on switch to natbib
[latex-mlastyle.git] / mlastyle.dtx
index c469d4beb378ea5feb74114f4b20aa5b9ade261a..7033be8b0ee6686b7709c27bb15416c90055c73d 100644 (file)
 %
 %<*driver>
 \begin{filecontents}{mlastyle.bib}
+@PREAMBLE{"\def\BibTex{\rmfamily B\kern -.05em\textsc {i\kern -.025emb}\kern -.08emT\kern -.1667em\lower .7ex\hbox {E}\kern -.125emX}"}
+
 @BOOK{handbook,
   AUTHOR = "Joseph Gibaldi",
   TITLE = "MLA Handbook for Writers of Research Papers",
-  TITLE = "MLA Handbook",
+  KEY = "MLA Handbook",
   EDITION = "Sixth",
   ADDRESS = "New York",
   PUBLISHER = "MLA",
 
 @BOOK{latexdps,
   AUTHOR = "Leslie Lamport",
-  TITLE = "\LaTeX: A Document Preparation System",
-  KEY = "\LaTeX",
+  TITLE = "{\LaTeX}: A Document Preparation System",
+  KEY = "{\LaTeX}",
   EDITION = "Second",
   ADDRESS = "Reading",
   PUBLISHER = "Addison-Wesley",
   YEAR = "1994"}
 
 @MANUAL{lshort,
-  author  = {Tobias Oetker and Hubert Partl and Irene Hyna and Elisabeth 
-Schlegl},
-  title   = {The Not So Short Introduction to {\LaTeXe}},
-  year    = 2000,
-  month   = "11~"#dec,
-  version = {4.0},
-  url     = {CTAN://info/lshort/}
-}
+  AUTHOR  = "Tobias Oetker and Hubert Partl and Irene Hyna and Elisabeth 
+Schlegl",
+  TITLE   = "The Not So Short Introduction to {\LaTeXe}",
+  KEY     = "Not So Short",
+  YEAR    = "2000",
+  MONTH   = dec,
+  VERSION = "4.0",
+  ACCESSDATE = "1~"#nov#"~2003",
+  URL     = "CTAN://info/lshort/"}
+
+@MANUAL{btxdoc,
+  AUTHOR  = "Oren Patashnik",
+  TITLE   = "{\BibTex ing}",
+  YEAR    = "1988",
+  MONTH   = feb,
+  ACCESSDATE = "1~"#nov#"~2003",
+  URL     = "CTAN://biblio/bibtex/distribs/doc/btxdoc.tex"}
 \end{filecontents}
 \documentclass[draft]{ltxdoc}
 \iffalse
@@ -58,18 +69,26 @@ Schlegl},
   \addtolength{\textwidth}{-1in}
   \addtolength{\headwidth}{-1in}
 \else
+  \IfFileExists{natbib.sty}{
+    \usepackage{natbib}
+    \citeindextrue
+    \bibpunct{[}{]}{,}{n}{}{,}%{
+    \bibliographystyle{plainnat}}
+    {\bibliographystyle{plain}}
+  \IfFileExists{url.sty}{\usepackage{url}}{}
   \usepackage[compat]{mlastyle}
-  \bibliographystyle{plain}
-  \addtolength{\headsep}{-5pt}
+  %\addtolength{\headsep}{-5pt}
   %\addtolength{\headheight}{-12pt}
-  \addtolength{\topmargin}{-17pt}
-  \addtolength{\textheight}{22pt}
+  %\addtolength{\topmargin}{-17pt}
+  %\addtolength{\textheight}{22pt}
   \IfFileExists{ulem.sty}{\usepackage[normalem]{ulem}}{\let\uline\emph}
 \fi
 \IfFileExists{times.sty}%
 {\newcommand{\examp}[2][]{{\let\emph\uline\fontfamily{ptm}\selectfont##2}##1}}%
 {\newcommand{\examp}[2][]{``##2##1''}}
 
+{\makeatletter\gdef\NAT@MLA#1{#1}\gdef\NAT@idxtxt
+{\expandafter\NAT@MLA\NAT@name\ \NAT@open\NAT@num\NAT@close}}
 \EnableCrossrefs
 \CodelineIndex
 \RecordChanges
@@ -126,6 +145,7 @@ Schlegl},
 % \DoNotIndex{\@listiv}
 % \DoNotIndex{\@listv}
 % \DoNotIndex{\@listvi}
+% \DoNotIndex{\@m}
 % \DoNotIndex{\@startsection}
 % \DoNotIndex{\@tempswafalse}
 % \DoNotIndex{\@title}
@@ -139,6 +159,7 @@ Schlegl},
 % \DoNotIndex{\addtolength}
 % \DoNotIndex{\advance}
 % \DoNotIndex{\baselineskip}
+% \DoNotIndex{\bibpreamble,\bibpunct,\bibsep}
 % \DoNotIndex{\begin}
 % \DoNotIndex{\bfseries}
 % \DoNotIndex{\c@enumiv}
@@ -147,6 +168,7 @@ Schlegl},
 % \DoNotIndex{\centerline}
 % \DoNotIndex{\chapter}
 % \DoNotIndex{\citation}
+% \DoNotIndex{\citet,\citep}
 % \DoNotIndex{\clearpage}
 % \DoNotIndex{\csname}
 % \DoNotIndex{\day}
@@ -166,6 +188,7 @@ Schlegl},
 % \DoNotIndex{\fi}
 % \DoNotIndex{\futurelet}
 % \DoNotIndex{\gdef}
+% \DoNotIndex{\global}
 % \DoNotIndex{\hangindent}
 % \DoNotIndex{\headrulewidth}
 % \DoNotIndex{\if@filesw}
@@ -194,6 +217,7 @@ Schlegl},
 % \DoNotIndex{\listparindent}
 % \DoNotIndex{\makeenmark}
 % \DoNotIndex{\mbox}
+% \DoNotIndex{\ml@}
 % \DoNotIndex{\mlastyle@bibstylefalse}
 % \DoNotIndex{\mlastyle@bibstyletrue}
 % \DoNotIndex{\mlastyle@cite}
@@ -219,6 +243,7 @@ Schlegl},
 % \DoNotIndex{\month}
 % \DoNotIndex{\newblock}
 % \DoNotIndex{\newcommand}
+% \DoNotIndex{\newdimen}
 % \DoNotIndex{\newenvironment}
 % \DoNotIndex{\newif}
 % \DoNotIndex{\newpage}
@@ -246,7 +271,6 @@ Schlegl},
 % \DoNotIndex{\sloppy}
 % \DoNotIndex{\space}
 % \DoNotIndex{\string}
-% \DoNotIndex{\sw@llow}
 % \DoNotIndex{\the}
 % \DoNotIndex{\thebibliography}
 % \DoNotIndex{\thepage}
@@ -256,6 +280,7 @@ Schlegl},
 % \DoNotIndex{\write}
 % \DoNotIndex{\year}
 % \DoNotIndex{\z@}
+% \DoNotIndex{\bibhang}
 % \DoNotIndex{\evensidemargin}
 % \DoNotIndex{\headheight}
 % \DoNotIndex{\headsep}
@@ -290,7 +315,7 @@ Schlegl},
 % \surname{Pope}
 %
 % \maketitle
-% \nocite{*}
+%
 % \tableofcontents
 %
 % \section{Introduction}
@@ -412,13 +437,13 @@ Schlegl},
 %
 %\bibitem[Lamport]{latexdps}
 %Lamport, Leslie.
-%\newblock {\em \LaTeX: A Document Preparation System}.
+%\newblock \emph{\LaTeX: A Document Preparation System}.
 %\newblock 2nd.~ed.
 %\newblock Reading: Addison-Wesley, 1994.
 %
 %\end{thebibliography}\end{verbatim}
 % In this example, |Lamport| is the author's last name (for use in
-% citations) and |latex| is the marker used to reference it (see
+% citations) and |latexdps| is the marker used to reference it (see
 % section~\ref{sec:parenthetical}).
 %
 % For information on automatically generating the list of works cited with
@@ -435,7 +460,7 @@ Schlegl},
 % |\cite|\oarg{pages}|{|\meta{marker
 % 1}\texttt{,}\penalty\exhyphenpenalty\meta{marker 2}\ldots|}|; however, page
 % numbers can currently be specified only for the last referenced source.
-% To work around this limitation, use |\citeN|, explained below.
+% To work around this limitation, use |\citealt|, explained below.
 %
 % Three additional citation commands are provided, all of which take the
 % same arguments as |\cite|.  To omit the author information from the
@@ -443,10 +468,10 @@ Schlegl},
 % citations---those of the format \examp{(qtd. in Pope
 % \pageref{sec:italics})}---can be
 % created with \DescribeMacro{\citeindirect}|\citeindirect|.  Finally, the
-% parentheses are omitted by \DescribeMacro{\citeN}|\citeN|.  This was
+% parentheses are omitted by \DescribeMacro{\citealt}|\citealt|.  This was
 % intended for use in cross references, but it can also help in citing
 % multiple works.  The result of
-% |(\citeN[42]{texbook}|\texttt{; }|\citeN[69]{latexdps})|
+% |(\citealt[42]{texbook}|\texttt{; }|\citealt[69]{latexdps})|
 % would be something like \examp[.]{(Knuth 42; Lamport 69)}
 %
 % \subsubsection{Using {\rm \BibTeX}} \label{sec:bibtex}
@@ -460,8 +485,9 @@ Schlegl},
 % and \Lopt{style} modes and a bibliography style of |plain| in
 % \Lopt{format} and \Lopt{compat} modes.
 %
-% Use of \BibTeX{} is also beyond the scope of this document; instead,
-% another example is provided.  To use it, substitute
+% Use of \BibTeX{} is also beyond the scope of this document; consult
+% Patashnik\citeC{btxdoc} for an introduction.
+% Briefly, to use the following example, substitute
 % |\bibliography|\marg{filename} for the |thebibliography| environment.
 % Then create \meta{filename}\file{.bib} with the contents below.
 % Generating the document entails running \file{latex} on the \file{.tex}
@@ -470,8 +496,8 @@ Schlegl},
 %\begin{verbatim}
 %@BOOK{latexdps,
 %  AUTHOR = "Leslie Lamport",
-%  TITLE = "\LaTeX: A Document Preparation System",
-%  KEY = "\LaTeX",
+%  TITLE = "{\LaTeX}: A Document Preparation System",
+%  KEY = "{\LaTeX}",
 %  EDITION = "Second",
 %  ADDRESS = "Reading",
 %  PUBLISHER = "Addison-Wesley",
@@ -597,7 +623,8 @@ Schlegl},
 % Define the surname, along with an obsolete synonym.
 %    \begin{macrocode}
 \def\surname#1{\gdef\mlastyle@surname{#1}}
-\def\mlastyle@surname{\def\sw@llow##1 {}\expandafter\sw@llow\@author}
+\def\mlastyle@surname{\def\ml@##1 ##2,##3@@{##2}%
+  \expandafter\ml@\@author, ,@@}
 \let\lastname\surname
 %    \end{macrocode}
 % \end{macro}
@@ -606,6 +633,12 @@ Schlegl},
 %    \begin{macrocode}
 \ifmlastyle@format
 %    \end{macrocode}
+% \begin{macro}{\mlastyle@i}
+% This is the standard MLA format indent.
+%    \begin{macrocode}
+  \newdimen\mlastyle@i \mlastyle@i=.5in
+%    \end{macrocode}
+% \end{macro}
 % \subsubsection{Macros}
 % \begin{macro}{\maketitle}
 % |\maketitle| generates a heading in MLA format.
@@ -662,7 +695,7 @@ Schlegl},
 % Indented 1 inch, with an additional .25 inch hanging indent.
 %    \begin{macrocode}
   \renewenvironment{verse}{\list{}{\mlastyle@qspread
-    \advance\leftmargin.75in\itemindent-.25in
+    \advance\leftmargin1.5\mlastyle@i\itemindent-.5\mlastyle@i
     \listparindent\itemindent}\item\relax}{\endlist}
 %    \end{macrocode}
 % \end{environment}
@@ -670,7 +703,7 @@ Schlegl},
 % Indented 1 inch, with a paragraph indent of an additional .25 inches.
 %    \begin{macrocode}
   \renewenvironment{quotation}{\list{}{\mlastyle@qspread
-    \advance\leftmargin.5in\itemindent.25in
+    \advance\leftmargin\mlastyle@i\itemindent.5\mlastyle@i
     \listparindent\itemindent}\item\relax}{\endlist}
 %    \end{macrocode}
 % \end{environment}
@@ -679,8 +712,8 @@ Schlegl},
 % indented.
 %    \begin{macrocode}
   \renewenvironment{quote}{\list{}{\mlastyle@qspread
-    \advance\leftmargin.5in
-    \listparindent.25in}\item\relax}{\endlist}
+    \advance\leftmargin\mlastyle@i
+    \listparindent.5\mlastyle@i}\item\relax}{\endlist}
 %    \end{macrocode}
 % \end{environment}
 % \begin{environment}{workscited}
@@ -688,7 +721,7 @@ Schlegl},
 %    \begin{macrocode}
   \newenvironment{workscited}%
     {\newpage{\centerline{Works Cited}}}{\newpage}
-  \newcommand{\bibent}{\noindent \hangindent .5in}
+  \newcommand{\bibent}{\noindent \hangindent\mlastyle@i}
 %    \end{macrocode}
 % \end{environment}
 % \subsubsection{Margins}
@@ -697,31 +730,31 @@ Schlegl},
 % ^^A\addtolength{\headheight}{-1pt}
 % ^^A\setlength{\headheight}{1.4\headheight}% kludge
 %    \begin{macrocode}
-  \addtolength{\voffset}{-0.5in}
+  \addtolength{\voffset}{-.5in}
   \setlength{\textheight}{\paperheight}
   \addtolength{\textheight}{-2in}
   \setlength{\topmargin}{0in}
   \setlength\headheight\f@baselineskip
-  \setlength{\headsep}{0.5in}
+  \setlength{\headsep}{.5in}
   \addtolength{\headsep}{-\headheight}
   \setlength{\footskip}{0.25in}
   \raggedbottom
 %    \end{macrocode}
 % Left and right margins in MLA format are each 1 inch wide.
 %    \begin{macrocode}
-  \addtolength{\hoffset}{-0.5in}
+  \addtolength{\hoffset}{-.5in}
   \setlength{\textwidth}{\paperwidth}
   \addtolength{\textwidth}{-2in}
-  \setlength{\oddsidemargin}{0.5in}
-  \setlength{\evensidemargin}{0.5in}
-  \setlength{\marginparwidth}{0.5in}
+  \setlength{\oddsidemargin}{.5in}
+  \setlength{\evensidemargin}{.5in}
+  \setlength{\marginparwidth}{.5in}
 %    \end{macrocode}
 % \subsubsection{Paragraphs}
 % Paragraphs should be left justified, with the first line indented .5
 % inches.
 %    \begin{macrocode}
   \raggedright
-  \setlength{\parindent}{.5in}
+  \setlength\parindent\mlastyle@i
 %    \end{macrocode}
 % MLA format specifies that all paragraphs should be indented, even those
 % beginning a new section.  This snippet from \package{indentfirst} changes
@@ -771,7 +804,8 @@ Schlegl},
 %    \begin{macrocode}
   \RequirePackage[ragged,norule]{footmisc}
   \def\footnotelayout{\linespread{1}\footnotesize\raggedright{} }
-  \footnotemargin .56in
+  \footnotemargin\mlastyle@i
+  \advance\footnotemargin .35em
   \skip\footins=2\baselineskip
   \footnotesep 1.2\footnotesep
   \addtolength\footnotesep{\baselineskip}
@@ -792,6 +826,10 @@ Schlegl},
 % The definition of |\thebibliography| varies depending on the document
 % class.
 %    \begin{macrocode}
+\ifx\@undefined\url
+  \def\url#1{{\catcode`/=13\let/=\mlastyle@slash#1}}
+\fi
+\ifx\@undefined\citet
   \@ifundefined{chapter}
 %    \end{macrocode}
 % Article class.
@@ -804,7 +842,6 @@ Schlegl},
         \itemindent-\leftmargin
         \def\newblock{}
         \usecounter{enumiv}
-        %\catcode`\/=13\global\let/=\mlastyle@slash
         \sloppy%\sfcode`\.=\@m
       }}
 %    \end{macrocode}
@@ -818,22 +855,41 @@ Schlegl},
         \itemindent-\leftmargin
         \def\newblock{}
         \usecounter{enumiv}
-        %\catcode`/=13\let/=\mlastyle@slash
         \sloppy%\sfcode`\.=\@m
       }}
 %    \end{macrocode}
 % \end{environment}
+% \subsubsection{Experimental \package{natbib} Implementation}
+%    \begin{macrocode}
+\else
+  \newcommand\bibpreamble{%
+    \@ifundefined{citet}{}%
+    {\bibhang\mlastyle@i\bibsep\z@}}
+\fi
+%    \end{macrocode}
 %    \begin{macrocode}
 \fi % \ifmlastyle@format
 %    \end{macrocode}
 % \subsection{Style}
+% \begin{macro}{\bibstyle@mlastyle}
+% This first block is the beginnings of an implementation for
+% \package{natbib}.
+%    \begin{macrocode}
+\newcommand{\bibstyle@mlastyle}%
+{\bibpunct[ ]{(}{)}{;}{a}{\mlastyle@comma}{,}
+\gdef\mlastyle@comma{\ifx\NAT@date\space\def\NAT@date{\unskip}\else,\fi}
+\@ifundefined{chapter}
+{\gdef\refname{Works Cited}}
+{\gdef\bibname{Works Cited}}}
+%    \end{macrocode}
+%\end{macro}
 % \begin{macro}{\cite}
-% \begin{macro}{\citeN}
+% \begin{macro}{\citealt}
 % ^^A\begin{macro}{\citepage}
 % ^^A\begin{macro}{\citequote}
 % The following macros, combined with \file{mlastyle.bst}, provide
 % for a bibliography in MLA style.  Note that the definition of |\cite|,
-% |\citeN|, etc.\ vary depending on the options passed to
+% |\citealt|, etc.\ vary depending on the options passed to
 % \package{mlastyle}.
 %
 % \begin{macro}{\mlastyle@intcite}
@@ -857,11 +913,13 @@ Schlegl},
 % executed.
 %    \begin{macrocode}
 \ifmlastyle@style
+\ifx\@undefined\citet
   \def\@cite#1#2{(#1\if@tempswa{} #2\fi)}
   \def\cite{\def\@cite##1##2{(##1\if@tempswa{}
     ##2\fi)}\mlastyle@intcite}
-  \def\citeN{\def\@cite##1##2{##1\if@tempswa{}
+  \def\citealt{\def\@cite##1##2{##1\if@tempswa{}
     ##2\fi}\mlastyle@intcite}
+  \let\citeN\citealt
   \def\citeM{\def\@cite##1##2{ (##1\if@tempswa{}
     ##2\fi)}\mlastyle@intcite}
   \def\citepage{\def\@cite##1##2{\if@tempswa(##2)\fi}\mlastyle@intcite}
@@ -926,6 +984,14 @@ Schlegl},
   \@ifundefined{chapter}
   {\renewcommand\refname{Works Cited}}
   {\renewcommand\bibname{Works Cited}}
+\else
+  \let\cite\citep
+  \newcommand\citepage[2][]{\citeyearpar[\unskip #1]{#2}}
+  \newcommand\citepageM[2][]{ \citetext{#2}}
+  \newcommand\citeindirect[2][]{\citep[#1][qtd. in]{#2}}
+  \newcommand\citeindirectM[2][]{ \citep[#1][qtd. in]{#2}}
+  \let\citeC\mlastyle@relax
+\fi
 %    \end{macrocode}
 %
 % ^^A% Define the command \workscited{bib}{style}{nocite}
@@ -948,11 +1014,16 @@ Schlegl},
 % set.
 %    \begin{macrocode}
 \else
-  \newcommand{\mlastyle@cite}[2][]{\@tempswafalse\@citex[]{#2}}
+  \ifx\@undefined\citet
+    \newcommand{\mlastyle@cite}[2][]{\@tempswafalse\@citex[]{#2}}
+    \newcommand{\citeC}[2][]{~\@tempswafalse\@citex[]{#2}}
+  \else
+    \newcommand{\mlastyle@cite}[2][]{\citep[]{#2}}
+    \def\citeC{ \citep}
+  \fi
   \let\cite\mlastyle@cite
   \let\citepage\mlastyle@cite
   \let\citeindirect\mlastyle@cite
-  \newcommand{\citeC}[2][]{~\@tempswafalse\@citex[]{#2}}
   \let\citeM\mlastyle@relax
   \let\citepageM\mlastyle@relax
   \let\citeindirectM\mlastyle@relax