[XeTeX] Problem with apacite and fontspec

Ross Moore ross at ics.mq.edu.au
Fri Oct 3 03:04:05 CEST 2008


Hi Diedrick,

On 03/10/2008, at 2:09 AM, Diederick C. Niehorster wrote:

> Dear Xetex Users,
>
>
>
> I’ve just discovered XeteX and got very excited by it. So I decided  
> to practice and convert a work in progress from plain LateX to  
> XeteX (well, just add some fontspec stuff to select a different  
> (OpenType) font). I ran into the following problem:
>
> When both the packages apacite and fontspec are loaded and I cite  
> more than one paper by the same authors from the same year, I get  
> an error message during compilation.
>
> If I don’t load either apacite (just use plainnat.bst with natbib)  
> or fontspec, this error does not occur.
>
> The error message occurring is:
>
> ------
>
> ! Undefined control sequence.
>
> \@calc at post@scan ...fi \fi \fi \fi \fi \calc at next
>
>
>
> l.16 ...e item works fine: \citet{Wertheimer1967a}
>

I've tested your example and found that the incompatibility
is triggered by the use of the  calc.sty  package,
which is loaded by  fontspec.sty .


More specifically,  calc.sty  changes the way  \setcounter  works.
The programming in  apacite.sty  does not take this into account.
The problem occurs when using \citet and other \cite command variants
defined by  natbib.sty , since these require significant extra parsing
beyond what LaTeX would do without  natbib .


Here's a simple fix that seems to work:


\usepackage[tocbib]{apacite}
%%  ----  RRM  2008/10/03
%% for compatibility with calc.sty
%% we need an extra \protect as below before  \setcounter
%%
\renewcommand{\BCnt}[1]{\protect\setcounter{BibCnt}{#1}\protect 
\theBibCnt}
\renewcommand{\BCntIP}[1]{\protect\setcounter{BibCnt}{#1}\mbox{- 
\protect\theBibCnt}}
\renewcommand{\BCntND}[1]{\protect\setcounter{BibCnt}{#1}\mbox{- 
\protect\theBibCnt}}

\usepackage[sort]{natbib}
%\usepackage{calc}
\usepackage{fontspec}   % provides font selecting commands
  ...


This avoids \setcounter being expanded too early, at a place
where it isn't actually being used.
All still works correctly at the place where it *is* required.



An alternative solution, and perhaps a better one, would be
to have made the commands  \BCnt  \BCntIP  \BCntND  robust
in the first place; e.g.  apacite.sty   should use

  \DeclareRobustCommand{\BCnt}[1]{\setcounter{BibCnt}{#1}\theBibCnt}
  \DeclareRobustCommand{\BCntIP}[1]{\setcounter{BibCnt}{#1}\mbox{- 
\theBibCnt}}
  \DeclareRobustCommand{\BCntND}[1]{\setcounter{BibCnt}{#1}\mbox{- 
\theBibCnt}}


You can patch this solution cleanly into existing documents,
as follows:


\usepackage[tocbib]{apacite}
\DeclareRobustCommand{\robustBCnt}[1]{\setcounter{BibCnt}{#1}\theBibCnt}
\DeclareRobustCommand{\robustBCntIP}[1]{\setcounter{BibCnt}{#1}\mbox{- 
\theBibCnt}}
\DeclareRobustCommand{\robustBCntND}[1]{\setcounter{BibCnt}{#1}\mbox{- 
\theBibCnt}}
\let\BCnt\robustBCnt
\let\BCntIP\robustBCntIP
\let\BCntND\robustBCntND

\usepackage[sort]{natbib}
%\usepackage{calc}
\usepackage{fontspec}   % provides font selecting commands
  ...


Furthermore, if a future version of   apacite.sty  makes its own fix,
as suggested above, then documents with this modification should  
continue
to work properly.  However, a danger is if  \BCnt  \BCntIP  \BCntND
are changed in a *different way*, to solve this or any other problem.


This analysis is based on:

\ProvidesPackage{apacite}
    [2007/09/03 v4.00 APA citation]

which is the latest version available at CTAN.




> ------
>
>
>
> This error is not specific to the two papers I cite in the example,  
> it occurs with others also.
>
> Any ideas on how to fix this or is this a bug incompatibility in  
> one of the packages that has to be fixed?
>


Hope this helps,

	Ross

>
>
> Thanks,
>
> Diederick
>

------------------------------------------------------------------------
Ross Moore                                       ross at maths.mq.edu.au
Mathematics Department                           office: E7A-419
Macquarie University                             tel: +61 (0)2 9850 8955
Sydney, Australia  2109                          fax: +61 (0)2 9850 8114
------------------------------------------------------------------------





More information about the XeTeX mailing list