# biblatex: is there a command analogous to \ifciteseen but within one page?

\usepackage[style=numeric-comp,hyperref=true]{biblatex}
\ExecuteBibliographyOptions{citetracker=true,sorting=none,firstinits=true}


I am looking for an if-command, which would do the same job as \ifciteseen does, but only for the current page.

The idea is to test if some source has been cited already on the current page and, depending on the result, change the citation. For instance, if I want to produce a footnote only upon the first citation on the current page, I could do

\ifciteseenONTHISPAGE
{% yes, do nothing
}
{% no, do smth
\noexpand\footnote[\thefield{labelnumber}]{%


I am aware of \iffirstonpage and \ifsamepage but cannot figure out if they can be of any help here and how.

-

The counter instcount uniquely identifies a citation or item in the bibliography/list of shorthands. The test \ifsamepage{<inst1>}{<inst2>}{<true>}{<false>} expands <true> if the two citations/items identified by the instcount values <inst1> and <inst2> are found on the same page.

In your test we need to compare the current value (\value{instcount}) with the value of instcount the last time the current entry was cited. In general this is not the value of instcount in the last citation (i.e. \value{instcount}-1). AFAIK you'll have to track the last instcount value for each entry with some additional code.

The example below demonstrates how this can be done using a citation format considered in a previous post. It relies on some commands from etoolbox and requires additional passes to get the tests right.

\documentclass{report}
\usepackage[american]{babel}
\usepackage{csquotes}
\usepackage[style=numeric-comp,citetracker=true,pagetracker=true,sorting=none]{biblatex}

\makeatletter
%---------------------------------------------------------------
% Essentially verbatim from Joseph Wright (except for refinements to \ifciteseen test)
% http://www.texdev.net/2010/03/08/biblatex-numbered-citations-as-footnotes/

\DeclareCiteCommand{\superfootcite}[\cbx@superscript]
{\usebibmacro{cite:init}%
\let\multicitedelim=\supercitedelim
\iffieldundef{prenote}
{}
{\BibliographyWarning{Ignoring prenote argument}}%
\iffieldundef{postnote}
{}
{\BibliographyWarning{Ignoring postnote argument}}}
{\usebibmacro{citeindex}%
\usebibmacro{cite:superfoot}%
\usebibmacro{cite:comp}}
{}
{\usebibmacro{cite:dump}}

\newbibmacro*{cite:superfoot}{%
\xdef\cbx@citekey{\thefield{entrykey}}%
\ifciteseen
{}
{\csnumgdef{cbx@instcount\cbx@citekey}{-100}}%
\ifsamepage{\value{instcount}}{\number\csuse{cbx@instcount\cbx@citekey}}
{}
{\xappto\cbx@citehook{%
\noexpand\footnotetext[\thefield{labelnumber}]{%
\csnumgdef{cbx@instcount\cbx@citekey}{\value{instcount}}}

\newrobustcmd{\cbx@superscript}[1]{%
\mkbibsuperscript{#1}%
\cbx@citehook
\global\let\cbx@citehook=\empty}
\let\cbx@citehook=\empty

%---------------------------------------------------------------
\makeatother

\begin{document}
\chapter{Title}
\null\vfill\noindent
First citation.\superfootcite{bertram}
First citation.\superfootcite{companion}
Some recurrent citations on same page.\superfootcite{bertram,companion,augustine}
\chapter{Title}
\null\vfill\noindent
Recurrent citation on different page.\superfootcite{companion}
Recurrent on different page and first citations.\superfootcite{augustine,cicero}
Recurrent citation on same page.\superfootcite{companion}
\printbibliography
\end{document}


Here are the citations from the first page:

And from the second:

-
Great, thanks! I've combined the code above with some other code of yours (and Joseph, of course) tex.stackexchange.com/questions/20787/… and some cosmetic changes from my side to achieve exactly what I needed. I see a lot of questions connected to footnote citation style. Do you consider writing a package, which would incorporate different modifications of it and would allow switching between different styles in a flexible way? –  amorua Nov 23 '11 at 8:04
@amorua Perhaps eventually, unless Joseph prefers to write one himself or someone else beats me to it. Ideally I'd like to see some adaptation of code from manyfoot, but I don't have time to look into that right now. –  Audrey Nov 23 '11 at 14:28
Your solution worked perfectly for me. I have one question though. Do you think it is possible to have the footnotes with cites sorted? To explain what I mean, let's look at your example: imagine on page 2 you would first cite Augustine [3] and only then Goosens [2]. Then the footnotes would be in the following order: [3], then [2] and then [4]. Is it possible to have them sorted: although the citation order is 3,2,4, the footnotes would first list 2, then 3 and 4? If you think it is something that can be done, I would like to post a new question. –  amorua Nov 23 '11 at 19:38
@amorua I finally got around to solving this problem over here. It is suited mainly for documents where the list of shorthands and bibliography appear on new pages, though. –  Audrey Sep 14 '12 at 17:53

You should try (with pagetracker activated) something like this (works by me when I use it in my custom style) :

\ifciteseen{%
\ifsamepage{\value{instcount}}{\value{instcount}-1}{Do nothing}
{Print the reference}}

-
Unfortunately, this does not do the trick. Actually, if I have something like \cite{a1} text \cite{a2} text \cite{a3} on the same page, then the conditional above will give false only for a1 and true for a2 and a3. Whereas a2 and a3 are certainly "new citations". Is there any counter "for a given citation key", just like instcount is for all citations? –  amorua Nov 22 '11 at 21:53