MAJOR modifications to accomodate natbib
authorTim Pope <code@tpope.net>
Wed, 19 Nov 2003 06:56:18 +0000 (06:56 +0000)
committerTim Pope <code@tpope.net>
Wed, 19 Nov 2003 06:56:18 +0000 (06:56 +0000)
mlastyle.bst
mlastyle.dtx

index d0c322d..aedb136 100644 (file)
@@ -41,7 +41,7 @@ ENTRY
   { author.duplicate author.shared }
   { label }
 
-INTEGERS { output.state before.all mid.sentence after.sentence after.block after.title author.different author.last author.flast citealt.used url.used }
+INTEGERS { output.state before.all mid.sentence after.sentence after.block after.title author.different author.last author.flast citealp.used url.used }
 
 % Rearranged such that true values require capital letters
 FUNCTION {init.consts}
@@ -56,7 +56,7 @@ FUNCTION {init.consts}
   #2 'author.flast :=
   %#3 'author.firstlast :=
 
-  #0 'citealt.used :=
+  #0 'citealp.used :=
   #0 'url.used :=
 }
 
@@ -217,7 +217,7 @@ FUNCTION {field.or.null}
 FUNCTION {emphasize}
 { duplicate$ empty$
     { pop$ "" }
-    { "{\em " swap$ * "}" * }
+    { "\emph{" swap$ * "}" * }
   if$
 }
 
@@ -641,7 +641,7 @@ FUNCTION {format.article.crossref}
     %}
     %{ "In " key * }
   %if$
-  pages empty$ { " \citealt" } { " \citealt[" format.chapter.pages * "]" * } if$
+  pages empty$ { " \citealp" } { " \citealp[" format.chapter.pages * "]" * } if$
   "{" * crossref * "}" *
 }
 
@@ -687,7 +687,7 @@ FUNCTION {format.book.crossref}
 %    }
 %    { format.crossref.editor * }
 %  if$
-  pages empty$ { " \citealt" } { " \citealt[" format.chapter.pages * "]" * } if$
+  pages empty$ { " \citealp" } { " \citealp[" format.chapter.pages * "]" * } if$
   "{" * crossref * "}" *
 }
 
@@ -709,7 +709,7 @@ FUNCTION {format.incoll.inproc.crossref}
 %    }
 %    { "In " format.crossref.editor * }
 %  if$
-  pages empty$ { " \citealt" } { " \citealt[" format.chapter.pages * "]" * } if$
+  pages empty$ { " \citealp" } { " \citealp[" format.chapter.pages * "]" * } if$
   "{" * crossref * "}" *
 }
 
@@ -762,21 +762,24 @@ FUNCTION {cite.label}
     { author }
   if$
   duplicate$ empty$
