Changes

Jump to navigation Jump to search
6,936 bytes added ,  26 January
m
Minor grammatical corrections.
< [[Tables Overview]]| [[Tabulate]] | [[Tables]] >
This is ConTeXts ConTeXt's oldest table module. It uses the same formatting as [[tabulateTabulate]]. (See see [[Tables Overview]] for an overview).)
This mode is based on Michael Wichura's TaBlE package for Plain TeX. The official manual for it is commercial (18 USD), see [http://www.pctex.com/books.html PCTeX] -- but note that the TaBlE manual only talks about the original syntax, which does not use {{cmd|NC}}, {{cmd|HL}}, cum suis.
 
The only ConTeXt docs are in [[manual:ms-cb-en.pdf|ConTeXt - an excursion]]. There are also two introductory articles in TUGboat [http://tug.org/TUGboat/Articles/tb28-3/tb90mahajan.pdf ConTeXt basics for users: Table macros] [http://www.tug.org/TUGboat/Articles/tb29-1/tb91mahajan.pdf Table macros II] by Aditya Mahajan (2007 and 2008).
 
== Basic Commands ==
 
<table cols="2"><tr valign="top"><td>
<texcode>
\placetable[here][tab:sample]{sample table}
\starttable[|l|l|]
\HL
\NC Command \NC VL Meaning \SR % or \NC\SRAR
\HL
\NC \tex{NC} \NC VL next column \NC\FRAR\NC \tex{HL} \NC VL horizontal line \NC\MRAR\NC \tex{VL} \NC VL vertical line \NC\MRAR\NC \tex{NR} \NC VL next row \NC\LR
\HL
\NC \tex{SR} \NC VL single row \NC\FRAR\NC \tex{FR} \NC VL first row \NC\MRAR\NC \tex{MR} \NC VL middle row \NC\MRAR\NC \tex{LR} \NC VL last row \LR % or \NC\LRAR
\HL
\NC \tex{AR} \NC VL automatic row \SR % or \NC\SRAR
\HL
\stoptable
</texcode>
</td><td>
<context>
\switchtobodyfont[ss, 8pt]
\starttable[|l|l|]
\HL
\NC Command \VL Meaning \SR % or \NC\AR
\HL
\NC \tex{NC} \VL next column \AR
\NC \tex{HL} \VL horizontal line \AR
\NC \tex{VL} \VL vertical line \AR
\NC \tex{NR} \VL next row \LR
\HL
\NC \tex{SR} \VL single row \AR
\NC \tex{FR} \VL first row \AR
\NC \tex{MR} \VL middle row \AR
\NC \tex{LR} \VL last row \LR % or \NC\AR
\HL
\NC \tex{AR} \VL automatic row \SR % or \NC\AR
\HL
\stoptable
</context>
</td></tr></table>
 
* You get vertical lines (rules), if you use {{cmd|VL}} instead of {{cmd|NC}}.
* Better use {{cmd|SR}}, {{cmd|FR}}, {{cmd|MR}}, {{cmd|LR}} instead of {{cmd|NR}}.
* You can also use {{cmd|AR}} instead of {{cmd|SR}}, {{cmd|FR}}, {{cmd|MR}} and {{cmd|LR}} (AR for automatic row).
* You can leave out the {{cmd|NC}} before the "row" command, but not if you use {{cmd|AR}} in a last or single row (see example).
* You can influence the table with {{cmd|setuptables}}.
 
==Column Definition==
Better use <The table is defined by the template enclosed in square brackets after {{cmd>SR|starttable}}. The template has the form</cmdbr>, <cmdtt>FR|keys for the first column|keys for the second column|...|keys for the last column|</cmdtt>, <cmd>MR.</cmdbr>, Please note that each column is surrounded by <cmdtt>LR|</cmd> instead of <cmd>NR</cmdtt>signs. These are necessary. You The formatting keys for each column can also use <cmd>AR</cmd> instead be a choice of <cmd>SR</cmd>, <cmd>FR</cmd>, <cmd>MR</cmd> and <cmd>LR</cmd> (AR for automatic row).
If you need information about {| class="wikitable" ! Key ! Meaning |- ! colspan="2" | Primitive Keys |- | <code>a{<cmdem>placetabletokens</cmdem>}</code> | Adds <code><em>tokens</em></code> <em> look after <cmd/em> the column content |- |- | <code>b{<em>tokens</em>}</code> | Adds <code><em>tokens</em></code> <em>before</em> the column content |- | <code>placefloat\{</cmdcode> | Enclose the column in braces (grouping) |- | <code>*{<em>n</em>}{<em>keys</em>}</code> | Equivalent to repeating the manualformatting keys <code><i>keys</i></code> <code><i>n</i></code> times |- !colspan="2" | Positioning Keys |-If you'd like | <code>\LeftGlue</code> | Specifies the left glue to leave out be used before the table'column |- | <code>\RightGlue</code> | Specifies the right glue to be used after the column |- | <code>l</code> | left-aligned column |- | <code>c</code> | centered column |- | <code>r</code> | right-aligned column |- | <code>p(<em>width</em>)</code> | Set each cell as a paragraph |- | <code>s caption, you can't simply leave (<em>width</em>)</code> | Specify the inter-column width |- | <code>w</code> | Set minimum column width |- | <code>k</code> | Insert a kern both left and right of the column |- | <code>i</code> | Add a kern to the left of the column |- | <code>j</code> | Add a kern to the right of the braces empty but must write column |- ! colspan="2" | Numeric and Math Item Keys |- | <code>n</code> | Numeric item not in math mode |- | <code>N</code> | Numeric item in math mode |- | <code>m</code> | Each cell is in (inline) math mode. Equivalent to <code>b$ a$</code> |- | <code>M</code> | Each cell is in display math mode. Equivalent to <code>\{b{$\displaystyle}a$}</code> |- | <code>\m</code> | Equivalent to 1 <code>l b{{}}m</code> |- | <code>\M</code> | Equivalent to 1 <code>l b{{}}M</code> |- ! colspan="2" | Style Keys |- | <code>f\<em>command</em></code> | Set font according to following <code><em>command</em></code> |- | <code>B</code> | Bold. Equivalent to <code>f\bf</code> |- | <code>I</code> | Italic. Equivalent to <code>f\it</code> |- | <code>S</code> | Slanted. Equivalent to <code>f\sl</code> |- | <code>R</code> | Roman. Equivalent to <code>f\rm</code> |- | <code>T</code> | Teletype. Equivalent to <code>f\tt</code>none |- | <code>C</ttcode> | Color. Use it in combination with <code>\{</code> (e.g. <code>\{C{<em>red</em>}</code>) |- !colspan="2" | Tabskip Keys |- | <code>s</code> | Set the tabskip to the right of this column and of all following columns up to the next <code>s</code> or <code>o</code> key |- | <code>o</code> | Set the tabskip to the right of this column only |- |}
This mode is based on Michael Wichura's TaBlE package for PlainTeX. The official manual for it is commercial === Column definition examples===; <code>|l|</code> : a left aligned column, as wide as necessary; <code>|lw(about 40 USD2cm), see [http|</code> :a left aligned column of at least 2 cm width; <code>|p(2cm)|</code> : a centered(!) paragraph of 2 cm width; <code>|lp(.5\textwidth)|</wwwcode> : a left aligned paragraph of specified width; <code>|rp(.pctex.com PCTeX] -- but note that the TaBlE manual only talks about the original syntax, which does not use 5\textwidth)|</code> : a right aligned paragraph of specified width; <cmdcode>NC|cp(.5\textwidth)|</cmdcode>, : a center aligned paragraph of specified width; <cmdcode>HL|xp(.5\textwidth)|</cmdcode> cum suis.: a justified paragraph of specified width
The table is defined by the template enclosed in square brackets after <cmd>starttable</cmd>. The template has the form<tt>{{todo|keys for the first add more examples of column|keys for the second column|...|keys for the last column|</tt>. Please note that the each column is surrounded by <tt>|</tt> signs. These are a necessary. The formatting keys for each column can be a choice ofdefinitions}}{|! Key || Meaning|-! colspan="2" | Primitive keys=Column Spans==|-|a{<It's possible to create columnspans (i>tokens</i>} || Adds <i>tokens</i> '''after''' .e., cells that span more than one column) with the column contentcommand {{cmd|-use|b{<i>tokensN</i>} || Adds <i>tokens</i> }} where '''before'N'' is the column content|-|\{ || Enclose number of columns spanned by the column in braces|-|*cell. It's often necessary to use {<i>n</i>}{<i>keys</i>} cmd|ReFormat| Equivalent to repeating the formatting keys [<i>new keys</i> <i>n</i> times|-! colspan="2" | Positioning keys|-|\LeftGlue || Specifies the left glue ]{}}} to be used before the column|-|\RightGlue || Specifies the right glue reformat this specific cell according to be used after the column''new keys''.|-|l || Left-align the column|-|c || Center the column|-|r || Right-align the column|-|k || Insert a kern both left and right of the column|-|i || Add a kern to the left of the column|-|j || Add a kern to the right of the column|-! colspan<table cols="2" | Numeric item keys|-|n || Numeric item not in math mode|-|N || Numeric item in math mode|-! colspan><tr valign="2top" | Attribute keys><td>|-<texcode>\starttable[s(0pt)|m |ls(10pt)| Each cell is in rs(inline0pt) math mode. Equivalent to <tt>b$ a$</tt>|]|-\HL|M || Each cell is in display math mode. Equivalent to <tt>\NC \use{b2}\ReFormat[cB]{$Spanning head} \displaystyle}a$</tt>SR|-\HL|\m || Equivalent to <tt>l bNC \Use{2}[cB]{Spanning head}}m</tt>\SR % slightly shorted\HL\NC left text \VL right column text \NC \AR|-\NC new row \VL new row \NC \AR|\M || Equivalent to <tt>NC left text \VL \ReFormat[l b{]{reformatted}}M</tt>\NC \AR|-\HL|f || Set font according to following <cmd>command</cmd>\NC \use{2}Spanning entry \SR |-\HL|B || Bold. Equivalent to <tt>f\bfstoptable</tttexcode>|-|I || Italic. Equivalent to <tt/td>f\it</tttd>|-|S || Slanted. Equivalent to <ttcontext>f\sl</tt>setuppapersize[A5]\starttable[s(0pt)|-ls(10pt)|R rs(0pt)|| Roman. Equivalent to <tt>f]\rm</tt>HL|-\NC \use{2}\ReFormat[cB]{Spanning head} \SR|T || Teletype. Equivalent to <tt>f\tt</tt>HL|-\NC \Use{2}[cB]{Spanning head} \SR|p || Set each cell as a paragraph\HL|-! colspan="2" | Minimum \NC left text \VL right column width keytext \NC \AR|-\NC new row \VL new row \NC \AR|w || Set minimum column width\NC left text \VL \ReFormat[l]{reformatted} \NC \AR|-\HL! colspan="\NC \use{2" | Tabskip keys}Spanning entry \SR \HL|-\stoptable|s || Set the tabskip to the right of this column and of all following columns until the next <tt/context>s</tttd> or <tt/tr>o</tttable> key|-|o || Set the tabskip to the right of this column only.|}
It's possible to create columnspans (i.e. cells that span more than one column) with the command <{{cmd>use[<i>N</i>]</cmd> where <i>N</i> is the number of columns spanned by the cell. It's often necessary to use <cmd>|ReFormat[<i>new keys</i>]</}} can be abbreviated {{cmd> to reformat this specific cell according to the <i>new keys</i>|REF}} for brevity.)
The only ConTeXt docs about it are in [http://www.pragma-ade.com/general/manuals/ms-cb-en.pdf ms-cb-en.pdf].== Row Spans==
The sample looks like this:It's also possible to create rowspans (i.e. cells that span more than one row) with the command {{cmd|Raise|(<i>dimen</i>){<i>content</i>}}} or {{cmd|Lower|(<i>dimen</i>){</i>content</i>}}} that raise or lower ''content'' by ''dimen''.
<table cols="2"><tr valign="top"><td>
<texcode>
\starttable[|c|c|]
\HL
\VL \Lower(.5\lineheight){a} \VL b \VL \AR
\DC \DL[1] \DR
\VL \VL c \VL \AR
\HL
\stoptable
</texcode>
</td><td>
<context>
\placetablestarttable[here][tab:sample|c|c|]\HL\VL \Lower(.5\lineheight){sample tablea}\VL b \VL \AR\starttableDC \DL[|l|l|1]\DR\VL \VL c \VL \AR
\HL
\NC Command stoptable</context></td></tr></table> ({{cmd|Lower|(.5\NC Meaning lineheight){a}}} can be abbreviated {{cmd|LOW|{a}}} for brevity.) An alternative means of spanning rows by a tall object makes use of a bit of TeX magic:{{cmd|smash|{tall object}}}: <table cols="2"><tr valign="top"><td><texcode>\NC\SRstarttable[|M|c|]
\HL
\NC VL \VL a \VL \tex{NC} AR\NC next column DC \NCDL[1] \FRDR\NC VL \texsmash{HL\sum_0^N} \NC horizontal line VL b \NCVL \MRAR\NC DC \tex{VL} \NC vertical line DL[1] \NC\MRDR\NC VL \tex{NR} VL c \NC next row \NCVL \LRAR
\HL
\NC \tex{SR} \NC single row \NC\FRstoptable</texcode>\NC \tex{FR} \NC first row \NC\MR</td><td>\NC \tex{MR} \NC middle row \NC\MR<context>\NC \tex{LR} \NC last row \NC\LRstarttable[|M|c|]
\HL
\NC VL \texVL a \VL \AR\DC \DL[1] \DR\VL \smash{\sum_0^N} \VL b \VL \AR} \DC \DL[1] \DR\VL \NC automatic row VL c \NCVL \SRAR
\HL
\stoptable
</context>
</td></tr></table>
 
