SCDOC(5) File Formats Manual SCDOC(5)

# [NAME](#NAME)

scdoc - document format for writing manual pages

# [SYNTAX](#SYNTAX)

Input files must use the UTF-8 encoding.

## [Preamble](#Preamble)

Each scdoc file must begin with the following preamble:

*NAME*(*section*) \["left\_footer" \["center\_header"]]

*NAME* is the name of the man page you are writing, and *section* is the section you're writing for (see [*man*(1)](/man/os/scdoc/man.1) for information on manual sections).

*left\_footer* and *center\_header* are optional arguments which set the text positioned at those locations in the generated man page, and **must** be surrounded with double quotes.

## [Section headers](#Section_headers)

Each section of your man page should begin with something similar to the following:

\# HEADER NAME

Subsection headers are also understood - use two hashes. Each header must have an empty line on either side.

## [Paragraphs](#Paragraphs)

Begin a new paragraph with an empty line.

## [Line breaks](#Line_breaks)

Insert a line break by ending a line with ++.

The result looks  
like this.

## [Formatting](#Formatting)

Text can be made **bold** or *underlined* with asterisks and underscores: \*bold* or \_underlined\_. Underscores in the\_middle\_of\_words will be disregarded.

## [Indentation](#Indentation)

You may indent lines with tab characters (**\\t**) to indent them by 4 spaces in the output. Indented lines may not contain headers.

The result looks something like this.

You may use multiple lines and most *formatting*.

Deindent to return to normal, or indent again to increase your indentation depth.

## [Lists](#Lists)

You may start bulleted lists with dashes (-), like so:

```
- Item 1
- Item 2
	- Subitem 1
	- Subitem 2
- Item 3
```

The result looks like this:

- Item 1
- Item 2

<!--THE END-->

- Subitem 1
- Subitem 2

•

Item 3

You may also extend long entries onto another line by giving it the same indent level, plus two spaces. They will be rendered as a single list entry.

```
- Item 1 is pretty long so let's


  break it up onto two lines
- Item 2 is shorter
	- But its children can go on
	  for a while
```

- Item 1 is pretty long so let's break it up onto two lines
- Item 2 is shorter

•

But its children can go on for a while

## [Numbered lists](#Numbered_lists)

Numbered lists are similar to normal lists, but begin with periods (.) instead of dashes (-), like so:

```
. Item 1
. Item 2
. Item 3,


  with multiple lines
```

1\.

Item 1

2\.

Item 2

3\.

Item 3, with multiple lines

## [Tables](#Tables)

To begin a table, add an empty line followed by any number of rows.

Each line of a table should start with | or : to start a new row or column respectively (or space to continue the previous cell on multiple lines), followed by \[ or - or ] to align the contents to the left, center, or right, followed by a space and the contents of that cell. You may use a space instead of an alignment specifier to inherit the alignment of the same column in the previous row. Each row must have the same number of columns; empty columns are permitted.

The first character of the first row is not limited to | and has special meaning. \[ will produce a table with borders around each cell. | will produce a table with no borders. ] will produce a table with one border around the whole table.

To conclude your table, add an empty line after the last row.

```
[[ *Foo*
:- _Bar_
:-
|  *Row 1*
:  Hello
:] world!
|  *Row 2*
:  こんにちは
:  世界


   !
```

**Foo** *Bar* **Row 1** Hello world! **Row 2** こんにちは 世界 !

You may also cause columns to expand to fill the available space with &lt; (left align), = (center align), and &gt; (right align), like so:

```
[[ *Normal column*
:< Expanded column
|  *Foo*
:  Bar
```

**Normal column** Expanded column **Foo** Bar

## [Literal text](#Literal_text)

You may turn off scdoc formatting and output literal text with escape codes and literal blocks. Inserting a \\ into your source will cause the subsequent symbol to be treated as a literal and copied directly to the output. You may also make blocks of literal syntax like so:

````
```
_This formatting_ will *not* be interpreted by scdoc.
```
````

These blocks will be indented one level. Note that literal text is shown literally in the man viewer - that is, it's not a means for inserting your own roff macros into the output. Note that \\ is still interpreted within literal blocks, which for example can be useful to output \`\`\` inside of a literal block.

## [Comments](#Comments)

Lines beginning with ; and a space are ignored.

```
; This is a comment
```

# [CONVENTIONS](#CONVENTIONS)

By convention, all scdoc documents should be hard wrapped at 80 columns.

# [SEE ALSO](#SEE_ALSO)

[*scdoc*(1)](/man/os/scdoc/scdoc.1)

# [AUTHORS](#AUTHORS)

Maintained by Drew DeVault &lt;sir@cmpwn.com&gt;. Up-to-date sources can be found at https://git.sr.ht/~sircmpwn/scdoc and bugs/patches can be submitted by email to ~sircmpwn/public-inbox@lists.sr.ht.

2026-10-25

---

Document: scdoc(5) from scdoc 1.11.5-r3 (Chainguard OS)
Source: https://git.sr.ht/~sircmpwn/scdoc
