xref: /openbsd-src/share/man/man7/tbl.7 (revision f9024a7d350ef9318dbece71f159654d9c95ef73)
1*f9024a7dSschwarze.\" $OpenBSD: tbl.7,v 1.27 2022/08/28 13:51:58 schwarze Exp $
22683b1e5Sschwarze.\"
32683b1e5Sschwarze.\" Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
4773777dfSschwarze.\" Copyright (c) 2014,2015,2017,2018,2019 Ingo Schwarze <schwarze@openbsd.org>
52683b1e5Sschwarze.\"
62683b1e5Sschwarze.\" Permission to use, copy, modify, and distribute this software for any
72683b1e5Sschwarze.\" purpose with or without fee is hereby granted, provided that the above
82683b1e5Sschwarze.\" copyright notice and this permission notice appear in all copies.
92683b1e5Sschwarze.\"
102683b1e5Sschwarze.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
112683b1e5Sschwarze.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
122683b1e5Sschwarze.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
132683b1e5Sschwarze.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
142683b1e5Sschwarze.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
152683b1e5Sschwarze.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
162683b1e5Sschwarze.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
172683b1e5Sschwarze.\"
18*f9024a7dSschwarze.Dd $Mdocdate: August 28 2022 $
192683b1e5Sschwarze.Dt TBL 7
202683b1e5Sschwarze.Os
212683b1e5Sschwarze.Sh NAME
222683b1e5Sschwarze.Nm tbl
232683b1e5Sschwarze.Nd tbl language reference for mandoc
242683b1e5Sschwarze.Sh DESCRIPTION
252683b1e5SschwarzeThe
262683b1e5Sschwarze.Nm tbl
27f6c9ec70Sschwarzelanguage formats tables.
282683b1e5SschwarzeIt is used within
292683b1e5Sschwarze.Xr mdoc 7
302683b1e5Sschwarzeand
312683b1e5Sschwarze.Xr man 7
32f6c9ec70Sschwarzepages.
332683b1e5SschwarzeThis manual describes the subset of the
342683b1e5Sschwarze.Nm
352683b1e5Sschwarzelanguage accepted by the
362683b1e5Sschwarze.Xr mandoc 1
372683b1e5Sschwarzeutility.
382683b1e5Sschwarze.Pp
39f6c9ec70SschwarzeEach table is started with a
402683b1e5Sschwarze.Xr roff 7
41f6c9ec70Sschwarze.Ic \&TS
42f6c9ec70Sschwarzemacro, consist of at most one line of
43f6c9ec70Sschwarze.Sx Options ,
44f6c9ec70Sschwarzeone or more
452683b1e5Sschwarze.Sx Layout
46f6c9ec70Sschwarzelines, one or more
47f6c9ec70Sschwarze.Sx Data
48f6c9ec70Sschwarzelines, and ends with a
49f6c9ec70Sschwarze.Ic \&TE
50f6c9ec70Sschwarzemacro.
512683b1e5SschwarzeAll input must be 7-bit ASCII.
522683b1e5Sschwarze.Ss Options
53f6c9ec70SschwarzeIf the first input line of a table ends with a semicolon, it contains
54f6c9ec70Sschwarzecase-insensitive options separated by spaces, tabs, or commas.
55f6c9ec70SschwarzeOtherwise, it is interpreted as the first
562683b1e5Sschwarze.Sx Layout
57f6c9ec70Sschwarzeline.
58f6c9ec70Sschwarze.Pp
59f6c9ec70SschwarzeThe following options are available.
60f6c9ec70SschwarzeSome of them require arguments enclosed in parentheses:
612683b1e5Sschwarze.Bl -tag -width Ds
6208d5d28eSschwarze.It Cm allbox
6308d5d28eSschwarzeDraw a single-line box around each table cell.
642683b1e5Sschwarze.It Cm box
652683b1e5SschwarzeDraw a single-line box around the table.
6608d5d28eSschwarzeFor GNU compatibility, this may also be invoked with
672683b1e5Sschwarze.Cm frame .
6808d5d28eSschwarze.It Cm center
6908d5d28eSschwarzeCenter the table instead of left-adjusting it.
7008d5d28eSschwarzeFor GNU compatibility, this may also be invoked with
7108d5d28eSschwarze.Cm centre .
722683b1e5Sschwarze.It Cm decimalpoint
7308d5d28eSschwarzeUse the single-character argument as the decimal point with the
742683b1e5Sschwarze.Cm n
752683b1e5Sschwarzelayout key.
7608d5d28eSschwarzeThis is a GNU extension.
7708d5d28eSschwarze.It Cm delim
7808d5d28eSschwarzeUse the two characters of the argument as
7908d5d28eSschwarze.Xr eqn 7
8008d5d28eSschwarzedelimiters.
8108d5d28eSschwarzeCurrently unsupported.
8208d5d28eSschwarze.It Cm doublebox
8308d5d28eSschwarzeDraw a double-line box around the table.
8408d5d28eSschwarzeFor GNU compatibility, this may also be invoked with
8508d5d28eSschwarze.Cm doubleframe .
8608d5d28eSschwarze.It Cm expand
8708d5d28eSschwarzeIncrease the width of the table to the current line length.
8808d5d28eSschwarzeCurrently ignored.
8908d5d28eSschwarze.It Cm linesize
9008d5d28eSschwarzeDraw lines with the point size given by the unsigned integer argument.
9108d5d28eSschwarzeCurrently ignored.
9208d5d28eSschwarze.It Cm nokeep
9308d5d28eSschwarzeAllow page breaks within the table.
9408d5d28eSschwarzeThis is a GNU extension and currently ignored.
952683b1e5Sschwarze.It Cm nospaces
9608d5d28eSschwarzeIgnore leading and trailing spaces in data cells.
97fbc27a2fSschwarzeThis is a GNU extension.
9808d5d28eSschwarze.It Cm nowarn
9908d5d28eSschwarzeSuppress warnings about tables exceeding the current line length.
10008d5d28eSschwarzeThis is a GNU extension and currently ignored.
10108d5d28eSschwarze.It Cm tab
10208d5d28eSschwarzeUse the single-character argument as a delimiter between data cells.
103f6c9ec70SschwarzeBy default, the horizontal tabulator character is used.
1042683b1e5Sschwarze.El
1052683b1e5Sschwarze.Ss Layout
106f6c9ec70SschwarzeThe table layout follows an
1072683b1e5Sschwarze.Sx Options
108f6c9ec70Sschwarzeline or a
109f6c9ec70Sschwarze.Xr roff 7
110f6c9ec70Sschwarze.Ic \&TS
111f6c9ec70Sschwarzeor
112f6c9ec70Sschwarze.Ic \&T&
113f6c9ec70Sschwarzemacro.
114f6c9ec70SschwarzeEach layout line specifies how one line of
115f6c9ec70Sschwarze.Sx Data
116f6c9ec70Sschwarzeis formatted.
117f6c9ec70SschwarzeThe last layout line ends with a full stop.
118f6c9ec70SschwarzeIt also applies to all remaining data lines.
119f6c9ec70SschwarzeMultiple layout lines can be joined by commas on a single physical
120f6c9ec70Sschwarzeinput line.
121f6c9ec70Sschwarze.Pp
122f6c9ec70SschwarzeEach layout line consists of one or more layout cell specifications,
123f6c9ec70Sschwarzeoptionally separated by whitespace.
124f6c9ec70SschwarzeThe following case-insensitive key characters start a new cell
125f6c9ec70Sschwarzespecification:
126fd1e7ec9Sschwarze.Bl -tag -width 2n
1272683b1e5Sschwarze.It Cm c
128f6c9ec70SschwarzeCenter the string in this cell.
1292683b1e5Sschwarze.It Cm r
130f6c9ec70SschwarzeRight-justify the string in this cell.
1312683b1e5Sschwarze.It Cm l
132f6c9ec70SschwarzeLeft-justify the string in this cell.
1332683b1e5Sschwarze.It Cm n
1342683b1e5SschwarzeJustify a number around its last decimal point.
135f6c9ec70SschwarzeIf no decimal point is found in the number,
136f6c9ec70Sschwarzeit is assumed to trail the number.
1372683b1e5Sschwarze.It Cm s
138f24d0cbbSschwarzeHorizontally span columns from the last
139f6c9ec70Sschwarze.Pf non- Cm s
140f6c9ec70Sschwarzelayout cell.
141f6c9ec70SschwarzeIt is an error if a column span follows a
142f6c9ec70Sschwarze.Cm _
143339c805cSschwarzeor
144f6c9ec70Sschwarze.Cm =
145f6c9ec70Sschwarzecell, or comes first on a layout line.
146f6c9ec70SschwarzeThe combined cell as a whole consumes only one cell
147f6c9ec70Sschwarzeof the corresponding data line.
1482683b1e5Sschwarze.It Cm a
149f6c9ec70SschwarzeLeft-justify a string and pad with one space.
1507a5a8f14Sschwarze.It Cm \(ha
151f24d0cbbSschwarzeVertically span rows from the last
1527a5a8f14Sschwarze.Pf non- Cm \(ha
153f6c9ec70Sschwarzelayout cell.
154f6c9ec70SschwarzeIt is an error to invoke a vertical span on the first layout line.
155f6c9ec70SschwarzeUnlike a horizontal span, a vertical span consumes a data cell
156f6c9ec70Sschwarzeand discards the content.
157f6c9ec70Sschwarze.It Cm _
158f6c9ec70SschwarzeDraw a single horizontal line in this cell.
159f6c9ec70SschwarzeThis consumes a data cell and discards the content.
160f6c9ec70SschwarzeIt may also be invoked with
161f6c9ec70Sschwarze.Cm \- .
1622683b1e5Sschwarze.It Cm =
163f6c9ec70SschwarzeDraw a double horizontal line in this cell.
164f6c9ec70SschwarzeThis consumes a data cell and discards the content.
1652683b1e5Sschwarze.El
1662683b1e5Sschwarze.Pp
167f6c9ec70SschwarzeEach cell key may be followed by zero or more of the following
168f6c9ec70Sschwarzecase-insensitive modifiers:
169fd1e7ec9Sschwarze.Bl -tag -width 2n
170fd1e7ec9Sschwarze.It Cm b
171f6c9ec70SschwarzeUse a bold font for the contents of this cell.
172bba1fa43Sschwarze.It Cm d
173f6c9ec70SschwarzeMove content down to the last row of this vertical span.
174bba1fa43SschwarzeCurrently ignored.
17546fa2066Sschwarze.It Cm e
17646fa2066SschwarzeMake this column wider to match the maximum width
17746fa2066Sschwarzeof any other column also having the
17846fa2066Sschwarze.Cm e
17946fa2066Sschwarzemodifier.
180fd1e7ec9Sschwarze.It Cm f
1817d063611SschwarzeThe next one or two characters select the font to use for this cell.
1827d063611SschwarzeOne-character font names must be followed by a blank or period.
183fd1e7ec9SschwarzeSee the
184fd1e7ec9Sschwarze.Xr roff 7
1857d063611Sschwarzemanual for supported font names.
186fd1e7ec9Sschwarze.It Cm i
187f6c9ec70SschwarzeUse an italic font for the contents of this cell.
188bba1fa43Sschwarze.It Cm m
189bba1fa43SschwarzeSpecify a cell start macro.
190bba1fa43SschwarzeThis is a GNU extension and currently unsupported.
191bba1fa43Sschwarze.It Cm p
192bba1fa43SschwarzeSet the point size to the following unsigned argument,
193bba1fa43Sschwarzeor change it by the following signed argument.
194bba1fa43SschwarzeCurrently ignored.
195bba1fa43Sschwarze.It Cm v
196bba1fa43SschwarzeSet the vertical line spacing to the following unsigned argument,
197bba1fa43Sschwarzeor change it by the following signed argument.
198bba1fa43SschwarzeCurrently ignored.
199bba1fa43Sschwarze.It Cm t
200f6c9ec70SschwarzeDo not vertically center content in this vertical span,
201f6c9ec70Sschwarzeleave it in the top row.
202bba1fa43SschwarzeCurrently ignored.
203bba1fa43Sschwarze.It Cm u
204f6c9ec70SschwarzeMove cell content up by half a table row.
205bba1fa43SschwarzeCurrently ignored.
206bba1fa43Sschwarze.It Cm w
207f6c9ec70SschwarzeSpecify a minimum column width.
20846fa2066Sschwarze.It Cm x
20946fa2066SschwarzeAfter determining the width of all other columns, distribute the
21046fa2066Sschwarzerest of the line length among all columns having the
21146fa2066Sschwarze.Cm x
21246fa2066Sschwarzemodifier.
21346fa2066Sschwarze.It Cm z
21446fa2066SschwarzeDo not use this cell for determining the width of this column.
215f6c9ec70Sschwarze.It Cm \&|
216f6c9ec70SschwarzeDraw a single vertical line to the right of this cell.
217f6c9ec70Sschwarze.It Cm ||
218f6c9ec70SschwarzeDraw a double vertical line to the right of this cell.
219fd1e7ec9Sschwarze.El
220fd1e7ec9Sschwarze.Pp
221f6c9ec70SschwarzeIf a modifier consists of decimal digits,
222f6c9ec70Sschwarzeit specifies a minimum spacing in units of
223f6c9ec70Sschwarze.Cm n
224f6c9ec70Sschwarzebetween this column and the next column to the right.
225f6c9ec70SschwarzeThe default is 3.
226f6c9ec70SschwarzeIf there is a vertical line, it is drawn inside the spacing.
2272683b1e5Sschwarze.Ss Data
228f6c9ec70SschwarzeThe data section follows the last
229f6c9ec70Sschwarze.Sx Layout
230f6c9ec70Sschwarzeline.
231f6c9ec70SschwarzeEach data line consists of one or more data cells, delimited by
2322683b1e5Sschwarze.Cm tab
233f6c9ec70Sschwarzecharacters.
234f6c9ec70Sschwarze.Pp
2357a5a8f14SschwarzeIf a data cell contains only the two bytes
2367a5a8f14Sschwarze.Ql \e\(ha ,
2377a5a8f14Sschwarzethe cell above spans to this row, as if the layout specification
2387a5a8f14Sschwarzeof this cell were
2397a5a8f14Sschwarze.Cm \(ha .
2407a5a8f14Sschwarze.Pp
2417a5a8f14SschwarzeIf a data cell contains only the single character
242f6c9ec70Sschwarze.Ql _
2432683b1e5Sschwarzeor
244f6c9ec70Sschwarze.Ql = ,
245f6c9ec70Sschwarzea single or double horizontal line is drawn across the cell,
246f6c9ec70Sschwarzejoining its neighbours.
2476d0a8a7cSbentleyIf a data cell contains only the two character sequence
248f6c9ec70Sschwarze.Ql \e_
2492683b1e5Sschwarzeor
250f6c9ec70Sschwarze.Ql \e= ,
251f6c9ec70Sschwarzea single or double horizontal line is drawn inside the cell,
252f6c9ec70Sschwarzenot joining its neighbours.
253f6c9ec70SschwarzeIf a data line contains nothing but the single character
254f6c9ec70Sschwarze.Ql _
255f6c9ec70Sschwarzeor
256f6c9ec70Sschwarze.Ql = ,
257f6c9ec70Sschwarzea horizontal line across the whole table is inserted
258f6c9ec70Sschwarzewithout consuming a layout row.
259f6c9ec70Sschwarze.Pp
260f6c9ec70SschwarzeIn place of any data cell, a text block can be used.
261f6c9ec70SschwarzeIt starts with
262f6c9ec70Sschwarze.Ic \&T{
263f6c9ec70Sschwarzeat the end of a physical input line.
264f6c9ec70SschwarzeInput line breaks inside the text block
265f6c9ec70Sschwarzeneither end the text block nor its data cell.
266f6c9ec70SschwarzeIt only ends if
267f6c9ec70Sschwarze.Ic \&T}
268f6c9ec70Sschwarzeoccurs at the beginning of a physical input line and is followed
269f6c9ec70Sschwarzeby an end-of-cell indicator.
270f6c9ec70SschwarzeIf the
271f6c9ec70Sschwarze.Ic \&T}
272f6c9ec70Sschwarzeis followed by the end of the physical input line, the text block,
273f6c9ec70Sschwarzethe data cell, and the data line ends at this point.
274f6c9ec70SschwarzeIf the
275f6c9ec70Sschwarze.Ic \&T}
276f6c9ec70Sschwarzeis followed by the
277f6c9ec70Sschwarze.Cm tab
278f6c9ec70Sschwarzecharacter, only the text block and the data cell end,
279f6c9ec70Sschwarzebut the data line continues with the data cell following the
280f6c9ec70Sschwarze.Cm tab
281f6c9ec70Sschwarzecharacter.
282f6c9ec70SschwarzeIf
283f6c9ec70Sschwarze.Ic \&T}
284f6c9ec70Sschwarzeis followed by any other character, it does not end the text block,
285f6c9ec70Sschwarzewhich instead continues to the following physical input line.
286f6c9ec70Sschwarze.Sh EXAMPLES
287f6c9ec70SschwarzeString justification and font selection:
288f6c9ec70Sschwarze.Bd -literal -offset indent
289f6c9ec70Sschwarze\&.TS
290f6c9ec70Sschwarzerb c  lb
291f6c9ec70Sschwarzer  ci l.
292f6c9ec70Sschwarzer	center	l
293f6c9ec70Sschwarzeri	ce	le
294f6c9ec70Sschwarzeright	c	left
295f6c9ec70Sschwarze\&.TE
296f6c9ec70Sschwarze.Ed
297f6c9ec70Sschwarze.Bd -filled -offset indent
298f6c9ec70Sschwarze.TS
299f6c9ec70Sschwarzerb c  lb
300f6c9ec70Sschwarzer  ci l.
301f6c9ec70Sschwarzer	center	l
302f6c9ec70Sschwarzeri	ce	le
303f6c9ec70Sschwarzeright	c	left
304f6c9ec70Sschwarze.TE
305f6c9ec70Sschwarze.Ed
306f6c9ec70Sschwarze.Pp
307f6c9ec70SschwarzeSome ports in
308f6c9ec70Sschwarze.Ox 6.1
309f6c9ec70Sschwarzeto show number alignment and line drawing:
310f6c9ec70Sschwarze.Bd -literal -offset indent
311f6c9ec70Sschwarze\&.TS
312f6c9ec70Sschwarzebox tab(:);
313f6c9ec70Sschwarzer| l
314f6c9ec70Sschwarzer  n.
315f6c9ec70Sschwarzesoftware:version
316f6c9ec70Sschwarze_
317f6c9ec70SschwarzeAFL:2.39b
318f6c9ec70SschwarzeMutt:1.8.0
319f6c9ec70SschwarzeRuby:1.8.7.374
320f6c9ec70SschwarzeTeX Live:2015
321f6c9ec70Sschwarze\&.TE
322f6c9ec70Sschwarze.Ed
323f6c9ec70Sschwarze.Bd -filled -offset indent
324f6c9ec70Sschwarze.TS
325f6c9ec70Sschwarzebox tab(:);
326f6c9ec70Sschwarzer| l
327f6c9ec70Sschwarzer  n.
328f6c9ec70Sschwarzesoftware:version
329f6c9ec70Sschwarze_
330f6c9ec70SschwarzeAFL:2.39b
331f6c9ec70SschwarzeMutt:1.8.0
332f6c9ec70SschwarzeRuby:1.8.7.374
333f6c9ec70SschwarzeTeX Live:2015
334f6c9ec70Sschwarze.TE
335f6c9ec70Sschwarze.Ed
336*f9024a7dSschwarze.Pp
337f6c9ec70SschwarzeSpans and skipping width calculations:
338f6c9ec70Sschwarze.Bd -literal -offset indent
339f6c9ec70Sschwarze\&.TS
340f6c9ec70Sschwarzebox tab(:);
341f6c9ec70Sschwarzelz  s | rt
3427a5a8f14Sschwarzelt| cb| \(ha
3437a5a8f14Sschwarze\(ha | rz  s.
344f6c9ec70Sschwarzeleft:r
345f6c9ec70Sschwarzel:center:
346f6c9ec70Sschwarze:right
347f6c9ec70Sschwarze\&.TE
348f6c9ec70Sschwarze.Ed
349f6c9ec70Sschwarze.Bd -filled -offset indent
350f6c9ec70Sschwarze.TS
351f6c9ec70Sschwarzebox tab(:);
352f6c9ec70Sschwarzelz  s | rt
353f6c9ec70Sschwarzelt| cb| ^
354f6c9ec70Sschwarze^ | rz  s.
355f6c9ec70Sschwarzeleft:r
356f6c9ec70Sschwarzel:center:
357f6c9ec70Sschwarze:right
358f6c9ec70Sschwarze.TE
359f6c9ec70Sschwarze.Ed
360*f9024a7dSschwarze.Pp
361f6c9ec70SschwarzeText blocks, specifying spacings and specifying and equalizing
362f6c9ec70Sschwarzecolumn widths, putting lines into individual cells, and overriding
363f6c9ec70Sschwarze.Cm allbox :
364f6c9ec70Sschwarze.Bd -literal -offset indent
365f6c9ec70Sschwarze\&.TS
366f6c9ec70Sschwarzeallbox tab(:);
367f6c9ec70Sschwarzele le||7 lw10.
368f6c9ec70SschwarzeThe fourth line:_:line 1
369f6c9ec70Sschwarzeof this column:=:line 2
3702e063971Sschwarzedetermines:\e_:line 3
371f6c9ec70Sschwarzethe column width.:T{
372f6c9ec70SschwarzeThis text is too wide to fit into a column of width 17.
373f6c9ec70SschwarzeT}:line 4
374f6c9ec70SschwarzeT{
375f6c9ec70SschwarzeNo break here.
376f6c9ec70SschwarzeT}::line 5
377f6c9ec70Sschwarze\&.TE
378f6c9ec70Sschwarze.Ed
379f6c9ec70Sschwarze.Bd -filled -offset indent
380f6c9ec70Sschwarze.TS
381f6c9ec70Sschwarzeallbox tab(:);
382f6c9ec70Sschwarzele le||7 lw10.
383f6c9ec70SschwarzeThe fourth line:_:line 1
384f6c9ec70Sschwarzeof this column:=:line 2
385f6c9ec70Sschwarzedetermines:\_:line 3
386f6c9ec70Sschwarzethe column width.:T{
387f6c9ec70SschwarzeThis text is too wide to fit into a column of width 17.
388f6c9ec70SschwarzeT}:line 4
389f6c9ec70SschwarzeT{
390f6c9ec70SschwarzeNo break here.
391f6c9ec70SschwarzeT}::line 5
392f6c9ec70Sschwarze.TE
393f6c9ec70Sschwarze.Ed
394*f9024a7dSschwarze.Pp
395f6c9ec70SschwarzeThese examples were constructed to demonstrate many
396f6c9ec70Sschwarze.Nm
397f6c9ec70Sschwarzefeatures in a compact way.
3982a8cd46fSteduIn real manual pages, keep tables as simple as possible.
3992a8cd46fSteduThey usually look better, are less fragile, and are more portable.
4002683b1e5Sschwarze.Sh COMPATIBILITY
4012683b1e5SschwarzeThe
4022683b1e5Sschwarze.Xr mandoc 1
403a497dac9Sschwarzeimplementation of
404a497dac9Sschwarze.Nm
405a497dac9Sschwarzedoesn't support
406a497dac9Sschwarze.Xr mdoc 7
407a497dac9Sschwarzeand
408a497dac9Sschwarze.Xr man 7
409a497dac9Sschwarzemacros and
410a497dac9Sschwarze.Xr eqn 7
411a497dac9Sschwarzeequations inside tables.
4122683b1e5Sschwarze.Sh SEE ALSO
4132683b1e5Sschwarze.Xr mandoc 1 ,
4142683b1e5Sschwarze.Xr man 7 ,
4152683b1e5Sschwarze.Xr mandoc_char 7 ,
4162683b1e5Sschwarze.Xr mdoc 7 ,
4172683b1e5Sschwarze.Xr roff 7
4182683b1e5Sschwarze.Rs
4192683b1e5Sschwarze.%A M. E. Lesk
4202683b1e5Sschwarze.%T Tbl \(em A Program to Format Tables
4212683b1e5Sschwarze.%D June 11, 1976
4222683b1e5Sschwarze.Re
4232683b1e5Sschwarze.Sh HISTORY
4242683b1e5SschwarzeThe tbl utility, a preprocessor for troff, was originally written by M.
4252683b1e5SschwarzeE. Lesk at Bell Labs in 1975.
4262683b1e5SschwarzeThe GNU reimplementation of tbl, part of the groff package, was released
4272683b1e5Sschwarzein 1990 by James Clark.
4282683b1e5SschwarzeA standalone tbl implementation was written by Kristaps Dzonsons in
4292683b1e5Sschwarze2010.
430f273b081SschwarzeThis formed the basis of the implementation that first appeared in
431f273b081Sschwarze.Ox 4.9
432f273b081Sschwarzeas a part of the
4332683b1e5Sschwarze.Xr mandoc 1
4342683b1e5Sschwarzeutility.
4352683b1e5Sschwarze.Sh AUTHORS
4366d10740dSschwarzeThis
4372683b1e5Sschwarze.Nm
4382683b1e5Sschwarzereference was written by
439f6c9ec70Sschwarze.An Kristaps Dzonsons Aq Mt kristaps@bsd.lv
440f6c9ec70Sschwarzeand
441f6c9ec70Sschwarze.An Ingo Schwarze Aq Mt schwarze@openbsd.org .
442773777dfSschwarze.Sh BUGS
443773777dfSschwarzeIn
444773777dfSschwarze.Fl T
445773777dfSschwarze.Cm utf8
446773777dfSschwarzeoutput mode, heavy lines are drawn instead of double lines.
447773777dfSschwarzeThis cannot be improved because the Unicode standard only provides
448773777dfSschwarzean incomplete set of box drawing characters with double lines,
449773777dfSschwarzewhereas it provides a full set of box drawing characters
450773777dfSschwarzewith heavy lines.
451773777dfSschwarzeIt is unlikely this can be improved in the future because the box
452773777dfSschwarzedrawing characters are already marked in Unicode as characters
453773777dfSschwarzeintended only for backward compatibility with legacy systems,
454773777dfSschwarzeand their use is not encouraged.
455773777dfSschwarzeSo it seems unlikely that the missing ones might get added in the future.
456