diff options
Diffstat (limited to 'Master/texmf-dist/doc/latex/pgfplots/pgfplotstable.tex')
-rw-r--r-- | Master/texmf-dist/doc/latex/pgfplots/pgfplotstable.tex | 199 |
1 files changed, 142 insertions, 57 deletions
diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplotstable.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplotstable.tex index 15d4668102b..c4be25d48f4 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplotstable.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplotstable.tex @@ -36,6 +36,8 @@ tabsize=4, } +\pgfkeys{/pgfmanual/gray key prefixes/.add={/pgfplots/table/,/pgf/number format/,}{}} + \makeatletter \pgfkeys{% /codeexample/prettyprint/key name with handler/.code 2 args={% @@ -65,7 +67,10 @@ } \makeatother -%\pgfplotstableset{debug=true} +\pgfplotstableset{ + %debug=true, + begin table=\begin{tabular}[b], +} \title{% Manual for Package \PGFPlotstable\\ @@ -194,16 +199,18 @@ Technical note: every opened file will be protocolled into your log file. \begin{command}{\pgfplotstableread\marg{file name}\marg{\textbackslash macro}} - Loads the table \marg{file name} into a \TeX-macro \meta{\textbackslash macro}. This macro can than be used several times. + Loads the table \marg{file name} into a \TeX-macro \meta{\textbackslash macro}. This macro can then be used several times. \begin{codeexample}[] -\pgfplotstableread{pgfplotstable.example1.dat}\table -\pgfplotstabletypeset[columns={dof,error1}]\table +\pgfplotstableread{pgfplotstable.example1.dat}\loadedtable +\pgfplotstabletypeset[columns={dof,error1}]\loadedtable \hspace{2cm} -\pgfplotstabletypeset[columns={dof,error2}]\table +\pgfplotstabletypeset[columns={dof,error2}]\loadedtable \end{codeexample} There are variants of this command which do not really built up a struct but which report every line to a ``listener''. There is also a struct which avoids protection by \TeX\ scopes. In case you need such things, consider reading the source code comments. Technical note: every opened file will be protocolled into your log file. + + Note: avoid using `|\table|' as name, it conflicts with |\begin{table}| of \LaTeX. \end{command} \begin{key}{/pgfplots/table/col sep=\mchoice{space,tab,comma,semicolon,colon,braces} (initially space)} @@ -677,7 +684,24 @@ The following styles allow to configure the final table code \emph{after any cel \begin{key}{/pgfplots/table/begin table=\marg{code} (initially \textbackslash begin\{tabular\})} Contains \marg{code} which is generated as table start. - Use |begin table/.add={}{[t]}| to append the prefix |[t]|. + The following example uses a |longtable| instead\index{longtable} of |tabular|: +\begin{codeexample}[code only] +\pgfplotstableset{ + begin table=\begin{longtable}, + end table=\end{longtable}, +} +\end{codeexample} + + It is also possible to \emph{change} the value. For example, +\begin{codeexample}[code only] +\pgfplotstableset{ + begin table/.add={}{[t]}, +} +\end{codeexample} + prepends the empty string |{}| and appends the prefix |[t]|. Thus, `|\begin{tabular}|' becomes `|\begin{tabular}[t]|'. +\end{key} +\begin{key}{/pgfplots/table/end table=\marg{code} (initially \textbackslash end\{tabular\})} + Contains \marg{code} which is generated as table end. \end{key} \begin{codekey}{/pgfplots/table/typeset cell} @@ -696,13 +720,10 @@ The following styles allow to configure the final table code \emph{after any cel \paragraph{Attention:} The value of |\pgfplotstablecol| starts with $1$ in this context, i.e.\ it is in the range $1,\dotsc,n$ where $n=$ |\pgfplotstablecols|. This simplifies checks whether we have the last column. \end{codekey} -\begin{key}{/pgfplots/table/end table=\marg{code} (initially \textbackslash end\{tabular\})} - Contains \marg{code} which is generated as table end. -\end{key} - \begin{key}{/pgfplots/table/outfile=\marg{file name} (initially empty)} \label{page:outfile} Writes the generated tabular code into \marg{file name}. It can then be used with |\input|\marg{file name}, \PGFPlotstable\ is no longer required since it contains a completely normal |tabular|. + \pgfplotstableset{begin table=\begin{tabular}} \begin{codeexample}[] \pgfplotstabletypeset[ columns={dof,error1}, @@ -920,8 +941,10 @@ See section~\ref{sec:number:styles} for how to change the exponential display st Sets both, |fixed zerofill| and |sci zerofill| at once. \end{stylekey} -\begin{key}{/pgf/number format/std} -Configures |\pgfmathprintnumber| to a standard algorithm. It chooses either \texttt{fixed} or \texttt{sci}, depending on the order of magnitude. Let $n=s \cdot m \cdot 10^e$ be the input number and $p$ the current precision. If $-p/2 \le e \le 4$, the number is displayed using the fixed format. Otherwise, it is displayed using the scientific format. +\begin{keylist}{/pgf/number format/std,% + /pgf/number format/std=\meta{lower e}, + /pgf/number format/std=\meta{lower e}:\meta{upper e}} +Configures |\pgfmathprintnumber| to a standard algorithm. It chooses either |fixed| or |sci|, depending on the order of magnitude. Let $n=s \cdot m \cdot 10^e$ be the input number and $p$ the current precision. If $-p/2 \le e \le 4$, the number is displayed using |fixed| format. Otherwise, it is displayed using |sci| format. \begin{codeexample}[] \pgfkeys{/pgf/number format/.cd,std,precision=2} @@ -931,7 +954,9 @@ Configures |\pgfmathprintnumber| to a standard algorithm. It chooses either \tex \pgfmathprintnumber{24415.98123}\hspace{1em} \pgfmathprintnumber{123456.12345} \end{codeexample} -\end{key} +The parameters can be customized using the optional integer argument(s): if $\text{\meta{lower e}} \le e \le \text{\meta{upper e}}$, the number is displayed in |fixed| format, otherwise in |sci| format. Note that \meta{lower e} should be negative for useful results. The precision used for scientific format can be adjusted with |sci precision| if necessary. + +\end{keylist} \begin{key}{/pgf/number format/int detect} Configures |\pgfmathprintnumber| to detect integers automatically. If the input number is an integer, no period is displayed at all. If not, the scientific format is chosen. @@ -946,6 +971,18 @@ Configures |\pgfmathprintnumber| to detect integers automatically. If the input \end{codeexample} \end{key} +\begin{command}{\pgfmathifisint\marg{number constant}\marg{true code}\marg{false code}} + A command which does the same check as |int detect|, but it invokes \meta{true code} if the \meta{number constant} actually is an integer and the \meta{false code} if not. + + As a side--effect, |\pgfretval| will contain the parsed number, either in integer format or as parsed floating point number. + + The argument \meta{number constant} will be parsed with |\pgfmathfloatparsenumber|. +\begin{codeexample}[] +15 \pgfmathifisint{15}{is an int: \pgfretval.}{is no int}\hspace{1em} +15.5 \pgfmathifisint{15.5}{is an int: \pgfretval.}{is no int} +\end{codeexample} +\end{command} + \begin{key}{/pgf/number format/int trunc} Truncates every number to integers (discards any digit after the period). @@ -962,6 +999,12 @@ Truncates every number to integers (discards any digit after the period). \begin{key}{/pgf/number format/precision=\marg{number}} Sets the desired rounding precision for any display operation. For scientific format, this affects the mantisse. \end{key} +\begin{key}{/pgf/number format/sci precision=\meta{number or empty} (initially empty)} + Sets the desired rounding precision only for |sci| styles. + + Use |sci precision={}| to restore the initial configuration (which uses the argument provided to |precision| for all number styles). +\end{key} + \subsubsection{Changing Number Format Display Styles}% \label{sec:number:styles}% @@ -1168,6 +1211,29 @@ Typesets the exponent as superscript for any number displayed in scientific form \end{codeexample} \end{key} +\begin{key}{/pgf/number format/sci generic=\marg{keys}} +Allows to define an own number style for the scientific format. Here, \meta{keys} can be one of the following choices (omit the long key prefix): + +\begin{key}{/pgf/number format/sci generic/mantisse sep=\marg{text} (initially empty)} + Provides the separator between a mantisse and the exponent. It might be |\cdot|, for example, +\end{key} +\begin{key}{/pgf/number format/sci generic/exponent=\marg{text} (initially empty)} + Provides text to format the exponent. The actual exponent is available as argument |#1| (see below). +\end{key} + +\begin{codeexample}[] +\pgfkeys{ + /pgf/number format/.cd, + sci, + sci generic={mantisse sep=\times,exponent={10^{#1}}}} +\pgfmathprintnumber{12.345}; +\pgfmathprintnumber{0.00012345} +\end{codeexample} + The \meta{keys} can depend on three parameters, namely on |#1| which is the exponent, |#2| containing the flags entity of the floating point number and |#3| is the (unprocessed and unformatted) mantisse. + + Note that |sci generic| is \emph{not} suitable to modify the appearance of fixed point numbers, nor can it be used to format the mantisse (which is typeset like fixed point numbers). Use |dec sep|, |1000 sep| and |print sign| to customize the mantisse. +\end{key} + \begin{key}{/pgf/number format/@dec sep mark=\marg{text}} Will be placed right before the place where a decimal separator belongs to. However, \marg{text} will be inserted even if there is no decimal separator. It is intented as place-holder for auxiliary routines to find alignment positions. @@ -1186,6 +1252,24 @@ Typesets the exponent as superscript for any number displayed in scientific form The initial setting installs a |\pgfutilensuremath| around each final number to change to math mode if necessary. Use |assume math mode=true| if you know that math mode is active and you don't want |\pgfutilensuremath|. \end{key} +\begin{stylekey}{/pgf/number format/verbatim} + A style which configures the number printer to produce verbatim text output, i.e.\ it doesn't contain \TeX\ macros. +\begin{codeexample}[] +\pgfkeys{ + /pgf/fpu, + /pgf/number format/.cd, + sci, + verbatim} +\pgfmathprintnumber{12.345}; +\pgfmathprintnumber{0.00012345}; +\pgfmathparse{exp(15)} +\pgfmathprintnumber{\pgfmathresult} +\end{codeexample} + The style resets |1000 sep|, |dec sep|, |print sign|, |skip 0.| and sets |assume math mode|. Furthermore, it installs a |sci generic| format for verbatim output of scientific numbers. + + However, it will still respect |precision|, |fixed zerofill|, |sci zerofill| and the overall styles |fixed|, |sci|, |int detect| (and their variants). It might be useful if you intent to write output files. +\end{stylekey} + @@ -1404,7 +1488,7 @@ The preprocessing step allows to change cell contents \emph{before} any typesett \end{stylekey} \begin{codekey}{/pgfplots/table/row predicate} - A boolean predicate which allows to select particular rows of the input table. The argument |#1| contains the current row's index (starting with~$0$, not counting comment lines or column names). + A boolean predicate which allows to select particular rows of the input table, based on the current row's index. The argument |#1| contains the current row's index (starting with~$0$, not counting comment lines or column names). The return value is assigned to the \TeX-if \declareandlabel{\ifpgfplotstableuserow}. If the boolean is not changed, the return value is true. \begin{codeexample}[narrow] @@ -1423,7 +1507,7 @@ The preprocessing step allows to change cell contents \emph{before} any typesett ] {pgfplotstable.example1.dat} \end{codeexample} - Please note that |row predicate| is applied \emph{before} any other option which affects row appearance. It is evaluated before |assign cell content|. For example, the even/odd row styles refer to those rows for which the predicate returns |true|. In fact, you can use |row predicate| to truncate the complete table before it as actually processed. + Please note that |row predicate| is applied \emph{before} any other option which affects row (or column) appearance. It is evaluated before |assign cell content|. One of the consequences ist that even/odd row styles refer to those rows for which the predicate returns |true|. In fact, you can use |row predicate| to truncate the complete table before it has actually been processed. During |row predicate|, the macro |\pgfplotstablerows| contains the total number of \emph{input} rows. @@ -1456,14 +1540,14 @@ The preprocessing step allows to change cell contents \emph{before} any typesett every head row/.style={before row=\toprule,after row=\midrule}, every last row/.style={after row=\bottomrule}} -\pgfplotstabletypeset[string type]{pgfplotstable.example2.dat} - +\pgfplotstabletypeset[string type]{pgfplotstable.example2.dat}% +~ \pgfplotstabletypeset[ - display columns/0/.style={select equal part entry of={0}{2},string type}, - display columns/1/.style={select equal part entry of={0}{2},string type}, - display columns/2/.style={select equal part entry of={1}{2},string type}, - display columns/3/.style={select equal part entry of={1}{2},string type}, - columns={A,B,A,B} + columns={A,B,A,B}, + display columns/0/.style={select equal part entry of={0}{2},string type},% first part of `A' + display columns/1/.style={select equal part entry of={0}{2},string type},% first part of `B' + display columns/2/.style={select equal part entry of={1}{2},string type},% second part of `A' + display columns/3/.style={select equal part entry of={1}{2},string type},% second part of `B' ] {pgfplotstable.example2.dat} \end{codeexample} @@ -1473,7 +1557,7 @@ The preprocessing step allows to change cell contents \emph{before} any typesett \end{stylekey} \begin{stylekey}{/pgfplots/table/unique=\marg{column name}} - A style which appends an |row predicate| which suppresses successive occurances of the same elements in \marg{column name}. + A style which appends a |row predicate| which suppresses successive occurances of the same elements in \marg{column name}. For example, if \marg{column name} contains |1,1,3,5,5,6,5,0|, the application of |unique| results in |1,3,5,6,5,0| (the last |5| is kept -- it is not directly preceeded by another |5|). The algorithm uses string token comparison to find multiple occurances\footnote{To be more precise, the comparison is done using \texttt{\textbackslash ifx}, i.e. cell contents won't be expanded. Only the tokens as they are seen in the input table will be used.}. @@ -1610,7 +1694,7 @@ It is possible to create new tables from scratch or to change tables after they Furthermore, there must be |create on use| statements (see the next subsection) for every column which shall be generated\footnote{Currently, you need to provide at least one column: the implementation gets confused for completely empty tables. If you do not provide any column name, a dummy column will be created.}. Columns are generated - independently, in the order of appearance in |columns|. + independently, in the order of appearance in |columns|. As soon as a column is complete, it can be accessed using any of the basic level access mechanisms. Thus, you can built columns which depend on each other. The table will contain exactly \marg{row count} rows. If \marg{row count} is an |\pgfplotstablegetrowsof| statement, that statement will be executed and the resulting number of rows be used. Otherwise, \marg{row count} will be evaluated as number. \begin{codeexample}[] @@ -1619,9 +1703,9 @@ It is possible to create new tables from scratch or to change tables after they % define how the 'new' column shall be filled: create on use/new/.style={create col/set list={4,5,6,7,...,10}}} % create a new table with 11 rows and column 'new': -\pgfplotstablenew[columns={new}]{11}\table +\pgfplotstablenew[columns={new}]{11}\loadedtable % show it: -\pgfplotstabletypeset[empty cells with={---}]\table +\pgfplotstabletypeset[empty cells with={---}]\loadedtable \end{codeexample} \begin{codeexample}[] @@ -1631,9 +1715,9 @@ It is possible to create new tables from scratch or to change tables after they create on use/new/.style={create col/expr={factorial(15+\pgfplotstablerow)}}, columns={new}] {11} - \table + \loadedtable % show it: -\pgfplotstabletypeset\table +\pgfplotstabletypeset\loadedtable \end{codeexample} \end{commandlist} @@ -1718,7 +1802,7 @@ The \marg{col name} is expected to be a \emph{physical} column name, no alias or The following example takes our well-known input table and creates a copy of the |level| column. Furthermore, it produces a lot of output to show the available macros. Finally, it uses |\pgfkeyslet| to assign the contents of the resulting |\entry| to |next content|. \begin{codeexample}[] -\pgfplotstableread{pgfplotstable.example1.dat}\table +\pgfplotstableread{pgfplotstable.example1.dat}\loadedtable \pgfplotstablecreatecol[ create col/assign/.code={% \getthisrow{level}\entry @@ -1727,13 +1811,13 @@ The following example takes our well-known input table and creates a copy of the (\#\pgfplotstablerow/\pgfplotstablerows)}% \pgfkeyslet{/pgfplots/table/create col/next content}\entry }] - {new}\table + {new}\loadedtable \pgfplotstabletypeset[ column type=l, columns={level,new}, columns/new/.style={string type} -]\table +]\loadedtable \end{codeexample} There is one more speciality: you can use |columns=|\marg{column list} to reduce the runtime complexity of this command. This works only if the |columns| key is provided directly into \marg{options}. In this case |\thisrow| and its variants are only defined for those columns listed in the |columns| value. @@ -2012,10 +2096,10 @@ The example creates two columns: the |new| column is just the sum of each value }, columns={cut}] {2} - \table + \loadedtable % Show the data: -\pgfplotstabletypeset{\table} +\pgfplotstabletypeset{\loadedtable} \begin{tikzpicture} \begin{loglogaxis} @@ -2049,9 +2133,9 @@ The example creates two columns: the |new| column is just the sum of each value }, columns={cut}] {2} - \table + \loadedtable % Show the data: -\pgfplotstabletypeset{\table} +\pgfplotstabletypeset{\loadedtable} \end{codeexample} \PGFPlotstable\ will call |\foreach |\meta{\textbackslash foreach loop head} and it will expand \marg{file name pattern} for every iteration. For every iteration, a simpler list entry of the form @@ -2123,7 +2207,8 @@ Empty cells will be filled with |{}| if |col sep=space|. Use the |empty cells wi \item |every table|, \item |every even row|, |every odd row|, |every even column|, |every odd column|, \item |every first column|, |every last column|, |every first row|, |every last row|, - \item |every head row|. + \item |every head row|, + \item |postproc cell content|, |preproc cell content|. \end{itemize} In case you want to reset all, you should also consider the key |disable rowcol styles|. \end{key} @@ -2191,8 +2276,8 @@ Tables are always stored as a sequence of column vectors. Therefore, iteration o Iterates over every column name of \meta{table}. The \meta{\textbackslash macro} will be set to the currently visited column name. Then, \marg{code} will be executed. During \marg{code}, |\pgfplotstablecol| denotes the current column index (starting with 0). \begin{codeexample}[] \begin{minipage}{0.8\linewidth} -\pgfplotstableread{pgfplotstable.example1.dat}\table -\pgfplotstableforeachcolumn\table\as\col{% +\pgfplotstableread{pgfplotstable.example1.dat}\loadedtable +\pgfplotstableforeachcolumn\loadedtable\as\col{% column name is `\col'; index is\pgfplotstablecol;\par } \end{minipage} @@ -2207,8 +2292,8 @@ Tables are always stored as a sequence of column vectors. Therefore, iteration o For every cell in the column named \meta{column name}, \marg{code} will be executed. During this invocation, the macro \meta{\textbackslash cellcontent} will contain the cell's content and |\pgfplotstablerow| will contain the current row's index. \begin{codeexample}[] \begin{minipage}{0.8\linewidth} -\pgfplotstableread{pgfplotstable.example1.dat}\table -\pgfplotstableforeachcolumnelement{error1}\of\table\as\cell{% +\pgfplotstableread{pgfplotstable.example1.dat}\loadedtable +\pgfplotstableforeachcolumnelement{error1}\of\loadedtable\as\cell{% I have now cell element `\cell' at row index `\pgfplotstablerow';\par } \end{minipage} @@ -2223,11 +2308,11 @@ Tables are always stored as a sequence of column vectors. Therefore, iteration o but any changes of \meta{\textbackslash cellcontent} which might occur during \marg{code} will be written back into the respective cell. \begin{codeexample}[] -\pgfplotstableread{pgfplotstable.example1.dat}\table -\pgfplotstablemodifyeachcolumnelement{error1}\of\table\as\cell{% +\pgfplotstableread{pgfplotstable.example1.dat}\loadedtable +\pgfplotstablemodifyeachcolumnelement{error1}\of\loadedtable\as\cell{% \edef\cell{\#\pgfplotstablerow: \cell}% } -\pgfplotstabletypeset[columns=error1,string type]{\table} +\pgfplotstabletypeset[columns=error1,string type]{\loadedtable} \end{codeexample} If \marg{column name} is a column alias or has been created on-the-fly, a new column named \meta{column name} will be created. @@ -2238,11 +2323,11 @@ Tables are always stored as a sequence of column vectors. Therefore, iteration o The return value will be written to |\pgfplotsretval|. \begin{codeexample}[] -\pgfplotstableread{pgfplotstable.example1.dat}{\table} -\pgfplotstablegetelem{4}{error1}\of{\table} +\pgfplotstableread{pgfplotstable.example1.dat}{\loadedtable} +\pgfplotstablegetelem{4}{error1}\of{\loadedtable} The value (4,error1) is `\pgfplotsretval'. -\pgfplotstablegetelem{2}{[index]0}\of{\table} +\pgfplotstablegetelem{2}{[index]0}\of{\loadedtable} The value (2,0) is `\pgfplotsretval'. \end{codeexample} @@ -2250,7 +2335,7 @@ The value (2,0) is `\pgfplotsretval'. \end{command} \begin{command}{\pgfplotstablegetrowsof\marg{file name or \textbackslash loadedtable}} - Defines |\pgfmathresult| to be the number of rows in a table. The argument may be either a file name or an already loaded table (the \meta{\textbackslash macro} of |\pgfplotstableread|). + Defines |\pgfplotsretval| to be the number of rows in a table\footnote{It will also assign \texttt{\textbackslash pgfmathresult} to the same value.}. The argument may be either a file name or an already loaded table (the \meta{\textbackslash macro} of |\pgfplotstableread|). \end{command} @@ -2277,8 +2362,8 @@ The value (2,0) is `\pgfplotsretval'. \end{codeexample} \begin{codeexample}[] -\pgfplotstabletranspose\table{pgfplotstable.example3.dat} -\pgfplotstabletypeset[string type]\table +\pgfplotstabletranspose\loadedtable{pgfplotstable.example3.dat} +\pgfplotstabletypeset[string type]\loadedtable \end{codeexample} The optional argument \meta{options} can contain options which influence the transposition: @@ -2289,8 +2374,8 @@ The value (2,0) is `\pgfplotsretval'. If \marg{colname} is not empty, it denotes an input column name whose cell values will make up the output column names: \begin{codeexample}[] -\pgfplotstabletranspose[colnames from=c]\table{pgfplotstable.example3.dat} -\pgfplotstabletypeset[string type]\table +\pgfplotstabletranspose[colnames from=c]\loadedtable{pgfplotstable.example3.dat} +\pgfplotstabletypeset[string type]\loadedtable \end{codeexample} The argument \meta{colname} won't appear as cell contents. It is an error if the the cells in \meta{colname} don't yield unique column names. \end{pgfplotskey} @@ -2300,13 +2385,13 @@ The value (2,0) is `\pgfplotsretval'. Will create a further column named \meta{name} which will be filled with the input column names (as string type). \begin{codeexample}[] -\pgfplotstabletranspose[input colnames to=Input]\table{pgfplotstable.example3.dat} -\pgfplotstabletypeset[string type]\table +\pgfplotstabletranspose[input colnames to=Input]\loadedtable{pgfplotstable.example3.dat} +\pgfplotstabletypeset[string type]\loadedtable \end{codeexample} Set \meta{name} to the empty string to disable this column. \begin{codeexample}[] -\pgfplotstabletranspose[input colnames to=]\table{pgfplotstable.example3.dat} -\pgfplotstabletypeset[string type]\table +\pgfplotstabletranspose[input colnames to=]\loadedtable{pgfplotstable.example3.dat} +\pgfplotstabletypeset[string type]\loadedtable \end{codeexample} \end{pgfplotskey} @@ -2317,8 +2402,8 @@ The value (2,0) is `\pgfplotsretval'. If \meta{list} is not empty, it is expected to be a list of column names. Only these columns will be used as input for the transposition, just as if the remaining one weren't there. It is acceptable to provide column aliases or |create on use| arguments inside of \meta{list}. \begin{codeexample}[] -\pgfplotstabletranspose[columns={a,b}]\table{pgfplotstable.example3.dat} -\pgfplotstabletypeset[string type]\table +\pgfplotstabletranspose[columns={a,b}]\loadedtable{pgfplotstable.example3.dat} +\pgfplotstabletypeset[string type]\loadedtable \end{codeexample} Here is the only difference between |\pgfplotstabletranspose| and |\pgfplotstabletranspose*|: the version without `|*|' \emph{resets} the |columns| key before it starts whereas the version with `|*|' simply uses the actual content of |columns|. |