I've defined my own biblatex style (see MWE) which uses citations in footnotes.
I've patched the prenote command, because otherwise biblatex writes the prenote text in lowercase (note: I don't want to write the prenote in uppercase within the autocite command, because I want to be able to switch back to in text citation).
But now I have a problem with the third citation where the abbreviated cf. is used. The following ibid should be printed in lowercase letters just like in the second citation (before the patching the ibid was written in lowercase but also the cf.).
If no prenote is present the ibid should be printed like the fourth citation.
How can I achieve the desired behavior and maybe get rid of the patching, because it is a bit slow.
MWE:
\documentclass{article}
\usepackage[style=alphabetic, autocite=footnote,backend=biber,ibidtracker=constrict]{biblatex}
\usepackage{xpatch}
\usepackage{xstring}
\begin{filecontents*}{bibliography.bib}
@BOOK{ABC,
author = {Cornelisse, J. W. and Schöyer, H. Ferry R. and Wakker, Karel F.},
title = {Rocket Propulsion and Spaceflight Dynamics},
year = {1979},
publisher = {Pitman},
}
\end{filecontents*}
\providecommand*{\mkibid}[1]{#1}
\newbool{cbx:loccit}
\DeclareBibliographyOption{ibidpage}[true]{%
\ifstrequal{#1}{true}
{\ExecuteBibliographyOptions{loccittracker=constrict}}
{\ExecuteBibliographyOptions{loccittracker=false}}}
\ExecuteBibliographyOptions{ibidpage = true}
\newbibmacro*{cite:ibid}{%
\global\boolfalse{cbx:loccit}%
\printtext[bibhyperref]{\bibstring[\mkibid]{ibidem}}%
\ifloccit
{\global\booltrue{cbx:loccit}}
{}}
\newbibmacro*{cite:postnote}{%
\ifbool{cbx:loccit}
{}
{\usebibmacro{postnote}}}
\newbibmacro*{cite:prenote}{%
\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
{\usebibmacro{prenote}}
{\usebibmacro{prenote}}}
\DeclareCiteCommand{\smartcite}[\iffootnote\mkbibparens\mkbibfootnote]
{\usebibmacro{cite:prenote}}
{\usebibmacro{citeindex}%
\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
{\usebibmacro{cite:ibid}\usebibmacro{cite:postnote}}
{\printtext[brackets]{\usebibmacro{cite}\usebibmacro{postnote}}}}
{\multicitedelim}
{}
\DeclareAutoCiteCommand{footnote}[f]{\smartcite}{\smartcites}
\DeclareFieldFormat{sentencecase}{\StrLeft{#1}{1}[\firstchar]\StrLen{#1}[\textlaenge]\StrMid{#1}{2}{\textlaenge}[\restchars]\autocap{\firstchar}\restchars}
\xpatchbibmacro{prenote}{\printfield{prenote}}{\printfield[sentencecase]{prenote}}{}{}
\xpatchbibmacro{multiprenote}{\printfield{multiprenote}}{\printfield[sentencecase]{multiprenote}}{}{}
\bibliography{bibliography.bib}
\begin{document}
Work\autocite[see][20]{ABC}.\\
Same work with a prenote without a punctation\autocite[see][20]{ABC}.\\
Same work with a prenote with punctation\autocite[cf.][20]{ABC}.\\
Same work and no prenote\autocite[][20]{ABC}.
\end{document}

\autocite[cf.\isdot][20]{ABC}. You have to tellbiblatexthat the.in the prenote is not a full stop (sentence ending), but an abbreviation dot in this instance, asbiblatexwill automatically capitalise after the former, but not after a.of the latter kind. (See also this related question) – moewe Oct 16 '14 at 17:37prenoteis\DeclareFieldFormat{prenote}{#1\isdot}(i.e.biblatexassumes a.is an abbreviation dot, never a sentence ending), but after your patching, you print theprenotewith\DeclareFieldFormat{sentencecase}, whose definition does not have the\isdotin it. If you add the\isdotto the end of the\DeclareFieldFormat{sentencecase}bit (after\restchars) it seems to work again. – moewe Oct 16 '14 at 17:41\DeclareFieldFormat{prenote}{\StrLeft{#1}{1}[\firstchar]\StrLen{#1}[\textlaenge]\StrMid{#1}{2}{\textlaenge}[\restchars]\autocap{\firstchar}\restchars\isdot}and there would be no need for the patching (which I don't think is the performance issue here, I would be more sceptical of the whole string manipulation bit). – moewe Oct 16 '14 at 17:44Missing number, treated as zero. But the thing with\isdotworks perfect. – user2653422 Oct 16 '14 at 17:59\DeclareFieldFormat{sentencecase}declaration by making it a\DeclareFieldFormat{prenote}and adding a\isdotbefore the last curly brace - that's what I did, which seems to work. – moewe Oct 16 '14 at 18:28