APA Style: Journal Vol(Num) sometimes, but only Vol other times

In another question, I noticed the difference between APA Style Guide 6th ed and biblatex-apa output. Specifically,

APA 6th ed (which foregoes the Number of the journal and lists instead only the Volume (perhaps because the page numbers uniformly increase throughout the volume regardless of number, and so perhaps number is redundant?

A few minutes ago, I just noticed that the APA elaborates on this in an October blog post.

Although it's obvious from the comments in the blog post that this rule is overwhelmingly unpopular (and in my opinion too, it is an idiotic rule), it seems unlikely that the APA will be revising this rule any time soon (especially with their having reimplemented the two-space rule for sentence-ending punctuation with their 6th edition after having previously removed it in older editions after originally requiring it in even older editions).

So I'm guessing that there's no way to automate this, right? It seems like it would require biblatex having knowledge of every published journal's pagination scheme (either by issue number or uniformly increasing throughout a volume; perhaps there are other schemes too) which strikes me as a Sisyphean task.

I wonder about automating this not because I'm lazy (although I am lazy in a sense, for I'm always looking for the easiest way to do something), but instead because I'd like to keep a .bib database with as much information in it as I know (for my own uses) for each of the references I have in it (even such trivial details as translator and stuff that most style guides don't require or even desire). But now that I see exactly what the APA rule is on this matter (in particular that in some cases (pagination by issue or number), it wants Vol(Num) whereas in other cases (pagination by volume), it wants only Vol and no (Num)), I wonder if there is any way to do this in an APA-compliant manner with biblatex other than leaving the Number field in the .bib entry blank for those journals (which I determine manually) to be paginated by volume.

Sorry for the long-winded background, but in summary, I guess my question is: "Using LaTeX and associated tools, what's the best way to handle this arcane and unnecessary rule that was published by the APA just 2 years ago in 2009?"

-
Without some kind of meta-data in the bibliography as to the numbering system of any particular volume, I don't think this is possible. With such data (e.g. a custom field, or an external config file with a list of journals that have one numbering or another) it would be possible to do. Leaving the information out of the bib file is not a good solution, since that will remove it for any other style one might use. – Alan Munn Nov 29 '11 at 22:43

As I mentioned in the comments, this will only be possible if you add meta-data to the .bib file to indicate whether a particular journal has "per issue" or "per volume" page numbering. However, this isn't very difficult to do, and you can probably add fields conditionally with your bibliography manager. Here's an example of how this would work in practice.

I've added a field to each article entry in the bib file called "Type". This is available automatically to biblatex, and can be used for various things. For clarity I've given the field the values "PerIssue" or "PerVolume"; in practice, you really only need to supply the field for the PerIssue journals (since I suspect they are the minority).

If a journal is numbered per issue (and therefore will require the number in parentheses) we set the Type field to "PerIssue".

Then we declare the field format for number to check if the type is "PerIssue" or not. If it is, then the number is formatted; if not it is omitted.

Depending on your reference manager you may be able add the Type field with the correct annotation to every entry with a particular journal name.

\documentclass[endnotes]{apa6e}
\usepackage[american]{babel}
\usepackage{csquotes}
\usepackage[style=apa]{biblatex}
\DeclareLanguageMapping{american}{american-apa}
\def\PerIssue{PerIssue}
\DeclareFieldFormat[article]{number}{\iffieldequals{type}{\PerIssue}{(#1)}{}}
\title{A title}
\author{An Author}
\shorttitle{A title}
\authornote{}
\abstract{An abstract}

\begin{filecontents}{\jobname.bib}

@article{Kallio1988,
Author = {Kallio, Kenneth D.},
Journal = {Child Development},
Number = {2},
Pages = {397--410},
Title = {Developmental Differences in the Comprehension of Simple and Compound Comparative Relations},
Type = {PerIssue},
Url = {http://www.jstor.org/stable/1130319},
Volume = {59},
Year = {1988}}

@article{Kavanaugh1976,
Author = {Kavanaugh, Robert D.},
Journal = {Child Development},
Month = {Sep},
Number = {3},
Pages = {885-887},
Title = {On the Synonymity of more' and less': Comments on a Methodology},
Type = {PerVolume},
Volume = {47},
Year = {1976}}
\end{filecontents}

\begin{document}

This is some text. \cite{kallio1988,kavanaugh1976}
\urlstyle{rm}
\printbibliography
\end{document}


In order to implement this scheme you need to tell your reference manager about the extra Type field that you are adding to @article bib entries. Both of the popular reference managers (BibDesk on the Mac, and JabRef on any OS) can add custom fields.

BiBDesk

• Go to Preferences -> Fields
• Under the Advanced part of the window, choose Custom BibTeX Types and Fields (Edit)
• You will see the following input window, which allows you to add Type as an Optional field to all Article entries. You need to click on the "Allow editing default types and fields" to do this.

JabRef

• Go to Options -> Customize entry types
• You will see the following input window, which allows you to add Type as an Optional field to all Article entries.

-
This is a decent solution - it can't really be automated in the style at the moment because one can't guarantee that the "type" field isn't in use etc. Until biblatex allows a customisable data model (scheduled for 3.x I think), this can't be solved in a general way in the style. – PLK Nov 30 '11 at 7:16
Very nice! But a couple of questions to clarify? (1) By 'bibliography/reference manager' I think you mean tools like BibDesk and JabRef. Is that correct? If so, which reference manager are you (and others) using that works with biblatex? I'm using JabRef now and it doesn't show me a "Type" field. It also doesn't recognize "journal" as an alias for "journaltitle" although it claims to work with biblatex and has a BibLaTeX mode in the preferences. Some customization allowed, but adding 'journal' gets me two diff. fields, 'journaltitle' and 'journal' (I filed a bug report at sf about this). – TeXnewbie Nov 30 '11 at 18:49
I use BibDesk, but both popular reference managers can add custom fields. I've updated the answer to show how. – Alan Munn Nov 30 '11 at 19:40
Thanks for elaborating. Think I failed to communicate my question though. I did add custom fields to JabRef (type & journal). But when I added the custom field, 'journal' (as you had in your example key "Kallio1988"), in JabRef, it didn't handle it as I guessed that a biblatex-aware application should: as an alias to journaltitle. It's a different field. Also, new fields have broken JabRef's default layout of fields in its "Optional fields" panel so that it shows no fields (all moved to OF2 panel). Just wondering if there was perhaps a more biblatex-friendly reference manager out there. – TeXnewbie Nov 30 '11 at 21:31
Also, are you using this with BibDesk?: bibdesk.sourceforge.net/TypeInfo_biblatex.plist (mentioned at sourceforge.net/apps/mediawiki/bibdesk/… ) or are you using BibDesk's original TypeInfo.plist file? Thanks again. – TeXnewbie Nov 30 '11 at 21:36