A hack: it's very easy to modify a .bst
file so that it recognises new entry types: simply append lines to the .bst
file such as, to make @undocument a synonym for @misc:
FUNCTION { undocument } { misc }
which just means that the function Bibtex calls to produce the .bbl entry for an @undocument just calls the function it uses to produce an @misc entry.
Biblatex does things a little differently, since it passes the type information as follows:
FUNCTION {article} { type$ output:entry }
where output:entry
is the generic function used to dump all the information about the record to the .bbl for Biblatex to work with (if you didn't pass the type information, as per the first line, Biblatex would think, e.g., @undocument was an @misc entry).
You can then just clone the site definition of biblatex.bst
into your local texmf tree (for Texlive), and add some lines such as:
FUNCTION { undocument } { type$ output:entry }
to your personal version of biblatex.bst. Bibtex will then treat these types just like the other types and you can use them in your bbx/cbx styles.
Postscript
As domwass notes, if you change your version of biblatex.bst
in this way, you have to be aware that upgrades might break Biblatex if you use a local fork based on an older version. While most revisions don't introduce incompatible changes to biblatex.bst
(there were no changes from 0.9e to 1.3 that would have caused problems, I think), the last revision, 1.4, introduced a very big change in the way biblatex.bst
represented information in .bib
files that certainly would have required creating a new patched file.
In biblatex-chicago
, the \cite*
commands turn off ibidem-tracker (see § 4.3.2 of the biblatex-chicago
documentation) while in the standard biblatex
styles \cite*
has exactly the behaviour you expect (see § 3.7.2 of the biblatex
documentation).
NB: the solutions here are quite hacky - especially the one for fullcite - maybe you could contact the maintainer and ask him to incorporate this feature, in the meantime use this solution with care.
To achieve the behaviour you expect, we will need to modify the biblatex-chicago
styles quite heavily.
Copy biblatex-chicago.sty
, chicago-notes.bbx
and chicago-notes.cbx
to a location where latex
can find them and rename them to, let's say, biblatex-chicago-na.sty
, chicago-notes-na.bbx
and chicago-notes-na.cbx
respectively.
First, we modify biblatex-chicago-na.sty
. Just add
\DeclareOption{notes-na}{\def\cms@style{notesna}}
after \DeclareOption{notes}{\def\cms@style{notes}}
(l. 21).
Then add
\def\cms@notesna{%
\RequirePackage[style=chicago-notes-na]{biblatex}%
\ExecuteBibliographyOptions{%
pagetracker=true,autocite=footnote,abbreviate=false,alldates=comp,
citetracker=true,ibidtracker=constrict,usetranslator=true,
usecompiler=true,loccittracker=constrict,dateabbrev=false,
maxbibnames=10,minbibnames=7,sorting=\cms@choose,sortcase=false}}
to line 68, somewhere after the block \def\cms@notesna{......}
.
We now modify chicago-notes-na.cbx
.
Add
\newbibmacro*{cite:noauth}{%
\ifciteseen%
{\iffieldundef{shorthand}%
{\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}%
{\usebibmacro{cite:noauth:ibid}}%
{\global\toggletrue{cms@shortnote}%
\global\togglefalse{cms@fullnote}%
\usebibmacro{cite:noauth:short}%
\usebibmacro{cite:save}}}%
{\iftoggle{cms@shorthandibid}%
{\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}%
{\usebibmacro{cite:noauth:ibid}}%
{\usebibmacro{cite:shorthand}%
\usebibmacro{cite:save}}}%
{\usebibmacro{cite:shorthand}%
\usebibmacro{cite:save}}}}%
{\iftoggle{cms@allshort}%
{\global\toggletrue{cms@shortnote}%
\global\togglefalse{cms@fullnote}%
\global\toggletrue{cms@printshhand}%
\usebibmacro{cite:noauth:short}%
\usebibmacro{cite:save}}%
{\global\toggletrue{cms@fullnote}%
\global\togglefalse{cms@shortnote}%
\usebibmacro{cite:noauth:full}%
\usebibmacro{cite:save}}}}%
after the block from \newbibmacro*{cite}{...}
(around line 260).
Finally, add the following block of code.
\newbibmacro*{cite:noauth:full}{%
\begingroup
\renewbibmacro{author/editor}{}%
\printtext[bibhypertarget]{%
\usedriver
{\DeclareNameAlias{sortname}{default}\frenchspacing}
{cite:\thefield{entrytype}}%
\iffieldundef{shorthand}
{}%
{\usebibmacro{cms:shorthandintro}}}%
\endgroup}
\newbibmacro*{cite:noauth:short}{%
\ifboolexpr{%
togl {cms@allshort}%
or
test {\ifbibliography}
}%
{\printtext[bibhyperref]{%
\printfield[citetitle]{labeltitle}}}%
{\printtext[bibhyperlink]{%
\printfield[citetitle]{labeltitle}}}}%:\thefield{entrytype}?
\newbibmacro*{cite:noauth:ibid}{%
\iftoggle{cms@noibid}
{\global\toggletrue{cms@shortnote}%
\global\togglefalse{cms@fullnote}%
\usebibmacro{cite:noauth:short}%
\usebibmacro{cite:save}}%
{\iftoggle{cms@allshort}%
{\printtext[bibhyperref]{%
\bibstring[\mkibid]{ibidem}}}%
{\printtext[bibhyperlink]{%
\bibstring[\mkibid]{ibidem}}}%
\ifloccit
{\global\toggletrue{cms@loccit}}%
{}}}
\DeclareCiteCommand{\parencitena}[\mkbibparens]
{\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\usebibmacro{cite:noauth}}
{\multicitedelim}
{\usebibmacro{cite:postnote}}
You should also change the macro newbibmacro*{cite:ibid}
to (I've added two %
s so there is not spurious white space in \parencite
with ibidem)
\newbibmacro*{cite:ibid}{%
\iftoggle{cms@noibid}
{\global\toggletrue{cms@shortnote}%
\global\togglefalse{cms@fullnote}%
\usebibmacro{cite:short}%
\usebibmacro{cite:save}}%
{\iftoggle{cms@allshort}%
{\printtext[bibhyperref]{%
\bibstring[\mkibid]{ibidem}}}%
{\printtext[bibhyperlink]{%
\bibstring[\mkibid]{ibidem}}}%
\ifloccit
{\global\toggletrue{cms@loccit}}%
{}}}
You then use the modified style like this \usepackage[notes-na,strict,isbn=false,backend=biber,bibencoding=utf8,hyperref=true]{biblatex-chicago-na}
, the new command is \parencitena{...}
.
MWE
\documentclass[american]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage[autopunct=true]{csquotes}
\usepackage[notes-na,strict,isbn=false,backend=biber,bibencoding=utf8,hyperref=true]{biblatex-chicago-na}
\addbibresource{\jobname.bib}
\begin{filecontents}{\jobname.bib}
@book{KuhnCopRev,
author = {Thomas S. Kuhn},
title = {The Copernican Revolution},
subtitle = {Planetary Astronomy in the Development of Western Thought},
publisher = {Harvard University Press},
address = {Cambridge, Mass.},
date = {1995},
origdate = {1957}
}
@article{testart,
author = {Arnold Uthor and William Riter},
%author = {Arnold Uthor and William Riter and Rita Esearcher and Steven C. Ientist and Stuart T. Udent and Peter R. Ofessor and Lewis E. C. Turer},
title = {A Very Interesting Article},
journal = {Journal of Articles},
volume = {7},
number = {3},
page = {1-5},
date = {2010},
}
@book{testbook,
author = {Walter Ordsmith},
editor = {Eddie Ditor},
title = {The Work},
subtitle = {Subtitle},
date = {1983},
}
@online{testonline,
author = {Bernie Logger},
title = {A Very Opinionated Blog Post},
url = {http://example.com},
year = {2013},
}
\end{filecontents}
\begin{document}
Thomas S. Kuhn \parencitena{KuhnCopRev} told us that \ldots
\nocite{*}
\printbibliography
\end{document}
Best Answer
The standard biblatex directives to format names use some auxiliary bibmacro:
For predefined name formats. Each of these take four arguments: the first is for the family name, the second is for the given name, the third for the "von" part, and the fourth for the "junior" part.
Thus, one can use of the auxiliary format, for example
For the parameters,
\DeclareNameFormat
splits a name in 8 parts:If the auxiliary bib macros do not produce the desired format, one has to provide a new definition. For example, a simplified definition for the format in the OP can look like the following:
author
(or other names) are lists, thus\DeclareNameFormat
loops over all the elements in the list (up to a limit if give, for example bymaxcitenames
) and for each name it executes the code it the body of the definition.Here the first step is the predefined biblatex macro
name:delim
. This macro takes care of the punctuation between the names. For the first name it does nothing, for successive names it insert a comma an and a comma and and before the last one.The second step is to see if the "von" part is empty (parameter
#5
): if it is it print the last name (parameter#1
), otherwise it prints the von part and the last name (#5 #1
).The next step is to print first name (parameter
#3
) (here the definition assumes that there is a first name!), so the separator between the last and first name is printed with e first name. The scope of\isdot
is to ensure that a period in an initial is not consider as full stop, and thus the following punctuation is not ignored.The final step is to check if there is a junior part (parameter
#7
). If it is not black it is printed. The\isdot
is to cover the same situation as before.EDIT
To use the above definition in a
last-first/first-last
schema, the above definition can replace the standardname:last-first
macro, namely: