Extension:CrossReference
From MediaWiki.org
|
CrossReference Release status: experimental |
|||
|---|---|---|---|
| Implementation | Tag | ||
| Description | Adds LaTeX-style autonumbered cross references to a page | ||
| Author(s) | Tore Birkeland (KvanteToreTalk) | ||
| Last Version | First Release | ||
| License | No license specified | ||
| Download | no link | ||
|
|||
[edit] Description
CrossReference is an extension to create automatically numbered cross references on a wiki page, LaTeX style.
[edit] Installation
Create a folder called CrossReference, and put CrossReference.php inside it
<?php //Extension credits that show up on Special:Version $wgExtensionCredits['parserhook'][] = array( 'name' => 'CrossReference', 'author' => 'Tore Birkeland', 'url' => 'http://www.mediawiki.org/wiki/Extension:CrossReference', 'description' => 'Extension to create automatically numbered cross references on a wiki page, LaTeX style', ); $efCrossReferenceCounter = array(); $efCrossReferenceLookup = array(); $wgExtensionFunctions[] = "efCrossReferenceSetup"; $wgHooks['ParserAfterTidy'][] = 'efCrossReferenceParserAfterTidy'; function efCrossReferenceSetup() { global $wgParser; $wgParser->setHook("xrlabel", "efLabelRender"); $wgParser->setHook("figure", "efFigureRender"); $wgParser->setHook("equation", "efEquationRender"); $wgParser->setHook("xr", "efCrossReferenceRender"); } function efLabelRender($text, $args, $parser) { global $efCrossReferenceCounter; global $efCrossReferenceLookup; $id = $args["id"]; $group = $args["group"]; if ($efCrossReferenceCounter[$group] == "") { $efCrossReferenceCounter[$group] = 1; } $num = $efCrossReferenceCounter[$group]; $efCrossReferenceCounter[$group] += 1; $efCrossReferenceLookup[$id] = $num; $innerHtml = $parser->recursiveTagParse(trim($text)); $label = ""; $label .= "<div id='label-" . $id . "'>"; $label .= "<span style='width:5em;'>"; $label .= "(" . $num . ")"; $label .= "</span>"; $label .= "<span style='position:relative; left:5em;'>"; $label .= $innerHtml; $label .= "</span>"; $label .= "</div>"; return $label; } function efEquationRender($text, $args, $parser) { $args["group"] = "eqn"; return efLabelRender($text, $args, $parser); } function efFigureRender($text, $args, $parser) { $args["group"] = "fig"; return efLabelRender($text, $args, $parser); } function efCrossReferenceRender($text, $args, $parser) { $id = $args["id"]; $marker = "xx--CrossReference--$id--xx"; if (strpos($text, "%i") == false) { $text .= $marker; } else { $text = str_replace("%i", $marker, $text); } return "<a href='#label-$id'>$text</a>"; } function efCrossReferenceParserAfterTidy(&$parser, &$text) { global $efCrossReferenceLookup; foreach ($efCrossReferenceLookup as $id => $num) { $marker = "xx--CrossReference--$id--xx"; $text = str_replace($marker, $num, $text); } return true; }
Add the following near the end of LocalSettings.php
require_once( "extensions/CrossReference/CrossReference.php");
[edit] Usage
To create a numbered equation and figure, type the following into your page
<equation id="eqn:first-equation">
<math>\frac{1}{2} = 0.5</math>
</equation>
<figure id="fig:first-figure">
[[Image:image.png]]
</figure>
Somewhere else on the page, you can put the following to reference the elements
Please refer to <xr id="eqn:first-equation">Equation %i</xr>, and <xr id="fig:first-figure">Fig %i</xr>

