The APT format

In the following section, boxes containing text in typewriter-like font are examples of APT source.

Document structure

A short APT document is contained in a single text file. A longer document may be contained in a ordered list of text files. For instance, first text file contains section 1, second text file contains section 2, and so on.

Note:
Splitting the APT document in several text files on a section boundary is not mandatory. The split may occur anywhere. However doing so is recommended because a text file containing a section is by itself a valid APT document.

A file contains a sequence of paragraphs and ``displays'' (non paragraphs such as tables) separated by open lines.

A paragraph is simply a sequence of consecutive text lines.

  First line of first paragraph.
  Second line of first paragraph.
  Third line of first paragraph.

  Line 1 of paragraph 2 (separated from first paragraph by an open line).
  Line 2 of paragraph 2.

The indentation of the first line of a paragraph is the main method used by an APT processor to recognize the type of the paragraph. For example, a section title must not be indented at all.

A ``plain'' paragraph must be indented by a certain amount of space. For example, a plain paragraph which is not contained in a list may be indented by two spaces.

My section title (not indented).

  My paragraph first line (indented by 2 spaces).

Indentation is not rigid. Any amount of space will do. You don't even need to use a consistent indentation all over your document. What really matters for an APT processor is whether the paragraph is not indented at all or, when inside a list, whether a paragraph is more or less indented than the first item of the list (more about this later).

    First paragraph has its first line indented by four
spaces. Then the author did even bother to indent the
other lines of the paragraph.

  Second paragraph contains several lines which are all
  indented by two spaces. This style is much nicer than
  the one used for the previous paragraph.

Note that tabs are expanded with a tab width set to 8.

Document elements

Block level elements

Title

A title is optional. If used, it must appear as the first block of the document.

                                    ------
                                    Title
                                    ------
                                    Author
                                    ------
                                     Date

A title block is indented (centering it is nicer). It begins with a line containing at least 3 dashes (---).

After the first --- line, one or several consecutive lines of text (implicit line break after each line) specify the title of the document.

This text may immediately be followed by another --- line and one or several consecutive lines of text which specifies the author of the document.

The author sub-block may optionaly be followed by a date sub-block using the same syntax.

The following example is used for a document with an title and a date but with no declared author.

                                    ------
                                    Title
                                    ------
                                    ------
                                     Date
                                    ------

The last line is ignored. It is just there to make the block nicer.

Paragraph

Paragraphs other than the title block may appear before the first section.

  Paragraph 1, line 1.
  Paragraph 1, line 2.

  Paragraph 2, line 1.
  Paragraph 2, line 2.

Paragraphs are indented. They have already been described in the document structure section.

Section

Sections are created by inserting section titles into the document. Simple documents need not contain sections.

Section title

* Sub-section title

** Sub-sub-section title

*** Sub-sub-sub-section title

**** Sub-sub-sub-sub-section title

Section titles are not indented. A sub-section title begins with one asterisk (*), a sub-sub-section title begins with two asterisks (**), and so forth up to four sub-section levels.

List
      * List item 1.

      * List item 2.

        Paragraph contained in list item 2.

            * Sub-list item 1.

            * Sub-list item 2.

      * List item 3.

List items are indented and begin with a asterisk (*).

Plain paragraphs more indented than the first list item are nested in that list. Displays such as tables (not indented) are always nested in the current list.

To nest a list inside a list, indent its first item more than its parent list. To end a list, add a paragraph or list item less indented than the current list.

Section titles always end a list. Displays cannot end a list but the [] pseudo-element may be used to force the end of a list.

      * List item 3.
        Force end of list:

      []

--------------------------------------------
Verbatim text not contained in list item 3
--------------------------------------------

In the previous example, without the [], the verbatim text (not indented as all displays) would have been contained in list item 3.

A single [] may be used to end several nested lists at the same time. The indentation of [] may be used to specify exactly which lists should be ended. Example:

      * List item 1.

      * List item 2.

            * Sub-list item 1.

            * Sub-list item 2.

            []

-------------------------------------------------------------------
Verbatim text contained in list item 2, but not in sub-list item 2
-------------------------------------------------------------------