==Table as Floating Object==
 
<texcode>
\placetable[here][tab:sample]{sample table}{
\starttable ...
\stoptable
}
</texcode>
 
* See [[Floating Objects]] in general.
* If you need information about {{cmd|placetable}} look after {{cmd|placefloat}} in the manual or texshow!
* If you do not want a caption for your table, to get rid of it altogether you have to add "none" to settings and then leave the braces empty; if you only leave the braces empty, your table will still be numbered ("Table 1" etc.).
<texcode>\placetable[here,none][tab:sample]{}{\starttable ...\stoptable}</texcode> ==Background Colors== Note: Adding color to tables using the `\CL` and `\BL` commands appears to be deprecated in MKIV; see: http://wiki.contextgarden.net/Tabulate A very nice application in table are background colors for rows/cells (a feature that doesn't work in tabulate[[Tabulate]]): <table cols="2"><tr valign="top"><td>
<texcode>
\setupcolors[state=start]
\placetable[here][tab:sample]{sample table}
\starttable[|l|l|]
\HL
\BL[21]\SR
\NC Command \NC Meaning \NC\SR
\HL
\NC \tex{NC} \NC next column \NC\FR
\NC \tex{HL} \NC horizontal line \NC\MR
\NC \tex{VL} \NC vertical line \NC\MR
\NC \tex{NR} \NC next row \NC\LR
\HL
\CL[green]\SR
\NC \tex{AR} \NC automatic row \NC\SR
\HL
\stoptable
</texcode>
The commands work something like this: first, you say what background colour you want for the next rowand then you typeset the row. Observe: the line with the colour-command and the row it is supposedto colour should end in the same command (i.e. both \SR, \LR, \FR, ...). If they don't, the backgroundwon't cover the whole cell. * \BL makes a gray background: the optional argument tells BL how many cells it should color* \CL makes a colored line</td><td>
<context>
\setupcolors[state=start]
\placetable[here][tab:sample]{sample table}
\starttable[|l|l|]
\HL
\HL
\NC \tex{NC} \NC next column \NC\FR
\NC \tex{HL} \NC horizontal line \NC\MR
\NC \tex{VL} \NC vertical line \NC\MR
\NC \tex{NR} \NC next row \NC\LR
\HL
\CL[green]\SR
\NC \tex{AR} \NC automatic row \NC\SR\HL\stoptable</context></td></tr></table>The commands work something like this: first, you say what background colour you want for the next rowand then you typeset the row. Observe: the line with the colour-command and the row it is supposedto colour should end in the same command (i.e. both \SR, \LR, \FR, ...). If they don't, the backgroundwon't cover the whole cell. * {{cmd|BL}} makes a gray background: the optional argument tells BL how many cells it should color* {{cmd|CL}} makes a colored row ==Fit Table Width== Hans posted a solution to the list for fitting a wide table (with paragraphs and vertical lines) to the page width. The key to his solution is the <code>.45\textwidth</code> settings when setting each cell as a paragraph. <texcode>\SetTableToWidth{\textwidth} \starttable[|p(.45\textwidth)|p(.45\textwidth)|]\HL\VL foo foo foo foo foo foo \VL bar bar bar bar bar bar \VL\AR
\HL
\stoptable
</texcode>
<!-- It makes no sense to typeset this here. -->
 
