<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<head>
	<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=iso-8859-1">
	<TITLE>Bibtex Entry Types, Field Types and Usage Hints</TITLE>
	<META NAME="GENERATOR" CONTENT="OpenOffice.org 1.0.3  (Linux)">
	<META NAME="CREATED" CONTENT="20030630;11324100">
	<META NAME="CHANGED" CONTENT="20030630;11435200">
</head>
<body LANG="en-GB">
<H2>Bibtex Entry Types, Field Types and Usage Hints</H2>
<P ALIGN=RIGHT><EM>A printer friendly PDF version of this page is
available<ahref="index.pdf"> <A HREF="bibtex-defs.pdf">bibtex-defs.pdf
(76Kb)</A></EM></P>
<P>This document is simply a corrected version of Appendix&nbsp;B.2
of the L<SUP>A</SUP>TEX book&nbsp;[<A HREF="btxdoc.html#latex">2</A>],
&copy;&nbsp;1986, by Addison-Wesley. The basic scheme is the same,
only a few details have changed.</P>
<P>[These are the defacto standard for bibliographic data types.</P>
<P>The advise is for the use of the L<SUP>A</SUP>TEX text processing
application but there is some general hints as well. - David Wilson]</P>
<H3>1 Entry Types</H3>
<P>When entering a reference in the database, the first thing to
decide is what type of entry it is. No fixed classification scheme
can be complete, but provides enough entry types to handle almost any
reference reasonably well.</P>
<P>References to different types of publications contain different
information; a reference to a journal article might include the
volume and number of the journal, which is usually not meaningful for
a book. Therefore, database entries of different types have different
fields. For each entry type, the fields are divided into three
classes:</P>
<DL>
	<DT><STRONG>required</STRONG> 
	</DT><DD>
	Omitting the field will produce a warning message and, rarely, a
	badly formatted bibliography entry. If the required information is
	not meaningful, you are using the wrong entry type. However, if the
	required information is meaningful but, say, already included is
	some other field, simply ignore the warning. 
	</DD><DT>
	<STRONG>optional</STRONG> 
	</DT><DD>
	The field's information will be used if present, but can be omitted
	without causing any formatting problems. You should include the
	optional field if it will help the reader. 
	</DD><DT>
	<STRONG>ignored</STRONG> 
	</DT><DD><P>
	The field is ignored. Ignores any field that is not required or
	optional, so you can include any fields you want in a <TT>bib</TT>
	file entry. It's a good idea to put all relevant information about a
	reference in its <TT>bib</TT> file entry--even information that may
	never appear in the bibliography. For example, if you want to keep
	an abstract of a paper in a computer file, put it in an <TT>abstract</TT>
	field in the paper's <TT>bib</TT> file entry. The <TT>bib</TT> file
	is likely to be as good a place as any for the abstract, and it is
	possible to design a bibliography style for printing selected
	abstracts. Note: Misspelling a field name will result in its being
	ignored, so watch out for typos (especially for optional fields,
	since won't warn you when those are missing).</P></DD></DL>
<P>
The following are the standard entry types, along with their required
and optional fields, that are used by the standard bibliography
styles. The fields within each class (required or optional) are
listed in order of occurrence in the output, except that a few entry
types may perturb the order slightly, depending on what fields are
missing. These entry types are similar to those adapted by Brian Reid
from the classification scheme of van&nbsp;Leunen&nbsp;[<A HREF="btxdoc.html#van-leunen">4</A>]
for use in the <I>Scribe</I> system. The meanings of the individual
fields are explained in the next section. Some nonstandard
bibliography styles may ignore some optional fields in creating the
reference. Remember that, when used in the <TT>bib</TT> file, the
entry-type name is preceded by an <TT>@</TT> character.</P>
<DL>
	<DT><STRONG>article</STRONG> 
	</DT><DD>
	An article from a journal or magazine. Required fields: <TT>author</TT>,
	<TT>title</TT>, <TT>journal</TT>, <TT>year</TT>. Optional fields:
	<TT>volume</TT>, <TT>number</TT>, <TT>pages</TT>, <TT>month</TT>,
	<TT>note</TT>. 
	</DD><DT>
	<STRONG>book</STRONG> 
	</DT><DD>
	A book with an explicit publisher. Required fields: <TT>author</TT>
	or <TT>editor</TT>, <TT>title</TT>, <TT>publisher</TT>, <TT>year</TT>.
	Optional fields: <TT>volume</TT> or <TT>number</TT>, <TT>series</TT>,
	<TT>address</TT>, <TT>edition</TT>, <TT>month</TT>, <TT>note</TT>. 
	</DD><DT>
	<STRONG>booklet</STRONG> 
	</DT><DD>
	A work that is printed and bound, but without a named publisher or
	sponsoring institution. Required field: <TT>title</TT>. Optional
	fields: <TT>author</TT>, <TT>howpublished</TT>, <TT>address</TT>,
	<TT>month</TT>, <TT>year</TT>, <TT>note</TT>. 
	</DD><DT>
	<STRONG>conference</STRONG> 
	</DT><DD>
	The same as <TT>INPROCEEDINGS</TT>, included for <I>Scribe</I>
	compatibility. 
	</DD><DT>
	<STRONG>inbook</STRONG> 
	</DT><DD>
	A part of a book, which may be a chapter (or section or whatever)
	and/or a range of pages. Required fields: <TT>author</TT> or <TT>editor</TT>,
	<TT>title</TT>, <TT>chapter</TT> and/or <TT>pages</TT>, <TT>publisher</TT>,
	<TT>year</TT>. Optional fields: <TT>volume</TT> or <TT>number</TT>,
	<TT>series</TT>, <TT>type</TT>, <TT>address</TT>, <TT>edition</TT>,
	<TT>month</TT>, <TT>note</TT>. 
	</DD><DT>
	<STRONG>incollection</STRONG> 
	</DT><DD>
	A part of a book having its own title. Required fields: <TT>author</TT>,
	<TT>title</TT>, <TT>booktitle</TT>, <TT>publisher</TT>, <TT>year</TT>.
	Optional fields: <TT>editor</TT>, <TT>volume</TT> or <TT>number</TT>,
	<TT>series</TT>, <TT>type</TT>, <TT>chapter</TT>, <TT>pages</TT>,
	<TT>address</TT>, <TT>edition</TT>, <TT>month</TT>, <TT>note</TT>. 
	</DD><DT>
	<STRONG>inproceedings</STRONG> 
	</DT><DD>
	An article in a conference proceedings. Required fields: <TT>author</TT>,
	<TT>title</TT>, <TT>booktitle</TT>, <TT>year</TT>. Optional fields:
	<TT>editor</TT>, <TT>volume</TT> or <TT>number</TT>, <TT>series</TT>,
	<TT>pages</TT>, <TT>address</TT>, <TT>month</TT>, <TT>organization</TT>,
	<TT>publisher</TT>, <TT>note</TT>. 
	</DD><DT>
	<STRONG>manual</STRONG> 
	</DT><DD>
	Technical documentation. Required field: <TT>title</TT>. Optional
	fields: <TT>author</TT>, <TT>organization</TT>, <TT>address</TT>,
	<TT>edition</TT>, <TT>month</TT>, <TT>year</TT>, <TT>note</TT>. 
	</DD><DT>
	<STRONG>mastersthesis</STRONG> 
	</DT><DD>
	A Master's thesis. Required fields: <TT>author</TT>, <TT>title</TT>,
	<TT>school</TT>, <TT>year</TT>. Optional fields: <TT>type</TT>,
	<TT>address</TT>, <TT>month</TT>, <TT>note</TT>. 
	</DD><DT>
	<STRONG>misc</STRONG> 
	</DT><DD>
	Use this type when nothing else fits. Required fields: none.
	Optional fields: <TT>author</TT>, <TT>title</TT>, <TT>howpublished</TT>,
	<TT>month</TT>, <TT>year</TT>, <TT>note</TT>. 
	</DD><DT>
	<STRONG>phdthesis</STRONG> 
	</DT><DD>
	A PhD thesis. Required fields: <TT>author</TT>, <TT>title</TT>,
	<TT>school</TT>, <TT>year</TT>. Optional fields: <TT>type</TT>,
	<TT>address</TT>, <TT>month</TT>, <TT>note</TT>. 
	</DD><DT>
	<STRONG>proceedings</STRONG> 
	</DT><DD>
	The proceedings of a conference. Required fields: <TT>title</TT>,
	<TT>year</TT>. Optional fields: <TT>editor</TT>, <TT>volume</TT> or
	<TT>number</TT>, <TT>series</TT>, <TT>address</TT>, <TT>month</TT>,
	<TT>organization</TT>, <TT>publisher</TT>, <TT>note</TT>. 
	</DD><DT>
	<STRONG>techreport</STRONG> 
	</DT><DD>
	A report published by a school or other institution, usually
	numbered within a series. Required fields: <TT>author</TT>, <TT>title</TT>,
	<TT>institution</TT>, <TT>year</TT>. Optional fields: <TT>type</TT>,
	<TT>number</TT>, <TT>address</TT>, <TT>month</TT>, <TT>note</TT>. 
	</DD><DT>
	<STRONG>unpublished</STRONG> 
	</DT><DD><P>
	A document having an author and title, but not formally published.
	Required fields: <TT>author</TT>, <TT>title</TT>, <TT>note</TT>.
	Optional fields: <TT>month</TT>, <TT>year</TT>.</P></DD></DL>
<P>
In addition to the fields listed above, each entry type also has an
optional <TT>key</TT> field, used in some styles for alphabetizing,
for cross referencing, or for forming a <CODE>\bibitem</CODE> label.
You should include a <TT>key</TT> field for any entry whose
``author'' information is missing; the ``author'' information is
usually the <TT>author</TT> field, but for some entry types it can be
the <TT>editor</TT> or even the <TT>organization</TT> field
(Section&nbsp;<A HREF="btxdoc.html#odds-and-ends">4</A> describes
this in more detail). Do not confuse the <TT>key</TT> field with the
key that appears in the <CODE>\cite</CODE> command and at the
beginning of the database entry; this field is named ``key'' only for
compatibility with <I>Scribe</I>.</P>
<P ALIGN=RIGHT><A HREF="#Project">Top of Page</A></P>
<H2>2 Fields</H2>
<P>Below is a description of all fields recognized by the standard
bibliography styles. An entry can also contain other fields, which
are ignored by those styles.</P>
<DL>
	<DT><STRONG>address</STRONG> 
	</DT><DD>
	Usually the address of the <TT>publisher</TT> or other type of
	institution. For major publishing houses, van&nbsp;Leunen recommends
	omitting the information entirely. For small publishers, on the
	other hand, you can help the reader by giving the complete address. 
	</DD><DT>
	<STRONG>annote</STRONG> 
	</DT><DD>
	An annotation. It is not used by the standard bibliography styles,
	but may be used by others that produce an annotated bibliography. 
	</DD><DT>
	<STRONG>author</STRONG> 
	</DT><DD>
	The name(s) of the author(s), in the format described in the L<SUP>A</SUP>TEX
	book. 
	</DD><DT>
	<STRONG>booktitle</STRONG> 
	</DT><DD>
	Title of a book, part of which is being cited. See the L<SUP>A</SUP>TEX
	book for how to type titles. For book entries, use the <TT>title</TT>
	field instead. 
	</DD><DT>
	<STRONG>chapter</STRONG> 
	</DT><DD>
	A chapter (or section or whatever) number. 
	</DD><DT>
	<STRONG>crossref</STRONG> 
	</DT><DD>
	The database key of the entry being cross referenced. 
	</DD><DT>
	<STRONG>edition</STRONG> 
	</DT><DD>
	The edition of a book--for example, ``Second''. This should be an
	ordinal, and should have the first letter capitalized, as shown
	here; the standard styles convert to lower case when necessary. 
	</DD><DT>
	<STRONG>editor</STRONG> 
	</DT><DD>
	Name(s) of editor(s), typed as indicated in the L<SUP>A</SUP>TEX
	book. If there is also an <TT>author</TT> field, then the <TT>editor</TT>
	field gives the editor of the book or collection in which the
	reference appears. 
	</DD><DT>
	<STRONG>howpublished</STRONG> 
	</DT><DD>
	How something strange has been published. The first word should be
	capitalized. 
	</DD><DT>
	<STRONG>institution</STRONG> 
	</DT><DD>
	The sponsoring institution of a technical report. 
	</DD><DT>
	<STRONG>journal</STRONG> 
	</DT><DD>
	A journal name. Abbreviations are provided for many journals; see
	the <I>Local Guide</I>. 
	</DD><DT>
	<STRONG>key</STRONG> 
	</DT><DD>
	Used for alphabetizing, cross referencing, and creating a label when
	the ``author'' information (described in Section&nbsp;<A HREF="btxdoc.html#odds-and-ends">4</A>)
	is missing. This field should not be confused with the key that
	appears in the <CODE>\cite</CODE> command and at the beginning of
	the database entry. 
	</DD><DT>
	<STRONG>month</STRONG> 
	</DT><DD>
	The month in which the work was published or, for an unpublished
	work, in which it was written. You should use the standard
	three-letter abbreviation, as described in Appendix B.1.3 of the
	L<SUP>A</SUP>TEX book. 
	</DD><DT>
	<STRONG>note</STRONG> 
	</DT><DD>
	Any additional information that can help the reader. The first word
	should be capitalized. 
	</DD><DT>
	<STRONG>number</STRONG> 
	</DT><DD>
	The number of a journal, magazine, technical report, or of a work in
	a series. An issue of a journal or magazine is usually identified by
	its volume and number; the organization that issues a technical
	report usually gives it a number; and sometimes books are given
	numbers in a named series. 
	</DD><DT>
	<STRONG>organization</STRONG> 
	</DT><DD>
	The organization that sponsors a conference or that publishes a
	manual. 
	</DD><DT>
	<STRONG>pages</STRONG> 
	</DT><DD>
	One or more page numbers or range of numbers, such as <TT>42-111</TT>
	or <TT>7,41,73-97</TT> or <TT>43+</TT> (the `<TT>+</TT>' in this
	last example indicates pages following that don't form a simple
	range). To make it easier to maintain <I>Scribe</I>-compatible
	databases, the standard styles convert a single dash (as in <TT>7-33</TT>)
	to the double dash used in TEX to denote number ranges (as in <TT>7-33</TT>).
		</DD><DT>
	<STRONG>publisher</STRONG> 
	</DT><DD>
	The publisher's name. 
	</DD><DT>
	<STRONG>school</STRONG> 
	</DT><DD>
	The name of the school where a thesis was written. 
	</DD><DT>
	<STRONG>series</STRONG> 
	</DT><DD>
	The name of a series or set of books. When citing an entire book,
	the the <TT>title</TT> field gives its title and an optional <TT>series</TT>
	field gives the name of a series or multi-volume set in which the
	book is published. 
	</DD><DT>
	<STRONG>title</STRONG> 
	</DT><DD>
	The work's title, typed as explained in the L<SUP>A</SUP>TEX book. 
	</DD><DT>
	<STRONG>type</STRONG> 
	</DT><DD>
	The type of a technical report--for example, ``Research Note''. 
	</DD><DT>
	<STRONG>volume</STRONG> 
	</DT><DD>
	The volume of a journal or multivolume book. 
	</DD><DT>
	<STRONG>year</STRONG> 
	</DT><DD><P>
	The year of publication or, for an unpublished work, the year it was
	written. Generally it should consist of four numerals, such as <TT>1984</TT>,
	although the standard styles can handle any <TT>year</TT> whose last
	four nonpunctuation characters are numerals, such as `(about 1984)'.</P></DD></DL>
<P ALIGN=RIGHT>
<A HREF="#Project">Top of Page</A></P>
<H1>3 Helpful Hints</H1>
<P><A NAME="odds-and-ends"></A>This section gives some random tips
that aren't documented elsewhere, at least not in this detail. They
are, roughly, in order of least esoteric to most. First, however, a
brief spiel.</P>
<P>I understand that there's often little choice in choosing a
bibliography style--journal says you must use 2018;style2019; and
that's that. If you have a choice, however, I strongly recommend that
you choose something like the <TT>plain</TT> standard style. Such a
style, van&nbsp;Leunen&nbsp;[<A HREF="btxdoc.html#van-leunen">4</A>]
argues convincingly, encourages better writing than the
alternatives--more concrete, more vivid.</P>
<P><I>The Chicago Manual of Style</I>&nbsp;[<A HREF="btxdoc.html#chicago">1</A>],
on the other hand, espouse the author-date system, in which the
citation might appear in the text as `(Jones, 1986)'. I argue that
this system, besides cluttering up the text with information that may
or may not be relevant, encourages the passive voice and vague
writing. Furthermore the strongest arguments for using the
author-date system--like ``it's the most practical''--fall flat on
their face with the advent of computer-typesetting technology. For
instance the <I>Chicago Manual</I> contains, right in the middle of
page&nbsp;401, this anachronism: ``The chief disadvantage of [a style
like <TT>plain</TT>] is that additions or deletions cannot be made
after the manuscript is typed without changing numbers in both text
references and list.'' L<SUP>A</SUP>TEX, obviously, sidesteps the
disadvantage.</P>
<P>Finally, the logical deficiencies of the author-date style are
quite evident once you've written a program to implement it. For
example, in a large bibliography, using the standard alphabetizing
scheme, the entry for `(Aho et&nbsp;al., 1983b)' might be half a page
later than the one for `(Aho et&nbsp;al., 1983a)'. Fixing this
problem results in even worse ones. What a mess. (I have,
unfortunately, programmed such a style, and if you're saddled with an
unenlightened publisher or if you don't buy my propaganda, it's
available from the Rochester style collection.)</P>
<P>Ok, so the spiel wasn't very brief; but it made me feel better,
and now my blood pressure is back to normal. Here are the tips for
using with the standard styles (although many of them hold for
nonstandard styles, too).</P>
<OL>
	<LI>With 's style-designing language you can program general
	database manipulations, in addition to bibliography styles. For
	example it's a fairly easy task for someone familiar with the
	language to produce a database-key/author index of all the entries
	in a database. Consult the <I>Local Guide</I> to see what tools are
	available on your system. 
	<LI>The standard style's thirteen entry types do reasonably well at
	formatting most entries, but no scheme with just thirteen formats
	can do everything perfectly. Thus, you should feel free to be
	creative in how you use these entry types (but if you have to be too
	creative, there's a good chance you're using the wrong entry type). 
	<LI>Don't take the field names too seriously. Sometimes, for
	instance, you might have to include the publisher's address along
	with the publisher's name in the <TT>publisher</TT> field, rather
	than putting it in the <TT>address</TT> field. Or sometimes,
	difficult entries work best when you make judicious use of the <TT>note</TT>
	field. 
	<LI>Don't take the warning messages too seriously. Sometimes, for
	instance, the year appears in the title, as in <I>The 1966 World
	Gnus Almanac</I>. In this case it's best to omit the <TT>year</TT>
	field and to ignore 's warning message. 
	<LI>If you have too many names to list in an <TT>author</TT> or
	<TT>editor</TT> field, you can end the list with ``and others''; the
	standard styles appropriately append an ``et&nbsp;al.'' 
	<LI><P>In general, if you want to keep from changing something to
	lower case, you enclose it in braces. You might not get the effect
	you want, however, if the very first character after the left brace
	is a backslash. The ``special characters'' item later in this
	section explains.</P>
	<LI><P>For <I>Scribe</I> compatibility, the database files allow an
	<TT>@COMMENT</TT> command; it's not really needed because</P>
	<P>allows in the database files any comment that's not within an
	entry. If you want to comment out an entry, simply remove the `<TT>@</TT>'
	character preceding the entry type.</P>
	<LI>The standard styles have journal abbreviations that are
	computer-science oriented; these are in the style files primarily
	for the example. If you have a different set of journal
	abbreviations, it's sensible to put them in <TT>@STRING</TT>
	commands in their own database file and to list this database file
	as an argument to L<SUP>A</SUP>TEX's <CODE>\bibliography</CODE>
	command (but you should list this argument before the ones that
	specify real database entries). 
	<LI><P>It's best to use the three-letter abbreviations for the
	month, rather than spelling out the month yourself. This lets the
	bibliography style be consistent. And if you want to include
	information for the day of the month, the <TT>month</TT> field is
	usually the best place. For example</P>
	<PRE>    month = jul # &quot;~4,&quot;</PRE><P>
	will probably produce just what you want.</P>
	<LI><P ALIGN=RIGHT><A HREF="#Project">Top of Page</A><LI>
	If you're using the <TT>unsrt</TT> style (references are listed in
	order of citation) along with the <CODE>\nocite{*}</CODE> feature
	(all entries in the database are included), the placement of the
	<CODE>\nocite{*}</CODE> command within your document file will
	determine the reference order. According to the rule given in
	Section&nbsp;<A HREF="btxdoc.html#features">2.1</A>: If the command
	is placed at the beginning of the document, the entries will be
	listed in exactly the order they occur in the database; if it's
	placed at the end, the entries that you explicitly <CODE>\cite</CODE>
	or <CODE>\nocite</CODE> will occur in citation order, and the
	remaining database entries will be in database order. 
	<LI>For theses, van Leunen recommends not giving the school's
	department after the name of the degree, since schools, not
	departments, issue degrees. If you really think that giving the
	department information will help the reader find the thesis, put
	that information in the <TT>address</TT> field. 
	<LI>The <TT>MASTERSTHESIS</TT> and <TT>PHDTHESIS</TT> entry types
	are so named for <I>Scribe</I> compatibility; <TT>MINORTHESIS</TT>
	and <TT>MAJORTHESIS</TT> probably would have been better names. Keep
	this in mind when trying to classify a non-U.S. thesis. 
	<LI><P>Here's yet another suggestion for what to do when an author's
	name appears slightly differently in two publications. Suppose, for
	example, two journals articles use these fields.</P>
	<PRE>    author = &quot;Donald E. Knuth&quot;
    .  .  .
    author = &quot;D. E. Knuth&quot;</PRE><P>
	There are two possibilities. You could (1)&nbsp;simply leave them as
	is, or (2)&nbsp;assuming you know for sure that these authors are
	one and the same person, you could list both in the form that the
	author prefers (say, `Donald&nbsp;E. Knuth'). In the first case, the
	entries might be alphabetized incorrectly, and in the second, the
	slightly altered name might foul up somebody's electronic library
	search. But there's a third possibility, which is the one I prefer.
	You could convert the second journal's field to</P>
	<PRE>    author = &quot;D[onald] E. Knuth&quot;</PRE><P>
	This avoids the pitfalls of the previous two solutions, since
	alphabetizes this as if the brackets weren't there, and since the
	brackets clue the reader in that a full first name was missing from
	the original. Of course it introduces another pitfall--`D[onald]&nbsp;E.
	Knuth' looks ugly--but in this case I think the increase in accuracy
	outweighs the loss in aesthetics.</P>
	<LI>L<SUP>A</SUP>TEX's comment character `<TT>%</TT>' is not a
	comment character in the database files. 
	<LI>Here's a more complete description of the ``author'' information
	referred to in previous sections. For most entry types the
	``author'' information is simply the <TT>author</TT> field. However:
	For the <TT>BOOK</TT> and <TT>INBOOK</TT> entry types it's the
	<TT>author</TT> field, but if there's no author then it's the <TT>editor</TT>
	field; for the <TT>MANUAL</TT> entry type it's the <TT>author</TT>
	field, but if there's no author then it's the <TT>organization</TT>
	field; and for the <TT>PROCEEDINGS</TT> entry type it's the <TT>editor</TT>
	field, but if there's no editor then it's the <TT>organization</TT>
	field. 
	<LI><P>When creating a label, the <TT>alpha</TT> style uses the
	``author'' information described above, but with a slight
	change--for the <TT>MANUAL</TT> and <TT>PROCEEDINGS</TT> entry
	types, the <TT>key</TT> field takes precedence over the <TT>organization</TT>
	field. Here's a situation where this is useful.</P>
	<PRE>   organization = &quot;The Association for Computing Machinery&quot;,
   key = &quot;ACM&quot;</PRE><P>
	Without the <TT>key</TT> field, the <TT>alpha</TT> style would make
	a label from the first three letters of information in the
	<TT>organization</TT> field; <TT>alpha</TT> knows to strip off the
	`<TT>The</TT> ', but it would still form a label like `[Ass86]',
	which, however intriguing, is uninformative. Including the <TT>key</TT>
	field, as above, would yield the better label `[ACM86]'.</P>
	<P>You won't always need the <TT>key</TT> field to override the
	<TT>organization</TT>, though: With</P>
	<PRE>    organization = &quot;Unilogic, Ltd.&quot;,</PRE><P>
	for instance, the <TT>alpha</TT> style would form the perfectly
	reasonable label `[Uni86]'.</P>
	<LI><P>Section&nbsp;<A HREF="btxdoc.html#features">2.1</A> discusses
	accented characters. To , an accented character is really a special
	case of a ``special character'', which consists of everything from a
	left brace at the top-most level, immediately followed by a
	backslash, up through the matching right brace. For example in the
	field</P>
	<PRE>    author = &quot;\AA{ke} {Jos{\'{e}} {\'{E}douard} G{\&quot;o}del&quot;</PRE><P>
	there are just two special characters, `<CODE>{\'{E}douard}</CODE>'
	and `<CODE>{\&quot;o}</CODE>' (the same would be true if the pair of
	double quotes delimiting the field were braces instead). In general,</P>
	<P>will not do any processing of a TEX or L<SUP>A</SUP>TEX control
	sequence inside a special character, but it <I>will</I> process
	other characters. Thus a style that converts all titles to lower
	case would convert</P>
	<PRE>    The {\TeX BOOK\NOOP} Experience</PRE><P>
	to</P>
	<PRE>    The {\TeX book\NOOP} experience</PRE><P>
	(the `<TT>The</TT>' is still capitalized because it's the first word
	of the title). This special-character scheme is useful for handling
	accented characters, for getting 's alphabetizing to do what you
	want, and, since counts an entire special character as just one
	letter, for stuffing extra characters inside labels. The file
	<TT>XAMPL.BIB</TT> distributed with gives examples of all three
	uses.</P>
	<LI><P>This final item of the section describes 's names (which
	appear in the <TT>author</TT> or <TT>editor</TT> field) in slightly
	more detail than what appears in Appendix&nbsp;B of the L<SUP>A</SUP>TEX
	book. In what follows, a ``name'' corresponds to a person. (Recall
	that you separate multiple names in a single field with the word
	``and'', surrounded by spaces, and not enclosed in braces. This item
	concerns itself with the structure of a single name.)</P>
	<P>Each name consists of four parts: First, von, Last, and&nbsp;Jr;
	each part consists of a (possibly empty) list of name-tokens. The
	Last part will be nonempty if any part is, so if there's just one
	token, it's always a Last token.</P>
	<P>Recall that Per Brinch&nbsp;Hansen's name should be typed</P>
	<PRE>    &quot;Brinch Hansen, Per&quot;</PRE><P>
	The First part of his name has the single token ``Per''; the Last
	part has two tokens, ``Brinch'' and ``Hansen''; and the von and Jr
	parts are empty. If you had typed</P>
	<PRE>    &quot;Per Brinch Hansen&quot;</PRE><P>
	instead, would (erroneously) think ``Brinch'' were a First-part
	token, just as ``Paul'' is a First-part token in ``John&nbsp;Paul
	Jones'', so this erroneous form would have two First tokens and one
	Last token.</P>
	<P>Here's another example:</P>
	<PRE>    &quot;Charles Louis Xavier Joseph de la Vall{\'e}e Poussin&quot;</PRE><P>
	This name has four tokens in the First part, two in the von, and two
	in the Last. Here</P>
	<P>knows where one part ends and the other begins because the tokens
	in the von part begin with lower-case letters.</P>
	<P>In general, it's a von token if the first letter at brace-level&nbsp;0
	is in lower case. Since technically everything in a ``special
	character'' is at brace-level&nbsp;0, you can trick</P>
	<P>into thinking that a token is or is not a von token by prepending
	a dummy special character whose first letter past the TEX control
	sequence is in the desired case, upper or lower.</P>
	<P>To summarize,</P>
	<P>allows three possible forms for the name:</P>
	<PRE>    &quot;First von Last&quot;
    &quot;von Last, First&quot;
    &quot;von Last, Jr, First&quot;</PRE><P>
	You may almost always use the first form; you shouldn't if either
	there's a Jr part, or the Last part has multiple tokens but there's
	no von part.</P>
</OL>
<P ALIGN=RIGHT><A HREF="#Project">Top of Page</A></P>
<H2><A NAME="SECTION00050000000000000000"></A>Bibliography</H2>
<DL>
	<DT><A NAME="chicago"></A>1 
	</DT><DD><P>
	<EM>The Chicago Manual of Style</EM>, pages 400-401.<BR>University
	of Chicago Press, thirteenth edition, 1982.</P></DD><DT>
	<A NAME="latex"></A>2 
	</DT><DD><P>
	Leslie Lamport.<BR>L<SUP>A</SUP>TEX: <EM>A Document Preparation
	System</EM>.<BR>Addison-Wesley, 1986.</P></DD><DT>
	<A NAME="btxhak"></A>3 
	</DT><DD><P>
	Oren Patashnik.<BR>Designing styles.<BR>The part of 's documentation
	that's not meant for general users, 8&nbsp;February 1988.</P></DD><DT>
	<A NAME="van-leunen"></A>4 
	</DT><DD><P>
	Mary-Claire van Leunen.<BR><EM>A Handbook for Scholars</EM>.<BR>Knopf,
	1979.</P></DD></DL>
<H1>
<A NAME="SECTION00060000000000000000"></A>About this document ...</H1>
<P>This document was generated using the <A HREF="http://www.latex2html.org/"><STRONG>LaTeX</STRONG>2<TT>HTML</TT></A>
translator Version 2002-1 (1.68)</P>
<P>Copyright &copy; 1993, 1994, 1995, 1996, <A HREF="http://cbl.leeds.ac.uk/nikos/personal.html">Nikos
Drakos</A>, Computer Based Learning Unit, University of
Leeds.<BR>Copyright &copy; 1997, 1998, 1999, <A HREF="http://www.maths.mq.edu.au/~ross/">Ross
Moore</A>, Mathematics Department, Macquarie University, Sydney.</P>
</body>
</HTML>
