---
name: "lowdown_roff_new"
section: "3"
platform: "linux"
package: "lowdown"
version: "3.2.1-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/lowdown_roff_new"
---

# lowdown\_roff\_new(3)

allocate a roff renderer for lowdown documents

## NAME

**lowdown\_roff\_new** – allocate a roff renderer for lowdown documents

## LIBRARY

library “liblowdown”

## SYNOPSIS

**#include \<sys/queue.h\>**

**#include \<stdio.h\>**

**#include \<lowdown.h\>**

*void* *\**\

**lowdown\_roff\_new**(*const struct lowdown\_opts \*opts*);

## DESCRIPTION

Allocates a roff renderer using *opts-\>oflags* and *opts-\>type*, or zero and LOWDODN\_MS, respectively, if *opts* is NULL. These are documented in [lowdown(3)](/lowdown/3.md). The returned pointer may be used with multiple invocations of [lowdown\_roff\_rndr(3)](/lowdown_roff_rndr/3.md) and must be freed with [lowdown\_roff\_free(3)](/lowdown_roff_free/3.md).

The bits recognised in *opts-\>oflags* are LOWDOWN\_ROFF\_ENDNOTES, LOWDOWN\_ROFF\_GROFF, LOWDOWN\_NOLINK, LOWDOWN\_NORELLINK, LOWDOWN\_ROFF\_NUMBERED, LOWDOWN\_SHORTLINK, LOWDOWN\_SKIP\_HTML, LOWDOWN\_ROFF\_MANPAGE, and LOWDOWN\_STANDALONE.

The values recognised in *opts-\>type* are LOWDOWN\_MAN, LOWDOWN\_MDOC, and LOWDODN\_MS: anything else triggers LOWDODN\_MS.

If LOWDOWN\_ROFF\_GROFF is set in LOWDOWN\_MAN mode, macros from the *man-ext* package as well as the original *man* are used in output. These are supported by both groff and mandoc. If in LOWDODN\_MS mode, GNU extensions to *ms* are used along with *mspdf*. These are only supported by groff.

LOWDOWN\_ROFF\_ENDNOTES delays printing of footnotes until the end of a document. Does not affect LOWDOWN\_MAN and LOWDOWN\_MDOC documents, which structurally only support endnotes.

The allocated rendered will use constant-width fonts "CR" (regular), "CB" (bold), "CI" (italic), and "CBI" (bold-italic). Override the defaults with variables in the *struct lowdown\_opts\_nroff* structure.

This function used to be called **lowdown\_nroff\_new**().

## RETURN VALUES

Returns a pointer to the renderer or NULL on memory failure. The returned pointer must be freed with [lowdown\_roff\_free(3)](/lowdown_roff_free/3.md).

## EXAMPLES

The following parses *b* of length *bsz* and outputs in [groff\_ms(7)](/groff_ms/7.md) format.

```
struct lowdown_buf *out;
struct lowdown_doc *doc;
struct lowdown_node *n;
void *rndr;
if ((doc = lowdown_doc_new(NULL)) == NULL)
	err(1, NULL);
if ((n = lowdown_doc_parse(doc, NULL, b, bsz, NULL)) == NULL)
	err(1, NULL);
if ((out = lowdown_buf_new(256)) == NULL)
	err(1, NULL);
if ((rndr = lowdown_roff_new(NULL)) == NULL)
	err(1, NULL);
if (!lowdown_roff_rndr(out, rndr, n))
	err(1, NULL);
fwrite(out->data, 1, out->size, stdout);
lowdown_roff_free(rndr);
lowdown_buf_free(out);
lowdown_node_free(n);
lowdown_doc_free(doc);
```

## SEE ALSO

[lowdown(3)](/lowdown/3.md), [lowdown\_roff\_free(3)](/lowdown_roff_free/3.md), [lowdown\_roff\_rndr(3)](/lowdown_roff_rndr/3.md),

This uses both the original troff *man* macros for Version 7 AT&T UNIX, defined in [man(7)](/man/7.md), and the *man-ext* groff extensions. Both are implemented in mandoc.

The *mdoc* macros are defined in [mdoc(7)](/mdoc/7.md).

The troff *ms* macros are defined in [groff\_ms(7)](/groff_ms/7.md), with the *mspdf* groff extensions described in "Portable Document Format Publishing with GNU Troff" by Keith Marshall. Neither are implemented in mandoc.

## CAVEATS

The default constant-width fonts may not available for the formatter's output device (for example, the terminal). In this case, the formatter may raise a warning and ignore the font.