There are three kind of lists, the bulleted lists we have already described, the numbered lists and the definition lists.

      [[1]] Numbered item 1.

                [[A]] Numbered item A.

                [[B]] Numbered item B.

      [[2]] Numbered item 2.

A numbered list item begins with a label beetween two square brackets. The label of the first item establishes the numbering scheme for the whole list:

[[1]]
Decimal numbering: 1, 2, 3, 4, etc.
[[a]]
Lower-alpha numbering: a, b, c, d, etc.
[[A]]
Upper-alpha numbering: A, B, C, D, etc.
[[i]]
Lower-roman numbering: i, ii, iii, iv, etc.
[[I]]
Upper-roman numbering: I, II, III, IV, etc.

The labels of the items other than the first one are ignored. It is recommended to take the time to type the correct label for each item in order to keep the APT source document readable.

      [Defined term 1] of definition list 2.

      [Defined term 2] of definition list 2.

A definition list item begins with a defined term: text between square brackets.

Verbatim text
----------------------------------------
Verbatim
         text,
                preformatted,
                                escaped.
----------------------------------------

A verbatim block is not indented. It begins with a non indented line containing at least 3 dashes (---). It ends with a similar line.

+-- instead of --- draws a box around verbatim text.

Like in HTML, verbatim text is preformatted. Unlike HTML, verbatim text is escaped: inside a verbatim display, markup is not interpreted by the APT processor.

Figure
[Figure name] Figure caption

A figure block is not indented. It begins with the figure name between square brackets. The figure name is optionally followed by some text: the figure caption.

The figure name is the pathname of the file containing the figure but without an extension. Example: if your figure is contained in /home/joe/docs/mylogo.jpeg, the figure name is /home/joe/docs/mylogo.

If the figure name comes from a relative pathname (recommended practice) rather than from an absolute pathname, this relative pathname is taken to be relative to the directory of the current APT document (a la HTML) rather than relative to the current working directory.

Why not leave the file extension in the figure name? This is better explained by an example. You need to convert an APT document to PostScript and your figure name is /home/joe/docs/mylogo. A APT processor will first try to load /home/joe/docs/mylogo.eps. When the desired format is not found, a APT processor tries to convert one of the existing formats. In our example, the APT processor tries to convert /home/joe/docs/mylogo.jpeg to encapsulated PostScript.

Table

A table block is not indented. It begins with a non indented line containing an asterisk and at least 2 dashes (*--). It ends with a similar line.

The first line is not only used to recognize a table but also to specify column justification. In the following example,

  • the second asterisk (*) is used to specify that column 1 is centered,
  • the plus sign (+) specifies that column 2 is left aligned,
  • the colon (:) specifies that column 3 is right aligned.
*----------*--------------+----------------:
| Centered | Left-aligned | Right-aligned  |
| cell 1,1 | cell 1,2     | cell 1,3       |
*----------*--------------+----------------:
| cell 2,1 | cell 2,2     | cell 2,3       |
*----------*--------------+----------------:
Table caption

Rows are separated by a non indented line beginning with *--.

An optional table caption (non indented text) may immediately follow the table.

Rows may contain single line or multiple line cells. Each line of cell text is separated from the adjacent cell by the pipe character (|). (| may be used in the cell text if quoted: \|.)

The last | is only used to make the table nicer. The first | is not only used to make the table nicer, but also to specify that a grid is to be drawn around table cells.

The following example shows a simple table with no grid and no caption.

*-----*------*
 cell | cell
*-----*------*
 cell | cell
*-----*------*
Horizontal rule
=====================

A non indented line containing at least 3 equal signs (===).

Page break
^L

A non indented line containing a single form feed character (Control-L).

Text level elements

Font
  <Italic> font. <<Bold>> font. <<<Monospaced>>> font.

Text between < and > must be rendered in italic. Text between << and >> must be rendered in bold. Text between <<< and >>> must be rendered using a monospaced, typewriter-like font.

Font elements may appear anywhere except inside other font elements.

It is not recommended to use font elements inside titles, section titles, links and defined terms because a APT processor automatically applies appropriate font styles to these elements.