-    { pop$ cite.title }
+    { cite.title * "( \ \ \ \ \unskip\unskip\unskip\unskip\unskip \unskip)" * }
     {
       author.shared author.different =
-       { "{vv~}{ll}" format.names.custom }
+       { "{vv~}{ll}" format.names.custom 's := }
        { author.shared author.last =
-           { "{f.~}{vv~}{ll}{, jj}" format.names.custom }
+           { "{f.~}{vv~}{ll}{, jj}" format.names.custom 's := }
            { author.shared author.flast =
-               { "{ff~}{vv~}{ll}{, jj}" format.names.custom }
-               { "{vv~}{ll}" format.names.custom ", " * cite.title * }
+               { "{ff~}{vv~}{ll}{, jj}" format.names.custom 's := }
+               { "{vv~}{ll}" format.names.custom ", " * cite.title * 's := "WTF" warning$ }
              if$
            }
          if$
        }
       if$
-      author.duplicate { "(" * cite.title * ")" }{ "( )" * } if$
+      s
+      "( \ \ \ \ \unskip\unskip\unskip\unskip\unskip " *
+      author.duplicate { cite.title * }{ "\unskip" * } if$
+      ")" * s *
     }
   if$
       %}
@@ -1367,7 +1370,7 @@ FUNCTION {init.vars}
 FUNCTION {forward.author.dup.check}
 {
   url empty$ 'skip$ { url.used #1 + 'url.used := } if$
-  crossref empty$ 'skip$ { citealt.used #1 + 'citealt.used := } if$
+  crossref empty$ 'skip$ { citealp.used #1 + 'citealp.used := } if$
   author empty$
     { editor empty$ { organization field.or.null 'a := }{ editor 'a :=} if$}
     { author 'a := }
@@ -1461,8 +1464,8 @@ REVERSE {reverse.author}
 
 FUNCTION {begin.bib}
 {
-  citealt.used
-    { "\ifx\undefined\citealt\let\citealt\cite\fi" write$ newline$ }
+  citealp.used
+    { "\ifx\undefined\citealp\let\citealp\cite\fi" write$ newline$ }
     'skip$
   if$
   url.used
index 7033be8..44a745e 100644 (file)
@@ -162,6 +162,7 @@ Schlegl",
 % \DoNotIndex{\bibpreamble,\bibpunct,\bibsep}
 % \DoNotIndex{\begin}
 % \DoNotIndex{\bfseries}
+% \DoNotIndex{\bgroup}
 % \DoNotIndex{\c@enumiv}
 % \DoNotIndex{\catcode}
 % \DoNotIndex{\centering}
@@ -196,6 +197,7 @@ Schlegl",
 % \DoNotIndex{\ifcase}
 % \DoNotIndex{\ifmlastyle@bibstyle}
 % \DoNotIndex{\ifmlastyle@format}
+% \DoNotIndex{\ifmlastyle@pages}
 % \DoNotIndex{\ifmlastyle@papersize}
 % \DoNotIndex{\ifmlastyle@style}
 % \DoNotIndex{\ifmlastyle@times}
@@ -226,6 +228,8 @@ Schlegl",
 % \DoNotIndex{\mlastyle@formattrue}
 % \DoNotIndex{\mlastyle@instructor}
 % \DoNotIndex{\mlastyle@intbib}
+% \DoNotIndex{\mlastyle@pagesfalse}
+% \DoNotIndex{\mlastyle@pagestrue}
 % \DoNotIndex{\mlastyle@papersizefalse}
 % \DoNotIndex{\mlastyle@papersizetrue}
 % \DoNotIndex{\mlastyle@qspread}
@@ -276,6 +280,7 @@ Schlegl",
 % \DoNotIndex{\thepage}
 % \DoNotIndex{\topsep}
 % \DoNotIndex{\usecounter}
+% \DoNotIndex{\unskip}
 % \DoNotIndex{\vskip}
 % \DoNotIndex{\write}
 % \DoNotIndex{\year}
@@ -460,7 +465,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 |\citealt|, explained below.
+% To work around this limitation, use |\citealp|, explained below.
 %
 % Three additional citation commands are provided, all of which take the
 % same arguments as |\cite|.  To omit the author information from the
@@ -468,10 +473,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{\citealt}|\citealt|.  This was
+% parentheses are omitted by \DescribeMacro{\citealp}|\citealp|.  This was
 % intended for use in cross references, but it can also help in citing
 % multiple works.  The result of
-% |(\citealt[42]{texbook}|\texttt{; }|\citealt[69]{latexdps})|
+% |(\citealp[42]{texbook}|\texttt{; }|\citealp[69]{latexdps})|
 % would be something like \examp[.]{(Knuth 42; Lamport 69)}
 %
 % \subsubsection{Using {\rm \BibTeX}} \label{sec:bibtex}
@@ -783,6 +788,12 @@ Schlegl",
   \def\@listvi{\leftmargin\leftmarginvi
   \parsep\z@\itemsep\z@\topsep -3\p@\relax}
 %    \end{macrocode}
+% Only one space after colons.
+%    \begin{macrocode}
+\ifnum\the\sfcode`\:=2000
+  \sfcode`\:=1999
+\fi
+%    \end{macrocode}
 % \subsubsection{Header}
 % The last name and page number appear on every page, including the first.
 %    \begin{macrocode}
@@ -826,9 +837,12 @@ 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\url{
+  \catcode`/=13
+    \gdef\url{\bgroup\catcode`/=13
+    \let/\slash\mlastyle@url}
+    \gdef\mlastyle@url#1{#1\egroup}
+}\fi
 \ifx\@undefined\citet
   \@ifundefined{chapter}
 %    \end{macrocode}
@@ -875,21 +889,35 @@ Schlegl",
 % 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}}}
