# Manpages Parameter Reference

## Hyphenation, justification, and breaking

man.hyphenate

boolean

man.hyphenate

Enable hyphenation?

    <xsl:param name="man.hyphenate">0</xsl:param>

If non-zero, hyphenation is enabled.

The default value for this parameter is zero because groff is not particularly smart about how it does hyphenation; it can end up hyphenating a lot of things that you don't want hyphenated. To mitigate that, the default behavior of the stylesheets is to suppress hyphenation of computer inlines, filenames, and URLs. (You can override the default behavior by setting non-zero values for the `man.hyphenate.urls`, `man.hyphenate.filenames`, and `man.hyphenate.computer.inlines` parameters.) But the best way is still to just globally disable hyphenation, as the stylesheets do by default.

The only good reason to enabled hyphenation is if you have also enabled justification (which is disabled by default). The reason is that justified text can look very bad unless you also hyphenate it; to quote the Hypenation node from the groff info page:

> Since the odds are not great for finding a set of words, for every output line, which fit nicely on a line without inserting excessive amounts of space between words, 'gtroff' hyphenates words so that it can justify lines without inserting too much space between words.

So, if you set a non-zero value for the `man.justify` parameter (to enable justification), then you should probably also set a non-zero value for `man.hyphenate` (to enable hyphenation).

man.hyphenate.urls

boolean

man.hyphenate.urls

Hyphenate URLs?

    <xsl:param name="man.hyphenate.urls">0</xsl:param>

If zero (the default), hyphenation is suppressed for output of the `ulink` `url` attribute.