Since the table module has been under [http://www.ntg.nl/pipermail/ntg-context/2010/055004.html reconstruction] this approach works only for MKII. In MKIV one can use
 
<texcode>
\starttable[|l|l|][textwidth=max]
\HL
\VL foo foo foo foo foo foo \VL bar bar bar bar bar bar \VL\AR
\HL
\stoptable
</texcode>
 
to change the width of the current table only.
 
<code>\setuptables[textwidth=...]</code> will affect the behavior of every table.
 
== Booktabs ==
 
Latex has an excellent package called booktabs for typesetting tables. The main features of that package is that you can have top, mid, and bottom rules of different thickness. It is possible to achieve similar effects using table. For example, to match the default settings of booktabs (well almost, this gives a top and bottom rules of 0.09em while booktabs sets it to 0.08em).
 
<table cols="2"><tr valign="top"><td>
<texcode>
\setuptables[rulethickness=0.03em]
 
\starttable[s0|l|i2l|i2r|]
\HL[3]
\NC \Use2[c]{Item} \NC \NC \AR
\DL[2] \DC \DR
\NC Animal \NC Description \NC Price (\$) \NC \AR
\HL[2]
\NC Gnat \NC per gram \NC 13.65 \NC \AR
\NC \NC each \NC 0.01 \NC \AR
\NC Gnu \NC stuffed \NC 92.50 \NC \AR
\NC Emu \NC stuffed \NC 33.33 \NC \AR
\NC Armadillo \NC frozen \NC 8.99 \NC \AR
\HL[3]
\stoptable
</texcode>
</td><td>
<context>
\setuppapersize[A5]
\setuptables[rulethickness=0.03em]
 
\starttable[s0|l|i2l|i2r|]
\HL[3]
\NC \Use2[c]{Item} \NC \NC \AR
\DL[2] \DC \DR
\NC Animal \NC Description \NC Price (\$) \NC \AR
\HL[2]
\NC Gnat \NC per gram \NC 13.65 \NC \AR
\NC \NC each \NC 0.01 \NC \AR
\NC Gnu \NC stuffed \NC 92.50 \NC \AR
\NC Emu \NC stuffed \NC 33.33 \NC \AR
\NC Armadillo \NC frozen \NC 8.99 \NC \AR
\HL[3]
\stoptable
</context>
</td></tr></table>
[[Category:Tables]]
38

edits

Navigation menu