Scratchpad:Template documentation

'This help page is about documenting'' templates. General template help can be found at Help:Template.'''

There are several ways to document what a template is supposed to do:
 * 1) In some cases it is obvious on the template page itself without special provisions.
 * 2) It can be explained in  text  tags.
 * This method allows for such things as adding the template to a template category.
 * 1) Detailed documentation can be put on the template talk page.
 * This method is typically mixed with the noinclude-strategy on the template page, with a reference to the talk page, and perhaps a summary.

On the template page
The include-part of the template page defines the way it works when transcluded or substituted, while the non-includeonly parts produce the page itself.

A typical template page could contain:

definition content, possibly a tag for a category of pages that include the template  definition content, possibly formatted, annotated, summarized < /nowiki>explanation, examples, and tags for template categories (using the sortkey  )

The template name within comment tags can be useful in the case of substitution.

For example, for :

start--end  start- -end< /nowiki>

This renders as:


 * start--end start--end

while without tags part of the information about the content would not be displayed:


 * start--end

Alternatively the part of the definition content which is rendered without loss of information (in particular plain text) is not put in either type of tags, so that it does not have to be duplicated:

start-   < /nowiki> -end

again rendered as:


 * start-   -end

Applying substitution without parameter produces this as wikitext. It can be displayed by subsequently putting nowiki tags around it.

Table
If a template produces a table it is useful if the template page shows the table structure instead of the wikitext to make it. For that purpose the table syntax is not put in either type of tags, and the table elements, where needed, each have a noinclude and an includeonly part.

Rendering
As shown above, in straightforward rendering of definition content, information is lost in the case of a parameter with a default value: only that value is rendered. Other cases where information is lost include:
 * # expr applied to an expression with a parameter gives "Expression error: unrecognised punctuation character "{"".
 * a variable is rendered as its value.

The parameter default mechanism can also be used to document what a parameter typically does:
 * An undefined is rendered as , clearly indicating that the template expects to get a first parameter.
 * An undefined displays nothing, that's probably the desired effect, but not helpful for a self-documenting template.
 * Maybe it's possible to indicate the function of an expected parameter, e.g. for templates doing something with images.

Typically, examples in the noinclude-part include or substitute the template. Note that changes in the working of the template (i.e. changes outside the noinclude-part) are not yet effective in these examples in preview and, in the case of substitution, in "show changes".

Category
Some templates are designed to add pages to a given category. Sometimes it's good enough if the template page itself is also shown in that category. Generally that's not the case. Templates adding pages to a category then use: ...end of code&lt;includeonly&gt;[&#91;Category:target&#93;] &lt;/includeonly&gt;&lt;noinclude&gt; documentation and/or link to talk page [&#91;Category:tempcat|{&#123;PAGENAME&#125;}&#93;] &lt;/noinclude&gt; Here target means a category for pages using the template, and tempcat is a category for similar templates. This method could be also used for interlanguage links in a template.

A small improvement seen on some templates replaces [&#91;Category:target&#93;] by  . Normally the dummy parameter   is undefined (unused), and then the template adds pages to category target as before. Setting category= (empty value) allows to disable this feature on lists of templates. Otherwise template lists with examples would be added to the various target categories of templates explained by example.

Examples
Expansion demo templates can be used for live examples.

If a template contains a variable it can be useful if it has been written such that the value of the variable can be overridden by a parameter value, to demonstrate the effect of various values, using e.g.:

This applies especially in the case of branching depending on the value of the variable.