Anchor and link
  {Anchor}. Link to {{anchor}}. Link to {{http://www.pixware.fr}}.
  Link to {{{anchor}showing alternate text}}.
  Link to {{{http://www.pixware.fr}Pixware home page}}.

Text between curly braces ({}) specifies an anchor. Text between double curly braces ({{}}) specifies a link.

It is an error to create a link element that does not refer to an anchor of the same name. The name of an anchor/link is its text with all non alphanumeric characters stripped.

This rule does not apply to links to external anchors. Text beginning with http:/, https:/, ftp:/, file:/, mailto:, ../, ./ (..\ and .\ on Windows) is recognized as an external anchor name.

When the construct {{{name}text}} is used, the link text text may differ from the link name name.

Anchor/link elements may appear anywhere except inside other anchor/link elements.

Section titles are implicitly defined anchors.

Line break
  Force line\
  break.

A backslash character (\) followed by a newline character.

Line breaks must not be used inside titles and tables (which are line oriented blocks with implicit line breaks).

Non breaking space
  Non\ breaking\ space.

A backslash character (\) followed by a space character.

Special character
  Escaped special characters: \~, \=, \-, \+, \*, \[, \], \<, \>, \{, \}, \\.

In certain contexts, these characters have a special meaning and therefore must be escaped if needed as is. They are escaped by adding a backslash in front of them. The backslash may itself be escaped by adding another backslash in front of it.

Note that an asterisk, for example, needs to be escaped only if its begins a paragraph. (* has no special meaning in the middle of a paragraph.)

  Copyright symbol: \251, \xA9, \u00a9.

Latin-1 characters (whatever is the encoding of the APT document) may be specified by their codes using a backslash followed by one to three octal digits or by using the \xNN notation, where NN are two hexadecimal digits.

Unicode characters may be specified by their codes using the \uNNNN notation, where NNNN are four hexadecimal digits.

Comment
~~Commented out.

Text found after two tildes (~~) is ignored up to the end of line.

A line of ~ is often used to ``underline'' section titles in order to make them stand out of other paragraphs.

                                    ------
                                    Title
                                    ------
                                    Author
                                    ------
                                     Date

  Paragraph 1, line 1.
  Paragraph 1, line 2.

  Paragraph 2, line 1.
  Paragraph 2, line 2.

Section title

* Sub-section title

** Sub-sub-section title

*** Sub-sub-sub-section title

**** Sub-sub-sub-sub-section title

      * List item 1.

      * List item 2.

        Paragraph contained in list item 2.

            * Sub-list item 1.

            * Sub-list item 2.

      * List item 3.
        Force end of list:

      []

+------------------------------------------+
Verbatim text not contained in list item 3
+------------------------------------------+

      [[1]] Numbered item 1.

                [[A]] Numbered item A.

                [[B]] Numbered item B.

      [[2]] Numbered item 2.

  List numbering schemes: [[1]], [[a]], [[A]], [[i]], [[I]].

      [Defined term 1] of definition list.

      [Defined term 2] of definition list.

+-------------------------------+
Verbatim text
                        in a box
+-------------------------------+

  --- instead of +-- suppresses the box around verbatim text.

[Figure name] Figure caption

*----------*--------------+----------------:
| Centered | Left-aligned | Right-aligned  |
| cell 1,1 | cell 1,2     | cell 1,3       |
*----------*--------------+----------------:
| cell 2,1 | cell 2,2     | cell 2,3       |
*----------*--------------+----------------:
Table caption

  No grid, no caption:

*-----*------*
 cell | cell
*-----*------*
 cell | cell
*-----*------*

  Horizontal line:

=======================================================================

^L
  New page.

  <Italic> font. <<Bold>> font. <<<Monospaced>>> font.

  {Anchor}. Link to {{anchor}}. Link to {{http://www.pixware.fr}}.
  Link to {{{anchor}showing alternate text}}.
  Link to {{{http://www.pixware.fr}Pixware home page}}.

  Force line\
  break.

  Non\ breaking\ space.

  Escaped special characters: \~, \=, \-, \+, \*, \[, \], \<, \>, \{, \}, \\.

  Copyright symbol: \251, \xA9, \u00a9.

~~Commented out.