If hyphenation is already turned off globally (that is, if `man.hyphenate` is zero, setting `man.hyphenate.urls` is not necessary.

If `man.hyphenate.urls` is non-zero, URLs will not be treated specially and are subject to hyphenation just like other words.

If you are thinking about setting a non-zero value for `man.hyphenate.urls` in order to make long URLs break across lines, you'd probably be better off experimenting with setting the `man.break.after.slash` parameter first. That will cause long URLs to be broken after slashes.

man.hyphenate.filenames

boolean

man.hyphenate.filenames

Hyphenate filenames?

    <xsl:param name="man.hyphenate.filenames">0</xsl:param>

If zero (the default), hyphenation is suppressed for `filename` output.

If hyphenation is already turned off globally (that is, if `man.hyphenate` is zero, setting `man.hyphenate.filenames` is not necessary.

If `man.hyphenate.filenames` is non-zero, filenames will not be treated specially and are subject to hyphenation just like other words.

If you are thinking about setting a non-zero value for `man.hyphenate.filenames` in order to make long filenames/pathnames break across lines, you'd probably be better off experimenting with setting the `man.break.after.slash` parameter first. That will cause long pathnames to be broken after slashes.

man.hyphenate.computer.inlines

boolean

man.hyphenate.computer.inlines

Hyphenate computer inlines?

    <xsl:param name="man.hyphenate.computer.inlines">0</xsl:param>

If zero (the default), hyphenation is suppressed for computer inlines such as environment variables, constants, etc. This parameter current affects output of the following elements:

- `classname`
- `constant`
- `envar`
- `errorcode`
- `option`
- `replaceable`
- `userinput`
- `type`
- `varname`

If hyphenation is already turned off globally (that is, if `man.hyphenate` is zero, setting the `man.hyphenate.computer.inlines` is not necessary.

If `man.hyphenate.computer.inlines` is non-zero, computer inlines will not be treated specially and will be hyphenated like other words when needed.

man.justify

boolean

man.justify

Justify text to both right and left margins?

    <xsl:param name="man.justify">0</xsl:param>

If non-zero, text is justified to both the right and left margins (or, in roff terminology, "adjusted and filled" to both the right and left margins). If zero (the default), text is adjusted to the left margin only -- producing what is traditionally called "ragged-right" text.

The default value for this parameter is zero because justified text looks good only when it is also hyphenated. Without hyphenation, excessive amounts of space often end up getting between words, in order to "pad" lines out to align on the right margin.

The problem is that groff is not particularly smart about how it does hyphenation; it can end up hyphenating a lot of things that you don't want hyphenated. So, disabling both justification and hyphenation ensures that hyphens won't get inserted where you don't want to them, and you don't end up with lines containing excessive amounts of space between words.

However, if do you decide to set a non-zero value for the `man.justify` parameter (to enable justification), then you should probably also set a non-zero value for `man.hyphenate` (to enable hyphenation).

Yes, these default settings run counter to how most existing man pages are formatted. But there are some notable exceptions, such as the `perl` man pages.

man.break.after.slash

boolean

man.break.after.slash

Enable line-breaking after slashes?

    <xsl:param name="man.break.after.slash">0</xsl:param>

If non-zero, line-breaking after slashes is enabled. This is mainly useful for causing long URLs or pathnames/filenames to be broken up or "wrapped" across lines (though it also has the side effect of sometimes causing relatively short URLs and pathnames to be broken up across lines too).

If zero (the default), line-breaking after slashes is disabled. In that case, strings containing slashes (for example, URLs or filenames) are not broken across lines, even if they exceed the maximum column widith.

If you set a non-zero value for this parameter, check your man-page output carefuly afterwards, in order to make sure that the setting has not introduced an excessive amount of breaking-up of URLs or pathnames. If your content contains mostly short URLs or pathnames, setting a non-zero value for `man.break.after.slash` will probably result in in a significant number of relatively short URLs and pathnames being broken across lines, which is probably not what you want.

## Indentation

man.indent.width

length

man.indent.width

Specifies width used for adjusted indents

    <xsl:param name="man.indent.width">4</xsl:param>

The `man.indent.width` parameter specifies the width used for adjusted indents. The value of `man.indent.width` is used for indenting of lists, verbatims, headings, and elsewhere, depending on whether the values of certain `man.indent.*` boolean parameters are non-zero.

The value of `man.indent.width` should include a valid roff measurement unit (for example, `n` or `u`). The default value of `4n` specifies a 4-en width; when viewed on a console, that amounts to the width of four characters. For details about roff measurment units, see the `Measurements` node in the groff info page.

man.indent.refsect

boolean

man.indent.refsect

Adjust indentation of refsect* and refsection?

    <xsl:param name="man.indent.refsect" select="0"></xsl:param>

If the value of `man.indent.refsect` is non-zero, the width of the left margin for `refsect1`, `refsect2` and `refsect3` contents and titles (and first-level, second-level, and third-level nested `refsection`instances) is adjusted by the value of the `man.indent.width` parameter. With `man.indent.width` set to its default value of `3n`, the main results are that:

- contents of `refsect1` are output with a left margin of three characters instead the roff default of seven or eight characters

- contents of `refsect2` are displayed in console output with a left margin of six characters instead the of the roff default of seven characters

- the contents of `refsect3` and nested `refsection` instances are adjusted accordingly.

If instead the value of `man.indent.refsect` is zero, no margin adjustment is done for `refsect*` output.

If your content is primarly comprised of `refsect1` and `refsect2` content (or the `refsection` equivalent) – with few or no `refsect3` or lower nested sections , you may be able to “conserve” space in your output by setting `man.indent.refsect` to a non-zero value. Doing so will “squeeze” the left margin in such as way as to provide an additional four characters of “room” per line in `refsect1` output. That extra room may be useful if, for example, you have many verbatim sections with long lines in them.

man.indent.blurbs

boolean

man.indent.blurbs

Adjust indentation of blurbs?

    <xsl:param name="man.indent.blurbs" select="1"></xsl:param>

If the value of `man.indent.blurbs` is non-zero, the width of the left margin for `authorblurb`, `personblurb`, and `contrib` output is set to the value of the `man.indent.width` parameter (`3n` by default). If instead the value of `man.indent.blurbs` is zero, the built-in roff default width (`7.2n`) is used.

man.indent.lists

boolean

man.indent.lists

Adjust indentation of lists?

    <xsl:param name="man.indent.lists" select="1"></xsl:param>

If the value of `man.indent.lists` is non-zero, the width of the left margin for list items in `itemizedlist`, `orderedlist`, `variablelist` output (and output of some other lists) is set to the value of the `man.indent.width` parameter (`4n` by default). If instead the value of `man.indent.lists` is zero, the built-in roff default width (`7.2n`) is used.

man.indent.verbatims

boolean

man.indent.verbatims

Adjust indentation of verbatims?

    <xsl:param name="man.indent.verbatims" select="1"></xsl:param>

If the value of `man.indent.verbatims` is non-zero, the width of the left margin for output of verbatim environments (`programlisting`, `screen`, and so on) is set to the value of the `man.indent.width` parameter (`3n` by default). If instead the value of `man.indent.verbatims` is zero, the built-in roff default width (`7.2n`) is used.

## Fonts

man.font.funcprototype

string

man.font.funcprototype

Specifies font for funcprototype output

      <xsl:param name="man.font.funcprototype">BI</xsl:param>

The `man.font.funcprototype` parameter specifies the font for `funcprototype` output. It should be a valid roff font name, such as `BI` or `B`.

man.font.funcsynopsisinfo

string

man.font.funcsynopsisinfo

Specifies font for funcsynopsisinfo output

      <xsl:param name="man.font.funcsynopsisinfo">B</xsl:param>

The `man.font.funcsynopsisinfo` parameter specifies the font for `funcsynopsisinfo` output. It should be a valid roff font name, such as `B` or `I`.

man.font.links

string

man.font.links

Specifies font for links

    <xsl:param name="man.font.links">B</xsl:param>

The `man.font.links` parameter specifies the font for output of links (`ulink` instances and any instances of any element with an `xlink:href` attribute).

The value of `man.font.links` must be either `B` or `I`, or empty. If the value is empty, no font formatting is applied to links.

If you set `man.endnotes.are.numbered` and/or `man.endnotes.list.enabled` to zero (disabled), then you should probably also set an empty value for `man.font.links`. But if `man.endnotes.are.numbered` is non-zero (enabled), you should probably keep `man.font.links` set to `B` or `I`

The main purpose of applying a font format to links in most output formats it to indicate that the formatted text is “clickable”; given that links rendered in man pages are not “real” hyperlinks that users can click on, it might seem like there is never a good reason to have font formatting for link contents in man output.

In fact, if you suppress the display of inline link references (by setting `man.endnotes.are.numbered` to zero), there is no good reason to apply font formatting to links. However, if `man.endnotes.are.numbered` is non-zero, having font formatting for links (arguably) serves a purpose: It provides “context” information about exactly what part of the text is being “annotated” by the link. Depending on how you mark up your content, that context information may or may not have value.

.

`man.endnotes.list.enabled`, `man.endnotes.are.numbered`

man.font.table.headings

string

man.font.table.headings

Specifies font for table headings

      <xsl:param name="man.font.table.headings">B</xsl:param>

The `man.font.table.headings` parameter specifies the font for `table` headings. It should be a valid roff font, such as `B` or `I`.

man.font.table.title

string

man.font.table.title

Specifies font for table headings

      <xsl:param name="man.font.table.title">B</xsl:param>

The `man.font.table.title` parameter specifies the font for `table` titles. It should be a valid roff font, such as `B` or `I`.

## SYNOPSIS section

man.funcsynopsis.style

list ansi kr

man.funcsynopsis.style

What style of `funcsynopsis` should be generated?

    <xsl:param name="man.funcsynopsis.style">ansi</xsl:param>

If `man.funcsynopsis.style` is `ansi`, ANSI-style function synopses are generated for a `funcsynopsis`, otherwise K&R-style function synopses are generated.

## AUTHORS and COPYRIGHT sections

man.authors.section.enabled

boolean

man.authors.section.enabled

Display auto-generated AUTHORS section?

    <xsl:param name="man.authors.section.enabled">1</xsl:param>

If the value of `man.authors.section.enabled` is non-zero (the default), then an `AUTHORS` section is generated near the end of each man page. The output of the `AUTHORS` section is assembled from any `author`, `editor`, and `othercredit` metadata found in the contents of the child `info` or `refentryinfo` (if any) of the `refentry` itself, or from any `author`, `editor`, and `othercredit` metadata that may appear in `info` contents of any ancestors of the `refentry`.

If the value of `man.authors.section.enabled` is zero, the the auto-generated `AUTHORS` section is suppressed.

Set the value of `man.authors.section.enabled` to zero if you want to have a manually created `AUTHORS` section in your source, and you want it to appear in output instead of the auto-generated `AUTHORS` section.

man.copyright.section.enabled

boolean

man.copyright.section.enabled

Display auto-generated COPYRIGHT section?

    <xsl:param name="man.copyright.section.enabled">1</xsl:param>

If the value of `man.copyright.section.enabled` is non-zero (the default), then a `COPYRIGHT` section is generated near the end of each man page. The output of the `COPYRIGHT` section is assembled from any `copyright` and `legalnotice` metadata found in the contents of the child `info` or `refentryinfo` (if any) of the `refentry` itself, or from any `copyright` and `legalnotice` metadata that may appear in `info` contents of any ancestors of the `refentry`.

If the value of `man.copyright.section.enabled` is zero, the the auto-generated `COPYRIGHT` section is suppressed.

Set the value of `man.copyright.section.enabled` to zero if you want to have a manually created `COPYRIGHT` section in your source, and you want it to appear in output instead of the auto-generated `COPYRIGHT` section.

## Endnotes and link handling

man.endnotes.list.enabled

boolean

man.endnotes.list.enabled

Display endnotes list at end of man page?

    <xsl:param name="man.endnotes.list.enabled">1</xsl:param>

If the value of `man.endnotes.list.enabled` is non-zero (the default), then an endnotes list is added to the end of the output man page.

If the value of `man.endnotes.list.enabled` is zero, the list is suppressed — unless link numbering is enabled (that is, if `man.endnotes.are.numbered` is non-zero), in which case, that setting overrides the `man.endnotes.list.enabled` setting, and the endnotes list is still displayed. The reason is that inline numbering of notesources associated with endnotes only makes sense if a (numbered) list of endnotes is also generated.

Leaving `man.endnotes.list.enabled` at its default (non-zero) value ensures that no “out of line” information (such as the URLs for hyperlinks and images) gets lost in your man-page output. It just gets “rearranged”.

So if you’re thinking about disabling endnotes listing by setting the value of `man.endnotes.list.enabled` to zero: Before you do so, first take some time to carefully consider the information needs and experiences of your users. The “out of line” information has value even if the presentation of it in text output is not as interactive as it may be in other output formats.

As far as the specific case of URLs: Even though the URLs displayed in text output may not be “real” (clickable) hyperlinks, many X terminals have convenience features for recognizing URLs and can, for example, present users with an options to open a URL in a browser with the user clicks on the URL is a terminal window. And short of those, users with X terminals can always manually cut and paste the URLs into a web browser.

Also, note that various “man to html” tools, such as the widely used `man2html` (`VH-Man2html`) application, automatically mark up URLs with `a@href` markup during conversion — resulting in “real” hyperlinks in HTML output from those tools.

To “turn off” numbering of endnotes in the endnotes list, set `man.endnotes.are.numbered` to zero. The endnotes list will still be displayed; it will just be displayed without the numbers

It can still make sense to have the list of endnotes displayed even if you have endnotes numbering turned off. In that case, your endnotes list basically becomes a “list of references” without any association with specific text in your document. This is probably the best option if you find the inline endnotes numbering obtrusive. Your users will still have access to all the “out of line” such as URLs for hyperlinks.

The default heading for the endnotes list is `NOTES`. To change that, set a non-empty value for the `man.endnotes.list.heading` parameter.

In the case of notesources that are links: Along with the URL for each link, the endnotes list includes the contents of the link. The list thus includes only non-empty

A “non-empty” link is one that looks like this:

      <ulink url="http://docbook.sf.net/snapshot/xsl/doc/manpages/">manpages</ulink>

an “empty link” is on that looks like this:

      <ulink url="http://docbook.sf.net/snapshot/xsl/doc/manpages/"/>

links. Empty links are never included, and never numbered. They are simply displayed inline, without any numbering.

In addition, if there are multiple instances of links in a `refentry` that have the same URL, the URL is listed only once. The contents listed for that link in the endnotes list are the contents of the first link which has that URL.

If you disable endnotes listing, you should probably also set `man.links.are.underlined` to zero (to disable link underlining).

man.endnotes.list.heading

string

man.endnotes.list.heading

Specifies an alternate name for endnotes list

    <xsl:param name="man.endnotes.list.heading"></xsl:param>

If the value of the `man.endnotes.are.numbered` parameter and/or the `man.endnotes.list.enabled` parameter is non-zero (the defaults for both are non-zero), a numbered list of endnotes is generated near the end of each man page. The default heading for the list of endnotes is the equivalent of the English word `NOTES` in the current locale. To cause an alternate heading to be displayed, set a non-empty value for the `man.endnotes.list.heading` parameter — for example, `REFERENCES`.

man.endnotes.are.numbered

boolean

man.endnotes.are.numbered

Number endnotes?

    <xsl:param name="man.endnotes.are.numbered">1</xsl:param>

If the value of `man.endnotes.are.numbered` is non-zero (the default), then for each non-empty

A “non-empty” notesource is one that looks like this:

      <ulink url="http://docbook.sf.net/snapshot/xsl/doc/manpages/">manpages</ulink>

an “empty” notesource is on that looks like this:

      <ulink url="http://docbook.sf.net/snapshot/xsl/doc/manpages/"/>

“notesource”:

- a number (in square brackets) is displayed inline after the rendered inline contents (if any) of the notesource

- the contents of the notesource are included in a numbered list of endnotes that is generated at the end of each man page; the number for each endnote corresponds to the inline number for the notesource with which it is associated

The default heading for the list of endnotes is `NOTES`. To output a different heading, set a value for the `man.endnotes.section.heading` parameter.

The endnotes list is also displayed (but without numbers) if the value of `man.endnotes.list.enabled` is non-zero.

If the value of `man.endnotes.are.numbered` is zero, numbering of endnotess is suppressed; only inline contents (if any) of the notesource are displayed inline.

If you are thinking about disabling endnote numbering by setting the value of `man.endnotes.are.numbered` to zero, before you do so, first take some time to carefully consider the information needs and experiences of your users. The square-bracketed numbers displayed inline after notesources may seem obstrusive and aesthetically unpleasing

As far as notesources that are links, ytou might think it would be better to just display URLs for non-empty links inline, after their content, rather than displaying square-bracketed numbers all over the place. But it's not better. In fact, it's not even practical, because many (most) URLs for links are too long to be displayed inline. They end up overflowing the right margin. You can set a non-zero value for `man.break.after.slash` parameter to deal with that, but it could be argued that what you end up with is at least as ugly, and definitely more obstrusive, then having short square-bracketed numbers displayed inline.

, but in a text-only output format, the numbered-notesources/endnotes-listing mechanism is the only practical way to handle this kind of content.

Also, users of “text based” browsers such as `lynx` will already be accustomed to seeing inline numbers for links. And various "man to html" applications, such as the widely used `man2html` (`VH-Man2html`) application, can automatically turn URLs into "real" HTML hyperlinks in output. So leaving `man.endnotes.are.numbered` at its default (non-zero) value ensures that no information is lost in your man-page output. It just gets “rearranged”.

The handling of empty links is not affected by this parameter. Empty links are handled simply by displaying their URLs inline. Empty links are never auto-numbered.

If you disable endnotes numbering, you should probably also set `man.font.links` to an empty value (to disable font formatting for links.

`man.endnotes.list.enabled`, `man.font.links`

man.base.url.for.relative.links

string

man.base.url.for.relative.links

Specifies a base URL for relative links

    <xsl:param name="man.base.url.for.relative.links">[set $man.base.url.for.relative.links]/</xsl:param>

For any “notesource” listed in the auto-generated “NOTES” section of output man pages (which is generated when the value of the `man.endnotes.list.enabled` parameter is non-zero), if the notesource is a link source with a relative URI, the URI is displayed in output with the value of the `man.base.url.for.relative.links` parameter prepended to the value of the link URI.

A link source is an notesource that references an external resource:

- a `ulink` element with a `url` attribute

- any element with an `xlink:href` attribute

- an `imagedata`, `audiodata`, or `videodata` element

If you use relative URIs in link sources in your DocBook `refentry` source, and you leave `man.base.url.for.relative.links` unset, the relative links will appear “as is” in the “Notes” section of any man-page output generated from your source. That’s probably not what you want, because such relative links are only usable in the context of HTML output. So, to make the links meaningful and usable in the context of man-page output, set a value for `man.base.url.for.relative.links` that points to the online version of HTML output generated from your DocBook `refentry` source. For example:

    <xsl:param name="man.base.url.for.relative.links"
            >http://www.kernel.org/pub/software/scm/git/docs/</xsl:param>

`man.endnotes.list.enabled`

## Lists

man.segtitle.suppress

boolean

man.segtitle.suppress

Suppress display of segtitle contents?

    <xsl:param name="man.segtitle.suppress" select="0"></xsl:param>

If the value of `man.segtitle.suppress` is non-zero, then display of `segtitle` contents is suppressed in output.

## Character/string substitution

man.charmap.enabled

boolean

man.charmap.enabled

Apply character map before final output?

    <xsl:param name="man.charmap.enabled" select="1"></xsl:param>

If the value of the `man.charmap.enabled` parameter is non-zero, a "character map" is used to substitute certain Unicode symbols and special characters with appropriate roff/groff equivalents, just before writing each man-page file to the filesystem. If instead the value of `man.charmap.enabled` is zero, Unicode characters are passed through "as is".

For converting certain Unicode symbols and special characters in UTF-8 or UTF-16 encoded XML source to appropriate groff/roff equivalents in man-page output, the DocBook XSL Stylesheets distribution includes a roff character map that is compliant with the XSLT character map format as detailed in the XSLT 2.0 specification. The map contains more than 800 character mappings and can be considered the standard roff character map for the distribution.

You can use the `man.charmap.uri` parameter to specify a URI for the location for an alternate roff character map to use in place of the standard roff character map provided in the distribution.

You can also use a subset of a character map. For details, see the `man.charmap.use.subset`, `man.charmap.subset.profile`, and `man.charmap.subset.profile.english` parameters.

man.charmap.uri

uri

man.charmap.uri

URI for custom roff character map

    <xsl:param name="man.charmap.uri"></xsl:param>

For converting certain Unicode symbols and special characters in UTF-8 or UTF-16 encoded XML source to appropriate groff/roff equivalents in man-page output, the DocBook XSL Stylesheets distribution includes an XSLT character map. That character map can be considered the standard roff character map for the distribution.

If the value of the `man.charmap.uri` parameter is non-empty, that value is used as the URI for the location for an alternate roff character map to use in place of the standard roff character map provided in the distribution.

Do not set a value for `man.charmap.uri` unless you have a custom roff character map that differs from the standard one provided in the distribution.

man.charmap.use.subset

boolean

man.charmap.use.subset

Use subset of character map instead of full map?

    <xsl:param name="man.charmap.use.subset" select="1"></xsl:param>

If the value of the `man.charmap.use.subset` parameter is non-zero, a subset of the roff character map is used instead of the full roff character map. The profile of the subset used is determined either by the value of the `man.charmap.subset.profile` parameter (if the source is not in English) or the `man.charmap.subset.profile.english` parameter (if the source is in English).

You may want to experiment with setting a non-zero value of `man.charmap.use.subset`, so that the full character map is used. Depending on which XSLT engine you run, setting a non-zero value for `man.charmap.use.subset` may significantly increase the time needed to process your documents. Or it may not. For example, if you set it and run it with xsltproc, it seems to dramatically increase processing time; on the other hand, if you set it and run it with Saxon, it does not seem to increase processing time nearly as much.

If processing time is not a important concern and/or you can tolerate the increase in processing time imposed by using the full character map, set `man.charmap.use.subset` to zero.

For converting certain Unicode symbols and special characters in UTF-8 or UTF-16 encoded XML source to appropriate groff/roff equivalents in man-page output, the DocBook XSL Stylesheets distribution includes a roff character map that is compliant with the XSLT character map format as detailed in the XSLT 2.0 specification. The map contains more than 800 character mappings and can be considered the standard roff character map for the distribution.

You can use the `man.charmap.uri` parameter to specify a URI for the location for an alternate roff character map to use in place of the standard roff character map provided in the distribution.

Because it is not terrifically efficient to use the standard 800-character character map in full -- and for most (or all) users, never necessary to use it in full -- the DocBook XSL Stylesheets support a mechanism for using, within any given character map, a subset of character mappings instead of the full set. You can use the `man.charmap.subset.profile` or `man.charmap.subset.profile.english` parameter to tune the profile of that subset to use.

man.charmap.subset.profile

string

man.charmap.subset.profile

Profile of character map subset

    <xsl:param name="man.charmap.subset.profile">
    @*[local-name() = 'block'] = 'Miscellaneous Technical' or
    (@*[local-name() = 'block'] = 'C1 Controls And Latin-1 Supplement (Latin-1 Supplement)' and
     (@*[local-name() = 'class'] = 'symbols' or
      @*[local-name() = 'class'] = 'letters')
    ) or
    @*[local-name() = 'block'] = 'Latin Extended-A'
    or
    (@*[local-name() = 'block'] = 'General Punctuation' and
     (@*[local-name() = 'class'] = 'spaces' or
      @*[local-name() = 'class'] = 'dashes' or
      @*[local-name() = 'class'] = 'quotes' or
      @*[local-name() = 'class'] = 'bullets'
     )
    ) or
    @*[local-name() = 'name'] = 'HORIZONTAL ELLIPSIS' or
    @*[local-name() = 'name'] = 'WORD JOINER' or
    @*[local-name() = 'name'] = 'SERVICE MARK' or
    @*[local-name() = 'name'] = 'TRADE MARK SIGN' or
    @*[local-name() = 'name'] = 'ZERO WIDTH NO-BREAK SPACE'
    </xsl:param>

If the value of the `man.charmap.use.subset` parameter is non-zero, and your DocBook source is not written in English (that is, if the `lang` or `xml:lang` attribute on the root element in your DocBook source or on the first `refentry` element in your source has a value other than `en`), then the character-map subset specified by the `man.charmap.subset.profile` parameter is used instead of the full roff character map.

Otherwise, if the `lang` or `xml:lang` attribute on the root element in your DocBook source or on the first `refentry` element in your source has the value `en` or if it has no `lang` or `xml:lang` attribute, then the character-map subset specified by the `man.charmap.subset.profile.english` parameter is used instead of `man.charmap.subset.profile`.

The difference between the two subsets is that `man.charmap.subset.profile` provides mappings for characters in Western European languages that are not part of the Roman (English) alphabet (ASCII character set).

The value of `man.charmap.subset.profile` is a string representing an XPath expression that matches attribute names and values for `output-character` elements in the character map.

The attributes supported in the standard roff character map included in the distribution are:

character

- a raw Unicode character or numeric Unicode character-entity value (either in decimal or hex); all characters have this attribute

name

- a standard full/long ISO/Unicode character name (e.g., "OHM SIGN"); all characters have this attribute

block

- a standard Unicode "block" name (e.g., "General Punctuation"); all characters have this attribute. For the full list of Unicode block names supported in the standard roff character map, see BlocksAndClasses.

class

- a class of characters (e.g., "spaces"). Not all characters have this attribute; currently, it is used only with certain characters within the "C1 Controls And Latin-1 Supplement" and "General Punctuation" blocks. For details, see BlocksAndClasses.

entity

- an ISO entity name (e.g., "ohm"); not all characters have this attribute, because not all characters have ISO entity names; for example, of the 800 or so characters in the standard roff character map included in the distribution, only around 300 have ISO entity names.

string

- a string representing an roff/groff escape-code (with "@esc@" used in place of the backslash), or a simple ASCII string; all characters in the roff character map have this attribute

The value of `man.charmap.subset.profile` is evaluated as an XPath expression at run-time to select a portion of the roff character map to use. You can tune the subset used by adding or removing parts. For example, if you need to use a wide range of mathematical operators in a document, and you want to have them converted into roff markup properly, you might add the following:

      @*[local-name() = 'block'] ='MathematicalOperators'

That will cause a additional set of around 67 additional "math" characters to be converted into roff markup.

Depending on which XSLT engine you use, either the EXSLT `dyn:evaluate` extension function (for xsltproc or Xalan) or `saxon:evaluate` extension function (for Saxon) are used to dynamically evaluate the value of `man.charmap.subset.profile` at run-time. If you don't use xsltproc, Saxon, Xalan -- or some other XSLT engine that supports `dyn:evaluate` -- you must either set the value of the `man.charmap.use.subset` parameter to zero and process your documents using the full character map instead, or set the value of the `man.charmap.enabled` parameter to zero instead (so that character-map processing is disabled completely.

An alternative to using `man.charmap.subset.profile` is to create your own custom character map, and set the value of `man.charmap.uri` to the URI/filename for that. If you use a custom character map, you will probably want to include in it just the characters you want to use, and so you will most likely also want to set the value of `man.charmap.use.subset` to zero.

You can create a custom character map by making a copy of the standard roff character map provided in the distribution, and then adding to, changing, and/or deleting from that.

If you author your DocBook XML source in UTF-8 or UTF-16 encoding and aren't sure what OSes or environments your man-page output might end up being viewed on, and not sure what version of nroff/groff those environments might have, you should be careful about what Unicode symbols and special characters you use in your source and what parts you add to the value of `man.charmap.subset.profile`.

Many of the escape codes used are specific to groff and using them may not provide the expected output on an OS or environment that uses nroff instead of groff.

On the other hand, if you intend for your man-page output to be viewed only on modern systems (for example, GNU/Linux systems, FreeBSD systems, or Cygwin environments) that have a good, up-to-date groff, then you can safely include a wide range of Unicode symbols and special characters in your UTF-8 or UTF-16 encoded DocBook XML source and add any of the supported Unicode block names to the value of `man.charmap.subset.profile`.

For other details, see the documentation for the `man.charmap.use.subset` parameter.

Below is the full list of Unicode block names and "class" values supported in the standard roff stylesheet provided in the distribution, along with a description of which codepoints from the Unicode range corresponding to that block name or block/class combination are supported.

- C1 Controls And Latin-1 Supplement (Latin-1 Supplement) (x00a0 to x00ff)

  - symbols

  - letters

- Latin Extended-A (x0100 to x017f, partial)

- Spacing Modifier Letters (x02b0 to x02ee, partial)

- Greek and Coptic (x0370 to x03ff, partial)

- General Punctuation (x2000 to x206f, partial)

  - spaces

  - dashes

  - quotes

  - daggers

  - bullets

  - leaders

  - primes

- Superscripts and Subscripts (x2070 to x209f)

- Currency Symbols (x20a0 to x20b1)

- Letterlike Symbols (x2100 to x214b)

- Number Forms (x2150 to x218f)

- Arrows (x2190 to x21ff, partial)

- Mathematical Operators (x2200 to x22ff, partial)

- Control Pictures (x2400 to x243f)

- Enclosed Alphanumerics (x2460 to x24ff)

- Geometric Shapes (x25a0 to x25f7, partial)

- Miscellaneous Symbols (x2600 to x26ff, partial)

- Dingbats (x2700 to x27be, partial)

- Alphabetic Presentation Forms (xfb00 to xfb04 only)

man.charmap.subset.profile.english

string

man.charmap.subset.profile.english

Profile of character map subset

    <xsl:param name="man.charmap.subset.profile.english">
    @*[local-name() = 'block'] = 'Miscellaneous Technical' or
    (@*[local-name() = 'block'] = 'C1 Controls And Latin-1 Supplement (Latin-1 Supplement)' and
     @*[local-name() = 'class'] = 'symbols')
    or
    (@*[local-name() = 'block'] = 'General Punctuation' and
     (@*[local-name() = 'class'] = 'spaces' or
      @*[local-name() = 'class'] = 'dashes' or
      @*[local-name() = 'class'] = 'quotes' or
      @*[local-name() = 'class'] = 'bullets'
     )
    ) or
    @*[local-name() = 'name'] = 'HORIZONTAL ELLIPSIS' or
    @*[local-name() = 'name'] = 'WORD JOINER' or
    @*[local-name() = 'name'] = 'SERVICE MARK' or
    @*[local-name() = 'name'] = 'TRADE MARK SIGN' or
    @*[local-name() = 'name'] = 'ZERO WIDTH NO-BREAK SPACE'
    </xsl:param>

If the value of the `man.charmap.use.subset` parameter is non-zero, and your DocBook source is written in English (that is, if its `lang` or `xml:lang` attribute on the root element in your DocBook source or on the first `refentry` element in your source has the value `en` or if it has no `lang` or `xml:lang` attribute), then the character-map subset specified by the `man.charmap.subset.profile.english` parameter is used instead of the full roff character map.

Otherwise, if the `lang` or `xml:lang` attribute on the root element in your DocBook source or on the first `refentry` element in your source has a value other than `en`, then the character-map subset specified by the `man.charmap.subset.profile` parameter is used instead of `man.charmap.subset.profile.english`.

The difference between the two subsets is that `man.charmap.subset.profile` provides mappings for characters in Western European languages that are not part of the Roman (English) alphabet (ASCII character set).

The value of `man.charmap.subset.profile.english` is a string representing an XPath expression that matches attribute names and values for `output-character` elements in the character map.

For other details, see the documentation for the `man.charmap.subset.profile.english` and `man.charmap.use.subset` parameters.

man.string.subst.map.local.pre

string

man.string.subst.map.local.pre

Specifies “local” string substitutions

      <xsl:param name="man.string.subst.map.local.pre"></xsl:param>

Use the `man.string.subst.map.local.pre` parameter to specify any “local” string substitutions to perform over the entire roff source for each man page before performing the string substitutions specified by the `man.string.subst.map` parameter.

For details about the format of this parameter, see the documentation for the `man.string.subst.map` parameter.

man.string.subst.map

rtf

man.string.subst.map

Specifies a set of string substitutions

    <xsl:param name="man.string.subst.map">

      <!-- * remove no-break marker at beginning of line (stylesheet artifact) -->
      <ss:substitution oldstring="▒▀" newstring="▒"></ss:substitution>
      <!-- * replace U+2580 no-break marker (stylesheet-added) w/ no-break space -->
      <ss:substitution oldstring="▀" newstring="\ "></ss:substitution>

      <!-- ==================================================================== -->

      <!-- * squeeze multiple newlines before a roff request  -->
      <ss:substitution oldstring="

    ." newstring="
    ."></ss:substitution>
      <!-- * remove any .sp instances that directly precede a .PP  -->
      <ss:substitution oldstring=".sp
    .PP" newstring=".PP"></ss:substitution>
      <!-- * remove any .sp instances that directly follow a .PP  -->
      <ss:substitution oldstring=".sp
    .sp" newstring=".sp"></ss:substitution>
      <!-- * squeeze multiple .sp instances into a single .sp-->
      <ss:substitution oldstring=".PP
    .sp" newstring=".PP"></ss:substitution>
      <!-- * squeeze multiple newlines after start of no-fill (verbatim) env. -->
      <ss:substitution oldstring=".nf

    " newstring=".nf
    "></ss:substitution>
      <!-- * squeeze multiple newlines after REstoring margin -->
      <ss:substitution oldstring=".RE

    " newstring=".RE
    "></ss:substitution>
      <!-- * U+2591 is a marker we add before and after every Parameter in -->
      <!-- * Funcprototype output -->
      <ss:substitution oldstring="░" newstring=" "></ss:substitution>
      <!-- * U+2592 is a marker we add for the newline before output of <sbr>; -->
      <ss:substitution oldstring="▒" newstring="
    "></ss:substitution>
      <!-- * -->
      <!-- * Now deal with some other characters that are added by the -->
      <!-- * stylesheets during processing. -->
      <!-- * -->
      <!-- * bullet -->
      <ss:substitution oldstring="•" newstring="\(bu"></ss:substitution>
      <!-- * left double quote -->
      <ss:substitution oldstring="“" newstring="\(lq"></ss:substitution>
      <!-- * right double quote -->
      <ss:substitution oldstring="”" newstring="\(rq"></ss:substitution>
      <!-- * left single quote -->
      <ss:substitution oldstring="‘" newstring="\(oq"></ss:substitution>
      <!-- * right single quote -->
      <ss:substitution oldstring="’" newstring="\(cq"></ss:substitution>
      <!-- * copyright sign -->
      <ss:substitution oldstring="©" newstring="\(co"></ss:substitution>
      <!-- * registered sign -->
      <ss:substitution oldstring="®" newstring="\(rg"></ss:substitution>
      <!-- * ...servicemark... -->
      <!-- * There is no groff equivalent for it. -->
      <ss:substitution oldstring="℠" newstring="(SM)"></ss:substitution>
      <!-- * ...trademark... -->
      <!-- * We don't do "\(tm" because for console output, -->
      <!-- * groff just renders that as "tm"; that is: -->
      <!-- * -->
      <!-- *   Product&#x2122; -> Producttm -->
      <!-- * -->
      <!-- * So we just make it to "(TM)" instead; thus: -->
      <!-- * -->
      <!-- *   Product&#x2122; -> Product(TM) -->
      <ss:substitution oldstring="™" newstring="(TM)"></ss:substitution>

    </xsl:param>

The `man.string.subst.map` parameter contains a map that specifies a set of string substitutions to perform over the entire roff source for each man page, either just before generating final man-page output (that is, before writing man-page files to disk) or, if the value of the `man.charmap.enabled` parameter is non-zero, before applying the roff character map.

You can use `man.string.subst.map` as a “lightweight” character map to perform “essential” substitutions -- that is, substitutions that are always performed, even if the value of the `man.charmap.enabled` parameter is zero. For example, you can use it to replace quotation marks or other special characters that are generated by the DocBook XSL stylesheets for a particular locale setting (as opposed to those characters that are actually in source XML documents), or to replace any special characters that may be automatically generated by a particular customization of the DocBook XSL stylesheets.

Do you not change value of the `man.string.subst.map` parameter unless you are sure what you are doing. First consider adding your string-substitution mappings to either or both of the following parameters:

`man.string.subst.map.local.pre`

- applied before `man.string.subst.map`

`man.string.subst.map.local.post`

- applied after `man.string.subst.map`

By default, both of those parameters contain no string substitutions. They are intended as a means for you to specify your own local string-substitution mappings.

If you remove any of default mappings from the value of the `man.string.subst.map` parameter, you are likely to end up with broken output. And be very careful about adding anything to it; it’s used for doing string substitution over the entire roff source of each man page – it causes target strings to be replaced in roff requests and escapes, not just in the visible contents of the page.

The string-substitution map contains one or more `ss:substitution` elements, each of which has two attributes:

oldstring

- string to replace

newstring

- string with which to replace `oldstring`

It may also include XML comments (that is, delimited with "`<!--`" and "`-->`").

man.string.subst.map.local.post

string

man.string.subst.map.local.post

Specifies “local” string substitutions

    <xsl:param name="man.string.subst.map.local.post"></xsl:param>

Use the `man.string.subst.map.local.post` parameter to specify any “local” string substitutions to perform over the entire roff source for each man page after performing the string substitutions specified by the `man.string.subst.map` parameter.

For details about the format of this parameter, see the documentation for the `man.string.subst.map` parameter.

## Refentry metadata gathering

refentry.meta.get.quietly

boolean

refentry.meta.get.quietly

Suppress notes and warnings when gathering refentry metadata?

    <xsl:param name="refentry.meta.get.quietly" select="0"></xsl:param>

If zero (the default), notes and warnings about “missing” markup are generated during gathering of refentry metadata. If non-zero, the metadata is gathered “quietly” -- that is, the notes and warnings are suppressed.

If you are processing a large amount of `refentry` content, you may be able to speed up processing significantly by setting a non-zero value for `refentry.meta.get.quietly`.

refentry.date.profile

string

refentry.date.profile

Specifies profile for refentry "date" data

    <xsl:param name="refentry.date.profile">
      (($info[//date])[last()]/date)[1]|
      (($info[//pubdate])[last()]/pubdate)[1]
    </xsl:param>

The value of `refentry.date.profile` is a string representing an XPath expression. It is evaluated at run-time and used only if `refentry.date.profile.enabled` is non-zero. Otherwise, the `refentry` metadata-gathering logic "hard coded" into the stylesheets is used.

The `man(7)` man page describes this content as "the date of the last revision". In man pages, it is the content that is usually displayed in the center footer.

refentry.date.profile.enabled

boolean

refentry.date.profile.enabled

Enable refentry "date" profiling?

    <xsl:param name="refentry.date.profile.enabled">0</xsl:param>

If the value of `refentry.date.profile.enabled` is non-zero, then during `refentry` metadata gathering, the info profile specified by the customizable `refentry.date.profile` parameter is used.

If instead the value of `refentry.date.profile.enabled` is zero (the default), then "hard coded" logic within the DocBook XSL stylesheets is used for gathering `refentry` "date" data.

If you find that the default `refentry` metadata-gathering behavior is causing incorrect "date" data to show up in your output, then consider setting a non-zero value for `refentry.date.profile.enabled` and adjusting the value of `refentry.date.profile` to cause correct data to be gathered.

Note that the terms "source" and "date" have special meanings in this context. For details, see the documentation for the `refentry.date.profile` parameter.

refentry.manual.profile

string

refentry.manual.profile

Specifies profile for refentry "manual" data

    <xsl:param name="refentry.manual.profile">
      (($info[//title])[last()]/title)[1]|
      ../title/node()
    </xsl:param>

The value of `refentry.manual.profile` is a string representing an XPath expression. It is evaluated at run-time and used only if `refentry.manual.profile.enabled` is non-zero. Otherwise, the `refentry` metadata-gathering logic "hard coded" into the stylesheets is used.

In man pages, this content is usually displayed in the middle of the header of the page. The `man(7)` man page describes this as "the title of the manual (e.g., Linux Programmer's Manual)". Here are some examples from existing man pages:

- dpkg utilities (`dpkg-name`)

- User Contributed Perl Documentation (`GET`)

- GNU Development Tools (`ld`)

- Emperor Norton Utilities (`ddate`)

- Debian GNU/Linux manual (`faked`)

- GIMP Manual Pages (`gimp`)

- KDOC Documentation System (`qt2kdoc`)

refentry.manual.profile.enabled

boolean

refentry.manual.profile.enabled

Enable refentry "manual" profiling?

    <xsl:param name="refentry.manual.profile.enabled">0</xsl:param>

If the value of `refentry.manual.profile.enabled` is non-zero, then during `refentry` metadata gathering, the info profile specified by the customizable `refentry.manual.profile` parameter is used.

If instead the value of `refentry.manual.profile.enabled` is zero (the default), then "hard coded" logic within the DocBook XSL stylesheets is used for gathering `refentry` "manual" data.

If you find that the default `refentry` metadata-gathering behavior is causing incorrect "manual" data to show up in your output, then consider setting a non-zero value for `refentry.manual.profile.enabled` and adjusting the value of `refentry.manual.profile` to cause correct data to be gathered.

Note that the term "manual" has a special meanings in this context. For details, see the documentation for the `refentry.manual.profile` parameter.

refentry.source.name.suppress

boolean

refentry.source.name.suppress

Suppress "name" part of refentry "source" contents?

    <xsl:param name="refentry.source.name.suppress">0</xsl:param>

If the value of `refentry.source.name.suppress` is non-zero, then during `refentry` metadata gathering, no "source name" data is added to the `refentry` "source" contents. Instead (unless `refentry.version.suppress` is also non-zero), only "version" data is added to the "source" contents.

If you find that the `refentry` metadata gathering mechanism is causing unwanted "source name" data to show up in your output -- for example, in the footer (or possibly header) of a man page -- then you might consider setting a non-zero value for `refentry.source.name.suppress`.

Note that the terms "source", "source name", and "version" have special meanings in this context. For details, see the documentation for the `refentry.source.name.profile` parameter.

refentry.source.name.profile

string

refentry.source.name.profile

Specifies profile for refentry "source name" data

    <xsl:param name="refentry.source.name.profile">
      (($info[//productname])[last()]/productname)[1]|
      (($info[//corpname])[last()]/corpname)[1]|
      (($info[//corpcredit])[last()]/corpcredit)[1]|
      (($info[//corpauthor])[last()]/corpauthor)[1]|
      (($info[//orgname])[last()]/orgname)[1]|
      (($info[//publishername])[last()]/publishername)[1]
    </xsl:param>

The value of `refentry.source.name.profile` is a string representing an XPath expression. It is evaluated at run-time and used only if `refentry.source.name.profile.enabled` is non-zero. Otherwise, the `refentry` metadata-gathering logic "hard coded" into the stylesheets is used.

A "source name" is one part of a (potentially) two-part `Name` `Version` "source" field. In man pages, it is usually displayed in the left footer of the page. It typically indicates the software system or product that the item documented in the man page belongs to. The `man(7)` man page describes it as "the source of the command", and provides the following examples:

- For binaries, use something like: GNU, NET-2, SLS Distribution, MCC Distribution.

- For system calls, use the version of the kernel that you are currently looking at: Linux 0.99.11.

- For library calls, use the source of the function: GNU, BSD 4.3, Linux DLL 4.4.1.

In practice, there are many pages that simply have a Version number in the "source" field. So, it looks like what we have is a two-part field, `Name` `Version`, where:

Name

- product name (e.g., BSD) or org. name (e.g., GNU)

Version

- version number

Each part is optional. If the `Name` is a product name, then the `Version` is probably the version of the product. Or there may be no `Name`, in which case, if there is a `Version`, it is probably the version of the item itself, not the product it is part of. Or, if the `Name` is an organization name, then there probably will be no `Version`.

refentry.source.name.profile.enabled

boolean

refentry.source.name.profile.enabled

Enable refentry "source name" profiling?

    <xsl:param name="refentry.source.name.profile.enabled">0</xsl:param>

If the value of `refentry.source.name.profile.enabled` is non-zero, then during `refentry` metadata gathering, the info profile specified by the customizable `refentry.source.name.profile` parameter is used.

If instead the value of `refentry.source.name.profile.enabled` is zero (the default), then "hard coded" logic within the DocBook XSL stylesheets is used for gathering `refentry` "source name" data.

If you find that the default `refentry` metadata-gathering behavior is causing incorrect "source name" data to show up in your output, then consider setting a non-zero value for `refentry.source.name.profile.enabled` and adjusting the value of `refentry.source.name.profile` to cause correct data to be gathered.

Note that the terms "source" and "source name" have special meanings in this context. For details, see the documentation for the `refentry.source.name.profile` parameter.

refentry.version.suppress

boolean

refentry.version.suppress

Suppress "version" part of refentry "source" contents?

    <xsl:param name="refentry.version.suppress">0</xsl:param>

If the value of `refentry.version.suppress` is non-zero, then during `refentry` metadata gathering, no "version" data is added to the `refentry` "source" contents. Instead (unless `refentry.source.name.suppress` is also non-zero), only "source name" data is added to the "source" contents.

If you find that the `refentry` metadata gathering mechanism is causing unwanted "version" data to show up in your output -- for example, in the footer (or possibly header) of a man page -- then you might consider setting a non-zero value for `refentry.version.suppress`.

Note that the terms "source", "source name", and "version" have special meanings in this context. For details, see the documentation for the `refentry.source.name.profile` parameter.

refentry.version.profile

string

refentry.version.profile

Specifies profile for refentry "version" data

    <xsl:param name="refentry.version.profile">
      (($info[//productnumber])[last()]/productnumber)[1]|
      (($info[//edition])[last()]/edition)[1]|
      (($info[//releaseinfo])[last()]/releaseinfo)[1]
    </xsl:param>

The value of `refentry.version.profile` is a string representing an XPath expression. It is evaluated at run-time and used only if `refentry.version.profile.enabled` is non-zero. Otherwise, the `refentry` metadata-gathering logic "hard coded" into the stylesheets is used.

A "source.name" is one part of a (potentially) two-part `Name` `Version` "source" field. For more details, see the documentation for the `refentry.source.name.profile` parameter.

refentry.version.profile.enabled

boolean

refentry.version.profile.enabled

Enable refentry "version" profiling?

    <xsl:param name="refentry.version.profile.enabled">0</xsl:param>

If the value of `refentry.version.profile.enabled` is non-zero, then during `refentry` metadata gathering, the info profile specified by the customizable `refentry.version.profile` parameter is used.

If instead the value of `refentry.version.profile.enabled` is zero (the default), then "hard coded" logic within the DocBook XSL stylesheets is used for gathering `refentry` "version" data.

If you find that the default `refentry` metadata-gathering behavior is causing incorrect "version" data to show up in your output, then consider setting a non-zero value for `refentry.version.profile.enabled` and adjusting the value of `refentry.version.profile` to cause correct data to be gathered.

Note that the terms "source" and "version" have special meanings in this context. For details, see the documentation for the `refentry.version.profile` parameter.

refentry.manual.fallback.profile

string

refentry.manual.fallback.profile

Specifies profile of "fallback" for refentry "manual" data

    <xsl:param name="refentry.manual.fallback.profile">
    refmeta/refmiscinfo[not(@class = 'date')][1]/node()</xsl:param>

The value of `refentry.manual.fallback.profile` is a string representing an XPath expression. It is evaluated at run-time and used only if no "manual" data can be found by other means (that is, either using the `refentry` metadata-gathering logic "hard coded" in the stylesheets, or the value of `refentry.manual.profile`, if it is enabled).

Depending on which XSLT engine you run, either the EXSLT `dyn:evaluate` extension function (for xsltproc or Xalan) or `saxon:evaluate` extension function (for Saxon) are used to dynamically evaluate the value of `refentry.manual.fallback.profile` at run-time. If you don't use xsltproc, Saxon, Xalan -- or some other XSLT engine that supports `dyn:evaluate` -- you must manually disable fallback processing by setting an empty value for the `refentry.manual.fallback.profile` parameter.

refentry.source.fallback.profile

string

refentry.source.fallback.profile

Specifies profile of "fallback" for refentry "source" data

    <xsl:param name="refentry.source.fallback.profile">
    refmeta/refmiscinfo[not(@class = 'date')][1]/node()</xsl:param>

The value of `refentry.source.fallback.profile` is a string representing an XPath expression. It is evaluated at run-time and used only if no "source" data can be found by other means (that is, either using the `refentry` metadata-gathering logic "hard coded" in the stylesheets, or the value of the `refentry.source.name.profile` and `refentry.version.profile` parameters, if those are enabled).

Depending on which XSLT engine you run, either the EXSLT `dyn:evaluate` extension function (for xsltproc or Xalan) or `saxon:evaluate` extension function (for Saxon) are used to dynamically evaluate the value of `refentry.source.fallback.profile` at run-time. If you don't use xsltproc, Saxon, Xalan -- or some other XSLT engine that supports `dyn:evaluate` -- you must manually disable fallback processing by setting an empty value for the `refentry.source.fallback.profile` parameter.

## Page header/footer

man.th.extra1.suppress

boolean

man.th.extra1.suppress

Suppress extra1 part of header/footer?

    <xsl:param name="man.th.extra1.suppress">0</xsl:param>

If the value of `man.th.extra1.suppress` is non-zero, then the `extra1` part of the `.TH` title line header/footer is suppressed.

The content of the `extra1` field is almost always displayed in the center footer of the page and is, universally, a date.

man.th.extra2.suppress

boolean

man.th.extra2.suppress

Suppress extra2 part of header/footer?

    <xsl:param name="man.th.extra2.suppress">0</xsl:param>

If the value of `man.th.extra2.suppress` is non-zero, then the `extra2` part of the `.TH` title line header/footer is suppressed.

The content of the `extra2` field is usually displayed in the left footer of the page and is typically "source" data, often in the form `Name` `Version`; for example, "GTK+ 1.2" (from the `gtk-options(7)` man page).

You can use the `refentry.source.name.suppress` and `refentry.version.suppress` parameters to independently suppress the `Name` and `Version` parts of the `extra2` field.

man.th.extra3.suppress

boolean

man.th.extra3.suppress

Suppress extra3 part of header/footer?

    <xsl:param name="man.th.extra3.suppress">0</xsl:param>

If the value of `man.th.extra3.suppress` is non-zero, then the `extra3` part of the `.TH` title line header/footer is suppressed.

The content of the `extra3` field is usually displayed in the middle header of the page and is typically a "manual name"; for example, "GTK+ User's Manual" (from the `gtk-options(7)` man page).

man.th.title.max.length

integer

man.th.title.max.length

Maximum length of title in header/footer

    <xsl:param name="man.th.title.max.length">20</xsl:param>

Specifies the maximum permitted length of the title part of the man-page `.TH` title line header/footer. If the title exceeds the maxiumum specified, it is truncated down to the maximum permitted length.

Every man page generated using the DocBook stylesheets has a title line, specified using the `TH` roff macro. Within that title line, there is always, at a minimum, a title, followed by a section value (representing a man "section" -- usually just a number).

The title and section are displayed, together, in the visible header of each page. Where in the header they are displayed depends on OS the man page is viewed on, and on what version of nroff/groff/man is used for viewing the page. But, at a minimum and across all systems, the title and section are displayed on the right-hand column of the header. On many systems -- those with a modern groff, including Linux systems -- they are displayed twice: both in the left and right columns of the header.

So if the length of the title exceeds a certain percentage of the column width in which the page is viewed, the left and right titles can end up overlapping, making them unreadable, or breaking to another line, which doesn't look particularly good.

So the stylesheets provide the `man.th.title.max.length` parameter as a means for truncating titles that exceed the maximum length that can be viewing properly in a page header.

The default value is reasonable but somewhat arbitrary. If you have pages with long titles, you may want to experiment with changing the value in order to achieve the correct aesthetic results.

man.th.extra2.max.length

integer

man.th.extra2.max.length

Maximum length of extra2 in header/footer

    <xsl:param name="man.th.extra2.max.length">30</xsl:param>

Specifies the maximum permitted length of the `extra2` part of the man-page part of the `.TH` title line header/footer. If the `extra2` content exceeds the maxiumum specified, it is truncated down to the maximum permitted length.

The content of the `extra2` field is usually displayed in the left footer of the page and is typically "source" data indicating the software system or product that the item documented in the man page belongs to, often in the form `Name` `Version`; for example, "GTK+ 1.2" (from the `gtk-options(7)` man page).

The default value for this parameter is reasonable but somewhat arbitrary. If you are processing pages with long "source" information, you may want to experiment with changing the value in order to achieve the correct aesthetic results.

man.th.extra3.max.length

integer

man.th.extra3.max.length

Maximum length of extra3 in header/footer

    <xsl:param name="man.th.extra3.max.length">30</xsl:param>

Specifies the maximum permitted length of the `extra3` part of the man-page `.TH` title line header/footer. If the `extra3` content exceeds the maxiumum specified, it is truncated down to the maximum permitted length.

The content of the `extra3` field is usually displayed in the middle header of the page and is typically a "manual name"; for example, "GTK+ User's Manual" (from the `gtk-options(7)` man page).

The default value for this parameter is reasonable but somewhat arbitrary. If you are processing pages with long "manual names" -- or especially if you are processing pages that have both long "title" parts (command/function, etc. names) and long manual names -- you may want to experiment with changing the value in order to achieve the correct aesthetic results.

## Output

man.output.manifest.enabled

boolean

man.output.manifest.enabled

Generate a manifest file?

    <xsl:param name="man.output.manifest.enabled" select="0"></xsl:param>

If non-zero, a list of filenames for man pages generated by the stylesheet transformation is written to the file named by the `man.output.manifest.filename` parameter.

man.output.manifest.filename

string

man.output.manifest.filename

Name of manifest file

    <xsl:param name="man.output.manifest.filename">MAN.MANIFEST</xsl:param>

The `man.output.manifest.filename` parameter specifies the name of the file to which the manpages manifest file is written (if the value of the `man.output.manifest.enabled` parameter is non-zero).

man.output.in.separate.dir

boolean

man.output.in.separate.dir

Output man-page files in separate output directory?

    <xsl:param name="man.output.in.separate.dir" select="0"></xsl:param>

If the value of `man.output.in.separate.dir` parameter is non-zero, man-page files are output in a separate directory, specified by the `man.output.base.dir` parameter; otherwise, if the value of `man.output.in.separate.dir` is zero, man-page files are not output in a separate directory.

man.output.lang.in.name.enabled

boolean

man.output.lang.in.name.enabled

Include $LANG value in man-page filename/pathname?

    <xsl:param name="man.output.lang.in.name.enabled" select="0"></xsl:param>

The `man.output.lang.in.name.enabled` parameter specifies whether a `$lang` value is included in man-page filenames and pathnames.

If the value of `man.output.lang.in.name.enabled` is non-zero, man-page files are output with the `$lang` value included in their filenames or pathnames as follows;

- if `man.output.subdirs.enabled` is non-zero, each file is output to, e.g., a `man/`$lang`/man8/foo.8` pathname

- if `man.output.subdirs.enabled` is zero, each file is output with a `foo.`$lang`.8` filename

man.output.base.dir

uri

man.output.base.dir

Specifies separate output directory

    <xsl:param name="man.output.base.dir">man/</xsl:param>

The `man.output.base.dir` parameter specifies the base directory into which man-page files are output. The `man.output.subdirs.enabled` parameter controls whether the files are output in subdirectories within the base directory.

The values of the `man.output.base.dir` and `man.output.subdirs.enabled` parameters are used only if the value of `man.output.in.separate.dir` parameter is non-zero. If the value of the `man.output.in.separate.dir` is zero, man-page files are not output in a separate directory.

man.output.subdirs.enabled

boolean

man.output.subdirs.enabled

Output man-page files in subdirectories within base output directory?

    <xsl:param name="man.output.subdirs.enabled" select="1"></xsl:param>

The `man.output.subdirs.enabled` parameter controls whether man-pages files are output in subdirectories within the base directory specified by the directory specified by the `man.output.base.dir` parameter.

The values of the `man.output.base.dir` and `man.output.subdirs.enabled` parameters are used only if the value of `man.output.in.separate.dir` parameter is non-zero. If the value of the `man.output.in.separate.dir` is zero, man-page files are not output in a separate directory.

man.output.quietly

boolean

man.output.quietly

Suppress filename messages emitted when generating output?

    <xsl:param name="man.output.quietly" select="0"></xsl:param>

If zero (the default), for each man-page file created, a message with the name of the file is emitted. If non-zero, the files are output "quietly" -- that is, the filename messages are suppressed.

If you are processing a large amount of `refentry` content, you may be able to speed up processing significantly by setting a non-zero value for `man.output.quietly`.

man.output.encoding

string

man.output.encoding

Encoding used for man-page output

    <xsl:param name="man.output.encoding">UTF-8</xsl:param>

This parameter specifies the encoding to use for files generated by the manpages stylesheet. Not all processors support specification of this parameter.

If the value of the `man.charmap.enabled` parameter is non-zero (the default), keeping the `man.output.encoding` parameter at its default value (`UTF-8`) or setting it to `UTF-16` does not cause your man pages to be output in raw UTF-8 or UTF-16 -- because any Unicode characters for which matches are found in the enabled character map will be replaced with roff escape sequences before the final man-page files are generated.

So if you want to generate "real" UTF-8 man pages, without any character substitution being performed on your content, you need to set `man.charmap.enabled` to zero (which will completely disable character-map processing).

You may also need to set `man.charmap.enabled` to zero if you want to output man pages in an encoding other than `UTF-8` or `UTF-16`. Character-map processing is based on Unicode character values and may not work with other output encodings.

man.output.better.ps.enabled

boolean

man.output.better.ps.enabled

Enable enhanced print/PostScript output?

    <xsl:param name="man.output.better.ps.enabled">0</xsl:param>

If the value of the `man.output.better.ps.enabled` parameter is non-zero, certain markup is embedded in each generated man page such that PostScript output from the `man -Tps` command for that page will include a number of enhancements designed to improve the quality of that output.

If `man.output.better.ps.enabled` is zero (the default), no such markup is embedded in generated man pages, and no enhancements are included in the PostScript output generated from those man pages by the `man -Tps` command.

The enhancements provided by this parameter rely on features that are specific to groff (GNU troff) and that are not part of “classic” AT&T troff or any of its derivatives. Therefore, any man pages you generate with this parameter enabled will be readable only on systems on which the groff (GNU troff) program is installed, such as GNU/Linux systems. The pages will not not be readable on systems on with the classic troff (AT&T troff) command is installed.

The value of this parameter only affects PostScript output generated from the `man` command. It has no effect on output generated using the FO backend.

You can generate PostScript output for any man page by running the following command:

      man FOO -Tps > FOO.ps

You can then generate PDF output by running the following command:

      ps2pdf FOO.ps

## Other

man.table.footnotes.divider

string

man.table.footnotes.divider

Specifies divider string that appears before table footnotes

    <xsl:param name="man.table.footnotes.divider">----</xsl:param>

In each table that contains footenotes, the string specified by the `man.table.footnotes.divider` parameter is output before the list of footnotes for the table.

man.subheading.divider.enabled

boolean

man.subheading.divider.enabled

Add divider comment to roff source before/after subheadings?

    <xsl:param name="man.subheading.divider.enabled">0</xsl:param>

If the value of the `man.subheading.divider.enabled` parameter is non-zero, the contents of the `man.subheading.divider` parameter are used to add a "divider" before and after subheadings in the roff output. The divider is not visisble in the rendered man page; it is added as a comment, in the source, simply for the purpose of increasing reability of the source.

If `man.subheading.divider.enabled` is zero (the default), the subheading divider is suppressed.

man.subheading.divider

string

man.subheading.divider

Specifies string to use as divider comment before/after subheadings

    <xsl:param name="man.subheading.divider">========================================================================</xsl:param>

If the value of the `man.subheading.divider.enabled` parameter is non-zero, the contents of the `man.subheading.divider` parameter are used to add a "divider" before and after subheadings in the roff output. The divider is not visisble in the rendered man page; it is added as a comment, in the source, simply for the purpose of increasing reability of the source.

If `man.subheading.divider.enabled` is zero (the default), the subheading divider is suppressed.

## The Stylesheet

The `param.xsl` stylesheet is just a wrapper around all of these parameters.

    <xsl:stylesheet exclude-result-prefixes="src" version="1.0">

    <!-- This file is generated from param.xweb -->

    <!-- ********************************************************************
         $Id: param.xweb 8235 2009-02-09 16:22:14Z xmldoc $
         ********************************************************************

         This file is part of the XSL DocBook Stylesheet distribution.
         See ../README or http://docbook.sf.net/release/xsl/current/ for
         copyright and other information.

         ******************************************************************** -->

    <src:fragref linkend="man.authors.section.enabled.frag"></src:fragref>
    <src:fragref linkend="man.break.after.slash.frag"></src:fragref>
    <src:fragref linkend="man.base.url.for.relative.links.frag"></src:fragref>
    <src:fragref linkend="man.charmap.enabled.frag"></src:fragref>
    <src:fragref linkend="man.charmap.subset.profile.frag"></src:fragref>
    <src:fragref linkend="man.charmap.subset.profile.english.frag"></src:fragref>
    <src:fragref linkend="man.charmap.uri.frag"></src:fragref>
    <src:fragref linkend="man.charmap.use.subset.frag"></src:fragref>
    <src:fragref linkend="man.copyright.section.enabled.frag"></src:fragref>
    <src:fragref linkend="man.endnotes.are.numbered.frag"></src:fragref>
    <src:fragref linkend="man.endnotes.list.enabled.frag"></src:fragref>
    <src:fragref linkend="man.endnotes.list.heading.frag"></src:fragref>
    <src:fragref linkend="man.font.funcprototype.frag"></src:fragref>
    <src:fragref linkend="man.font.funcsynopsisinfo.frag"></src:fragref>
    <src:fragref linkend="man.font.links.frag"></src:fragref>
    <src:fragref linkend="man.font.table.headings.frag"></src:fragref>
    <src:fragref linkend="man.font.table.title.frag"></src:fragref>
    <src:fragref linkend="man.funcsynopsis.style.frag"></src:fragref>
    <src:fragref linkend="man.hyphenate.computer.inlines.frag"></src:fragref>
    <src:fragref linkend="man.hyphenate.filenames.frag"></src:fragref>
    <src:fragref linkend="man.hyphenate.frag"></src:fragref>
    <src:fragref linkend="man.hyphenate.urls.frag"></src:fragref>
    <src:fragref linkend="man.indent.blurbs.frag"></src:fragref>
    <src:fragref linkend="man.indent.lists.frag"></src:fragref>
    <src:fragref linkend="man.indent.refsect.frag"></src:fragref>
    <src:fragref linkend="man.indent.verbatims.frag"></src:fragref>
    <src:fragref linkend="man.indent.width.frag"></src:fragref>
    <src:fragref linkend="man.justify.frag"></src:fragref>
    <src:fragref linkend="man.output.base.dir.frag"></src:fragref>
    <src:fragref linkend="man.output.encoding.frag"></src:fragref>
    <src:fragref linkend="man.output.in.separate.dir.frag"></src:fragref>
    <src:fragref linkend="man.output.lang.in.name.enabled.frag"></src:fragref>
    <src:fragref linkend="man.output.manifest.enabled.frag"></src:fragref>
    <src:fragref linkend="man.output.manifest.filename.frag"></src:fragref>
    <src:fragref linkend="man.output.better.ps.enabled.frag"></src:fragref>
    <src:fragref linkend="man.output.quietly.frag"></src:fragref>
    <src:fragref linkend="man.output.subdirs.enabled.frag"></src:fragref>
    <src:fragref linkend="man.segtitle.suppress.frag"></src:fragref>
    <src:fragref linkend="man.string.subst.map.frag"></src:fragref>
    <src:fragref linkend="man.string.subst.map.local.post.frag"></src:fragref>
    <src:fragref linkend="man.string.subst.map.local.pre.frag"></src:fragref>
    <src:fragref linkend="man.subheading.divider.enabled.frag"></src:fragref>
    <src:fragref linkend="man.subheading.divider.frag"></src:fragref>
    <src:fragref linkend="man.table.footnotes.divider.frag"></src:fragref>
    <src:fragref linkend="man.th.extra1.suppress.frag"></src:fragref>
    <src:fragref linkend="man.th.extra2.max.length.frag"></src:fragref>
    <src:fragref linkend="man.th.extra2.suppress.frag"></src:fragref>
    <src:fragref linkend="man.th.extra3.max.length.frag"></src:fragref>
    <src:fragref linkend="man.th.extra3.suppress.frag"></src:fragref>
    <src:fragref linkend="man.th.title.max.length.frag"></src:fragref>
    <src:fragref linkend="refentry.date.profile.enabled.frag"></src:fragref>
    <src:fragref linkend="refentry.date.profile.frag"></src:fragref>
    <src:fragref linkend="refentry.manual.fallback.profile.frag"></src:fragref>
    <src:fragref linkend="refentry.manual.profile.enabled.frag"></src:fragref>
    <src:fragref linkend="refentry.manual.profile.frag"></src:fragref>
    <src:fragref linkend="refentry.meta.get.quietly.frag"></src:fragref>
    <src:fragref linkend="refentry.source.fallback.profile.frag"></src:fragref>
    <src:fragref linkend="refentry.source.name.profile.enabled.frag"></src:fragref>
    <src:fragref linkend="refentry.source.name.profile.frag"></src:fragref>
    <src:fragref linkend="refentry.source.name.suppress.frag"></src:fragref>
    <src:fragref linkend="refentry.version.profile.enabled.frag"></src:fragref>
    <src:fragref linkend="refentry.version.profile.frag"></src:fragref>
    <src:fragref linkend="refentry.version.suppress.frag"></src:fragref>
    </xsl:stylesheet>