[texhax] NatBib-based styles and unusual year or author entries

Aditya Mahajan adityam at umich.edu
Fri Jun 1 21:44:57 CEST 2007


Quoting Dan Hatton <vi5u0-texhax at yahoo.co.uk>:

> On Wed, 30 May 2007, Philip G. Ratcliffe wrote:
>
>> However, if I enclose the entire date in an extra set of braces {}
>> then, on runnng LaTeX, I get a string of errors, but ... the output
>> is correct.
>
> Dear All,
>
> I have some more information on this.  I was originally getting the
> wrong output, McGlashan 1995 (1911) b,( instead of McGlashan 1995(
> 1911) b,a because this construction in natbib.sty:
>
> \newcommand\NAT at parse@date{}
> \def\NAT at parse@date#1#2#3#4#5#6@@{%
>   \ifnum\the\catcode`#1=11\def\NAT at year{}\def\NAT at exlab{#1}\else
>   \ifnum\the\catcode`#2=11\def\NAT at year{#1}\def\NAT at exlab{#2}\else
>   \ifnum\the\catcode`#3=11\def\NAT at year{#1#2}\def\NAT at exlab{#3}\else
>   \ifnum\the\catcode`#4=11\def\NAT at year{#1#2#3}\def\NAT at exlab{#4}\else
>     \def\NAT at year{#1#2#3#4}\def\NAT at exlab{{#5}}\fi\fi\fi\fi}
>
> assumes that, if the construct like "1995a" or "1995 (1911)a" has more
> than four tokens, the fifth token is the citation letter (a, b, etc.,)
> and uses it as such (it's a sort of very long-term millenium bug,
> whereby natbib will fail in the year 10000.)  So, Philip's trick of
> enclosing the whole year construct in parentheses, year="{1995
> (1911)}", gave the correct output, because it reduced the number of
> tokens in the year to 1 <= 4.  It produced error messages (I guess)
> because the catcode of a multi-character token is non-numeric, so
> \ifnum can't cope with it.
>
>
> One solution would be to make a version of natbib.sty with something
> like
>
> \newcommand\NAT at parse@date{}
> \def\NAT at parse@date#1#2#3#4#5#6#7#8#9#10#11#12#13@@{%
>   \ifnum\the\catcode`#1=11\def\NAT at year{}\def\NAT at exlab{#1}\else
>   \ifnum\the\catcode`#2=11\def\NAT at year{#1}\def\NAT at exlab{#2}\else
>   \ifnum\the\catcode`#3=11\def\NAT at year{#1#2}\def\NAT at exlab{#3}\else
>   \ifnum\the\catcode`#4=11\def\NAT at year{#1#2#3}\def\NAT at exlab{#4}\else
>   \ifnum\the\catcode`#5=11\def\NAT at year{#1#2#3#4}\def\NAT at exlab{#5}\else
>   \ifnum\the\catcode`#6=11\def\NAT at year{#1#2#3#4#5}\def\NAT at exlab{#6}\else
>   \ifnum\the\catcode`#7=11\def\NAT at year{#1#2#3#4#5#6}\def\NAT at exlab{#7}\else
>   
> \ifnum\the\catcode`#8=11\def\NAT at year{#1#2#3#4#5#6#7}\def\NAT at exlab{#8}\else
>   
> \ifnum\the\catcode`#9=11\def\NAT at year{#1#2#3#4#5#6#7#8}\def\NAT at exlab{#9}\else
>   
> \ifnum\the\catcode`#10=11\def\NAT at year{#1#2#3#4#5#6#7#8#9}\def\NAT at exlab{#(10)}\else
>   
> \ifnum\the\catcode`#11=11\def\NAT at year{#1#2#3#4#5#6#7#8#9#10}\def\NAT at exlab{#11}\else
>     
> \def\NAT at year{#1#2#3#4#5#6#7#8#9#10#11}\def\NAT at exlab{{#12}}\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
>
> but that's not permissible due to having more than nine parameters.
> Anyone have any better ideas, please?
>

Maybe do what the FAQ suggests for such things, see 
http://www.tex.ac.uk/cgi-bin/texfaq2html?label=moren9


Aditya


More information about the texhax mailing list