+\def\mlastyle@notitle
+  { \ \ \ \ \unskip\unskip\unskip\unskip\unskip\unskip}
+\newif\ifmlastyle@pages
+\renewcommand\NAT@citetp
+{\@ifnextchar[{\mlastyle@pagestrue\NAT@@citetp}%
+  {\mlastyle@pagesfalse\NAT@@citetp[]}}
+\newcommand{\bibstyle@mlastyle}{%
+  \bibpunct[\mlastyle@space]{\mlastyle@brack(}{\mlastyle@brack)}%
+    {;}{a}{\mlastyle@comma}{,}
+  \gdef\mlastyle@brack##1{\ifx\NAT@date\mlastyle@notitle
+    \ifmlastyle@pages ##1\else\ifNAT@swa\ifnum
+    \NAT@ctype=0 ##1\else\unskip\fi\else\unskip\fi\fi\else ##1\fi}
+  \gdef\mlastyle@comma{\ifx\NAT@date\mlastyle@notitle\else,\fi}
+  \gdef\mlastyle@space{\ifx\NAT@date\mlastyle@notitle{}\else{} \fi}
+  \gdef\mlastyle@space{\ifx\NAT@date\mlastyle@notitle
+    \ifnum\NAT@ctype<2
+      \ifNAT@par\ifNAT@swa{} \fi\else{} \fi\fi\else{} \fi}
+  \@ifundefined{chapter}
+  {\gdef\refname{Works Cited}}
+  {\gdef\bibname{Works Cited}}}
 %    \end{macrocode}
 %\end{macro}
 % \begin{macro}{\cite}
-% \begin{macro}{\citealt}
+% \begin{macro}{\citealp}
 % ^^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|,
-% |\citealt|, etc.\ vary depending on the options passed to
+% |\citealp|, etc.\ vary depending on the options passed to
 % \package{mlastyle}.
 %
 % \begin{macro}{\mlastyle@intcite}
@@ -903,7 +931,7 @@ Schlegl",
 % This macro does nothing.  Depending on the options, either |\citeC| or
 % |\citeM| and its ilk will utilize it.
 %    \begin{macrocode}
-\newcommand{\mlastyle@relax}[2][]{}
+\newcommand{\mlastyle@relax}[2][]{\unskip}
 %    \end{macrocode}
 % \end{macro}
 % \subsubsection{MLA Style}
@@ -917,9 +945,9 @@ Schlegl",
   \def\@cite#1#2{(#1\if@tempswa{} #2\fi)}
   \def\cite{\def\@cite##1##2{(##1\if@tempswa{}
     ##2\fi)}\mlastyle@intcite}
-  \def\citealt{\def\@cite##1##2{##1\if@tempswa{}
+  \def\citealp{\def\@cite##1##2{##1\if@tempswa{}
     ##2\fi}\mlastyle@intcite}
-  \let\citeN\citealt
+  \let\citeN\citealp
   \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}
@@ -986,10 +1014,11 @@ Schlegl",
   {\renewcommand\bibname{Works Cited}}
 \else
   \let\cite\citep
-  \newcommand\citepage[2][]{\citeyearpar[\unskip #1]{#2}}
+  \newcommand\citepage[2][]{\citeyearpar[#1]{#2}}
   \newcommand\citepageM[2][]{ \citetext{#2}}
-  \newcommand\citeindirect[2][]{\citep[#1][qtd. in]{#2}}
-  \newcommand\citeindirectM[2][]{ \citep[#1][qtd. in]{#2}}
+  \newcommand\citeindirect[2][]{\citep[qtd.\ in][#1]{#2}}
+  \newcommand\citeindirectM[2][]{ \citep[qtd.\ in][#1]{#2}}
+  \let\citeN\citealp
   \let\citeC\mlastyle@relax
 \fi
 %    \end{macrocode}