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