Extension:Cite/Cite.php: Difference between revisions

From mediawiki.org
Content deleted Content added
Line 97: Line 97:


In some language editions of Wikipedia, long reference lists may be placed using the template <code>{{[[w:Template:Reflist|Reflist]]}}</code>, which incorporates <code>&lt;references /&gt;</code>. It provides an optional parameter to display the reference list in multiple columns. For instance, the English, Hindi and Interlingua Wikipedias use the css selector <code>references-small</code> to make the reference text smaller than normal text.
In some language editions of Wikipedia, long reference lists may be placed using the template <code>{{[[w:Template:Reflist|Reflist]]}}</code>, which incorporates <code>&lt;references /&gt;</code>. It provides an optional parameter to display the reference list in multiple columns. For instance, the English, Hindi and Interlingua Wikipedias use the css selector <code>references-small</code> to make the reference text smaller than normal text.

==Grouped references==
This is currently experimental and must be enabled by <code>$wgAllowCiteGroups = true;</code>. However, it is enabled on Wikipedia and is listed here for reference. Use with caution.
=== Example ===
<blockquote>
<tt>
According to scientists, the Sun is pretty big <font color=red>'''&lt;ref>'''E. Miller, ''The Sun'', (New York: Academic Press, 2005), 23-5.'''&lt;/ref>'''</font>.<br/>
In fact, it is very big <font color=red>'''&lt;ref group="footnotes">'''Take their word for it. Don't look directly at the sun!'''&lt;/ref>'''</font>.<br/>
<br/>
&#61;=Notes==
<br/>
<font color=red>'''&lt;references group="footnotes"/></font>
<br/>
&#61;=References==
<br/>
<font color=red>'''&lt;references/></font>
</tt>
</blockquote>
The anonymous group works as before, while the named group reference will show up as <ref group="footnotes">Test of the group argument</ref>. This may or may not be annoying.


== Customization ==
== Customization ==

Revision as of 18:04, 23 April 2008

MediaWiki extensions manual
Cite
Release status: stable
Implementation Tag
Description Add footnotes in a document.
Author(s) Ævar Arnfjörð Bjarmason
MediaWiki 1.11
License GNU General Public License 2.0 or later
Download Cite.php
Cite.i18n.php
Example Wikipedia:Footnotes
  • $wgCiteResponsiveReferences
  • $wgCiteBookReferencing
  • $wgCiteVisualEditorOtherGroup
Quarterly downloads 308 (Ranked 20th)
Public wikis using 14,146 (Ranked 6th)
This page is about the extension. See also Help:Footnotes, and Wikipedia:Footnotes for the use in the English Wikipedia.

Cite.php is a Cite extension that adds two parser hooks to MediaWiki, <ref> and <references />; these operate together to add citations to pages.

Installation

  1. Place Cite.php and Cite.i18n.php extension files in the extensions/Cite directory. You can do so by checking it out from the subversion repository directly:
    svn co http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/Cite/
    
    If you are using MediaWiki version 1.9 or older, use this command instead:
    svn co http://svn.wikimedia.org/svnroot/mediawiki/branches/REL1_10/extensions/Cite/
    
    This will download an earlier version of Cite.php.
  2. Add the following line to LocalSettings.php:
    require_once( $IP.'/extensions/Cite/Cite.php' );
    

Note: The require_once() line needs to be placed near the end of the file. At the end of the configuration but above the closing PHP tag ?> NB It also appears that it can't be the very last line before the closing PHP tag. It didn't work for at least one user when it was, but worked fine when it was moved just a few lines higher (above some pre-existing statements).

Note: Cite.php requires hooks in the main MediaWiki code found in HEAD as of 2005-12-24 23:05:18Z It might operate on earlier versions of MediaWiki, but it won't be operating properly.

Usage

The basic concept of the <ref> tag is that it inserts the text enclosed by the ref tags as a footnote in a designated section, which you indicate with the placeholder tag <references />. The new format cannot be used interchangeably with the old format - you must pick one or the other.

If you forget to include <references /> at the end of the article, none of the footnotes will appear.

This page itself uses footnotes, such as the one at the end of this sentence.[1] If you view the source of this page by clicking "Edit this page", you can see a working example of footnotes.

Example

According to scientists, the Sun is pretty big.<ref>E. Miller, The Sun, (New York: Academic Press, 2005), 23-5.</ref>
The Moon, however, is not so big.<ref>R. Smith, "Size of the Moon", Scientific American, 46 (April 1978): 44-6.</ref>

==Notes==
<references/>

Multiple uses of the same footnote

To give a footnote a unique identifier, use <ref name="name">. You can then refer to the same footnote again by using a ref tag with the same name. The text inside the second tag doesn't matter, because the text already exists in the first reference. You can either copy the whole footnote, or you can use a terminated empty ref tag that looks like this: <ref name="name" />.

In the following example, the same source is cited three times.

This is an example of multiple references to the same footnote.<ref name="multiple">Remember that when you refer to the same footnote multiple times, the text from the first reference is used.</ref>

Such references are particularly useful when citing sources, if different statements come from the same source.<ref name="multiple">This text is superfluous, and won't show up anywhere. We may as well just use an empty tag.</ref>

A concise way to make multiple references is to use empty ref tags, which have a slash at the end. Although this may reduce redundant work, please be aware that if a future editor removes the first reference, this will result in the loss of all references using the empty ref tags.<ref name="multiple" />

==Notes==
<references/>

The text above gives the following result in the article (see also section below):

This is an example of multiple references to the same footnote.[2]

Such references are particularly useful when citing sources, when different statements come from the same source.[2]

A concise way to make multiple references is to use empty ref tags, which have a slash at the end. Although this may reduce redundant work, please be aware that if a future editor removes the first reference, this will result in the loss of all references using the empty ref tags.[2]

<references />

Placing <references /> inserts the full text of all pending inline citations defined by <ref>, anywhere on the page. For example, based on the citations above, the code:

<references />

will yield:

  1. This footnote is used as an example in the "How to use" section.
  2. 2.0 2.1 2.2 Remember that when you refer to the same footnote multiple times, the text from the first reference is used. Cite error: Invalid <ref> tag; name "multiple" defined multiple times with different content

In some language editions of Wikipedia, long reference lists may be placed using the template {{Reflist}}, which incorporates <references />. It provides an optional parameter to display the reference list in multiple columns. For instance, the English, Hindi and Interlingua Wikipedias use the css selector references-small to make the reference text smaller than normal text.

Grouped references

This is currently experimental and must be enabled by $wgAllowCiteGroups = true;. However, it is enabled on Wikipedia and is listed here for reference. Use with caution.

Example

According to scientists, the Sun is pretty big <ref>E. Miller, The Sun, (New York: Academic Press, 2005), 23-5.</ref>.
In fact, it is very big <ref group="footnotes">Take their word for it. Don't look directly at the sun!</ref>.

==Notes==
<references group="footnotes"/>
==References==
<references/>

The anonymous group works as before, while the named group reference will show up as [footnotes 1]. This may or may not be annoying.

Customization

Template:Technical The format of the output of <ref> and <references> is almost completely customizable through MediaWiki messages, that can be modified, for example, through the MediaWiki namespace depending on the configuration of the wiki.

For a list of messages that control the output of <ref> and <references> and the values, if any, that are passed to them ($1, $2, $3 ...), see the code in CVS for an up-to-date listing of their default contents.

  • cite_reference_link_key_with_num
    1. key
    2. num
  • cite_reference_link_prefix
  • cite_reference_link_suffix
  • cite_references_link_prefix
  • cite_references_link_suffix
  • cite_reference_link
    1. ref ID
    2. backlink ID
    3. count to display
  • cite_references_link_one
    • Used to format the source list that <references /> outputs, it configures 3 things: the backlink ID, the ref ID, and text of note.
    1. backlink ID - used for creating the number order of the source list.
    2. ref ID - used to link back to the actual reference in the text, this is where you can configure the <bold>^</bold> symbol
    3. text of note - text used above describing the source info
  • cite_references_link_many
    1. backlink ID
    2. list of links
    3. text of note
  • cite_references_link_many_format
    1. ref ID
    2. numeric value to use as a backlink
    3. custom value (as defined in cite_references_link_many_format_backlink_labels to use as a backlink)
  • cite_references_link_many_format_backlink_labels
  • cite_references_link_many_sep
  • cite_references_link_many_and
  • cite_references_prefix
  • cite_references_suffix

Set references to use ^ and letters like Wikipedia

In file Cite.i18n.php starting at about line 47,

'cite_references_link_one' => '<li id="$1">[[#$2|^]] $3</li>', 
'cite_references_link_many' => '<li id="$1">^ $2 $3</li>', 
'cite_references_link_many_format' => '[[#$1|<sup>$3</sup>]]',


The ^ replaces the up arrows and putting $3 in the last line between the sup /sup tags fixes the links w/ a b c... vice 2.1, 2.2, 2.3, etc...

Current problems

Fatal error: Call to undefined function wfloadextensionmessages

Fatal error: Call to undefined function wfloadextensionmessages() in /home/extensions/Cite/Cite.php on line 32.

This error was received once extension was added. $wgExtensionMessagesFiles works only with version 1.11. Update your version. or download 1.10 branches extensions

Apache error

PHP logs an error in the Apache error log: (MediaWiki 1.6.8, PHP 4.4.4, Apache 1.3.37)

[error] PHP Notice: Use of undefined constant __METHOD__ - assumed '__METHOD__' in extensions/Cite/Cite.php on line 609
[error] PHP Notice: Use of undefined constant __METHOD__ - assumed '__METHOD__' in extensions/Cite/Cite.php on line 612
I was able to fix this by placing single quotes around __METHOD__ on both lines (609 & 612)
This is because the __METHOD__ is only available since PHP 5, using '__METHOD__' is not a correct fix. --Løde

Version 1.6.8

It doesn't work with version 1.6.8! I eventually got cite.php working with "13660" but not "13826" versions. My error messages appeared at the top of the page:

Warning: Cannot modify header information - headers already sent by (output started at /****/wiki/extensions/Cite.i18n.php:399) in /****/OutputPage.php on line 575
Warning: Cannot modify header information - headers already sent by (output started at /****/wiki/extensions/Cite.i18n.php:399) in /****/wiki/includes/OutputPage.php on line 576

Misrendered anchor link character

??? appears in rendered pages instead of ↑ — it might be possible to fix this by replacing the up arrow character with &#8593; (the corresponding HTML entity; rendered ↑). Alternatively, the caret (^) can probably be used as a substitute.

Templates

  • Using <ref> in templates breaks numbering:Issue with MediaWiki regarding in what order things are parsed
  • Using <ref> within a template will create correctly numbered reference mark but it will be missing from the output of a <reference /> on the calling page (example) unless the references tag is transcluded too!
  • It's impossible to pass template arguments to <ref>, e.g. <ref name={{{1}}}>:Issue with MediaWiki, see bug 4529
  • Template substitution misrenders inside <ref> tag.

HTML parameters

  • The citation links generated by <ref> and the backlinks generated by <references> have an empty title attribute (<a href="..." title="">...)
    Issue with MediaWiki, not this extension. MediaWiki will generate output like <a href="#foo" title="">bar</a> when given input like [[#foo|bar]]
  • Missing name= anchors for backwards compatibility (5567)
    • The generated <a href="#_note-n"> links should have a name="_ref-n".
    • The generated <a href="#_ref-n"> links should have a name="_note-n".
      This currently seems to be working.

HTML commenting-out doesn't work

Commenting out <ref> with HTML comments <--…--> hides the citation but the reference still appears on the list

This would appear to be a parser error…
Seems to be fixed with the new parser. —81.241.208.92 14:16, 2 February 2008 (UTC)

ParserFunctions

cite.php cannot be nested properly in ParserFunctions. For example, "{{#ifeq:1|2|<ref>true</ref>|<ref>false</ref>}}" will return both "true" and "false" as references regardless of the result of the ParserFunction. However, ParserFunctions work perfectly inside <ref> tags.

Blank Special:Version

It seems that the following code causes v1.9.2's Special:version page to go blank:
'author' => 'Ævar Arnfjörð Bjarmason',
Changing it to this fixes it (apologies if it's 'translated' wrong):
'author' => 'AEvar Arnfjord Bjarmason',

Rendering

Contents of non-first named <ref> are not rendered, even if all prior tags with same name are empty.

Missing preview

There is no preview for inline citations. This is especially annoying when editing only a section of a page. (Bug 5492)

Users without edit privileges can't see references if sysops can

The following combination of $wgGroupPermissions makes references invisible to users who aren't logged in (Bug 11224). This bug started sometime after Mediawiki 1.9.3. and persists to 1.11.0

$wgGroupPermissions['*']['edit'] = false;
$wgGroupPermissions['sysop']['edit'] = true;

A current work-around is to set

$wgGroupPermissions['*']['edit'] = false;

and not grant any editing rights to sysops. Users who are sysops would then need to be part of another group with editing privileges.

Criticisms

The major criticism regarding Cite.php is that it renders the editing of references much more tedious. Moreover, because many casual Wikipedia users are not familar with the cryptic Wikitext tags that they find with the use of Cite.php, it is likely that the net effect of Cite.php is often to deter new users from making edits to reference sections. Although Wikipedia supposedly got its name from the Hawaiian word "wiki-wiki", meaning "quick-quick", Cite.php is arguably neither quick nor easy for the average Wikipedia user.

A possible solution would be to have the actual reference section contain all of the references with given names, then throughout the article, simply reference by name, instead of the full citation. This would also reduce confusion concerning multiple uses of a reference having different text, but only showing the first instance (causing confusion with sections are shifted around, the displayed reference might change, while the text hasn't). I.e.:
Some text that needs a ref.{{ref|foo}} 
  Another sentence that uses a ref,{{ref|bar}} 
  followed by another usage of the first ref.{{ref|foo}}
Using cite.php makes citing page numbers harder. Each reference usually cites a different page of the book/journal/article, but there is no way to indicate a different page number when using a self-closing tag. As such, all <ref name="xyz" /> simply refer to the work as a whole, rather than to a specific page number in the work (unless the author makes each page number a seperate reference). Perhaps a future revision of cite.php could allow a page number argument to be passed to the reference like so <ref name="xyz" page="42-43" />. This would dramatically increase the reputability of the citations, because they could then be checked/verified, and the citations would be a more useful resource.
===References===
{{refs
  {{ref|foo|Text of reference}}
  {{ref|bar|A difference reference}} }}
Although, this would require two passes by the parser, it would greatly simplify the process of sourcing. I.e. if I am adding something to an article and want to use a source that I know is already cited, I have to dig through the text of the article to find where it is used, (which can be a major pain in large articles, esp. ones which have a lot of references) instead of just glancing at the code for the references section and finding the name.

Another criticism is that, unlike Footnotes3, it is currently impossible to separate bibliographic information from article copy.

However, at least one editor, Ta bu shi da yu, has found it incredibly useful in splitting articles and shifting text with footnotes around the article. Before, a paragraph with a footnote needed to be moved, and multiple footnotes in the Notes section shifted. This was very difficult to do. With Cite.php, reorganising text and splitting articles is considerably easier.

Past problems

The extension didn't generate id attributes that could be uniformly styled with CSS2 attribute selectors
Issue in Cite.php, see bug 4579
Using multibyte characters, colons, spaces and other values that need to be encoded according to the HTML spec breaks internal links
Issue with MediaWiki, not this extension, see bug 4461.
Using <ref> in image captions breaks the XHTML output
Issue with MediaWiki, not this extension, see bug 1887.

Comparing ref/note style and Cite.php style

They are actually very similar.

  • To make a single use footnote:
    • Ref/note
      1. {{ref|foo}} at the in-text place.
      2. # {{note|foo}} text of note at the proper place in the Notes list.
    • Cite.php
      1. <ref>text of note</ref> at the in-text place.
      2. (Only needed once per article)<references/> under the Notes heading.
  • To make a multiple use footnote:
    • Ref/note
      • With strict ref/note style this was impossible, but a number of alternative forms had been created, for the details of which, see the appropriate pages.
    • Cite.php
      1. <ref name=foo>text of note</ref> at each in-text place.
        1. Alternatively <ref name=foo /> A self-closing tag on every use after name=foo has been defined.
      2. (Only needed once per article)<references/> under the Notes heading; exactly the same as to make a single-use note.


Cite error: <ref> tags exist for a group named "footnotes", but no corresponding <references group="footnotes"/> tag was found