diff options
author | Norbert Preining <norbert@preining.info> | 2021-12-13 03:02:58 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2021-12-13 03:02:58 +0000 |
commit | 8164c2be3b4849a9c77e44b9659a3de8af010bd7 (patch) | |
tree | 4414d792306f426cccf2f370b64dee20cd239244 /macros/latex/contrib/numerica-tables/numerica-tables.tex | |
parent | 9ed1a61f45b05f58016912a6bd6c13daab6db9eb (diff) |
CTAN sync 202112130302
Diffstat (limited to 'macros/latex/contrib/numerica-tables/numerica-tables.tex')
-rw-r--r-- | macros/latex/contrib/numerica-tables/numerica-tables.tex | 2270 |
1 files changed, 2270 insertions, 0 deletions
diff --git a/macros/latex/contrib/numerica-tables/numerica-tables.tex b/macros/latex/contrib/numerica-tables/numerica-tables.tex new file mode 100644 index 0000000000..8f78d7b35c --- /dev/null +++ b/macros/latex/contrib/numerica-tables/numerica-tables.tex @@ -0,0 +1,2270 @@ +%% LyX 2.4.0-alpha3 created this file. For more info, see https://www.lyx.org/. +%% Do not edit unless you really know what you are doing. +\documentclass[english,tableposition=top]{report} +\usepackage{lmodern} +\renewcommand{\sfdefault}{lmss} +\renewcommand{\ttdefault}{lmtt} +\usepackage[T1]{fontenc} +\usepackage{textcomp} +\usepackage[latin9]{inputenc} +\setcounter{secnumdepth}{3} +\setcounter{tocdepth}{3} +\usepackage{color} +\definecolor{shadecolor}{rgb}{0.667969, 1, 1} +\usepackage{babel} +\usepackage{array} +\usepackage{float} +\usepackage{booktabs} +\usepackage{framed} +\usepackage{url} +\usepackage{multirow} +\usepackage{amsmath} +\usepackage[unicode=true,pdfusetitle, + bookmarks=true,bookmarksnumbered=true,bookmarksopen=true,bookmarksopenlevel=2, + breaklinks=false,pdfborder={0 0 1},backref=section,colorlinks=true] + {hyperref} + +\makeatletter + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% LyX specific LaTeX commands. +%% Because html converters don't know tabularnewline +\providecommand{\tabularnewline}{\\} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Textclass specific LaTeX commands. +\newenvironment{centred}% + {\begin{center}\baselineskip=13pt\parskip=1pt}{\end{center}} +\newenvironment{lyxcode} + {\par\begin{list}{}{ + \setlength{\rightmargin}{\leftmargin} + \setlength{\listparindent}{0pt}% needed for AMS classes + \raggedright + \setlength{\itemsep}{0pt} + \setlength{\parsep}{0pt} + \normalfont\ttfamily}% + \item[]} + {\end{list}} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% User specified LaTeX commands. +\usepackage{numerica-tables} +\usepackage{numerica-plus} +\newcommand\rel{\,\varrho\;} +\DeclareMathOperator{\erf}{erf} +\DeclareMathOperator{\gd}{gd} +\usepackage{upquote} + +\reuse{} + +\makeatother + +\begin{document} +\title{\texttt{numerica-tables}~\\ +} +\author{Andrew Parsloe\\ +(\url{ajparsloe@gmail.com})} +\maketitle +\begin{abstract} +The \verb`numerica-tables` package defines a command which enables +the creation of (possibly multi-column) mathematical tables of function +values. \emph{Key=value} settings allow presentation in a wide variety +of table styles within the `formal table' framework of the \texttt{booktabs} +package. \\ +\\ +\noindent\begin{minipage}[t]{1\columnwidth}% +\begin{shaded}% + +\paragraph*{Note:} +\begin{itemize} +\item {\normalsize This document applies to version 2.0.0 of }{\normalsize\texttt{numerica-tables}}{\normalsize .}{\small\par} +\item {\normalsize A version of }{\normalsize\texttt{numerica}}{\normalsize{} +from or later than 2021/12/07 is required; (}{\normalsize\texttt{numerica}}{\normalsize{} +requires }{\normalsize\texttt{amsmath}}{\normalsize , }{\normalsize\texttt{mathtools}}{\normalsize{} +and the \LaTeX 3 bundles }{\normalsize\texttt{l3kernel}}{\normalsize{} +and }{\normalsize\texttt{l3packages}}{\normalsize ).}{\small\par} +\item {\normalsize The }{\normalsize\texttt{booktabs}}{\normalsize{} package +is required.}{\small\par} +\item {\normalsize I refer many times in this document to }{\normalsize\emph{Handbook +of Mathematical Functions}}{\normalsize , edited by Milton Abramowitz +and Irene A. Segun, Dover, 1965. This is abbreviated to }{\normalsize\emph{HMF}}{\normalsize , +often followed by a reference to a specific table like Table 1.2.}{\small\par} +\item {\normalsize Version 2 of }{\normalsize\texttt{numerica-tables}}{\small\par} +\begin{itemize} +\item {\normalsize is the first stand-alone version (in v.1 of }{\normalsize\texttt{numerica}}{\normalsize{} +the }{\normalsize\texttt{\textbackslash nmcTabulate}}{\normalsize{} +command was available with the }{\normalsize\texttt{tables}}{\normalsize{} +package option);}{\small\par} +\item {\normalsize restricts the third item in }{\normalsize\texttt{rspec}}{\normalsize{} +to }{\normalsize\texttt{rows}}{\normalsize{} only (}{\normalsize\texttt{rstop}}{\normalsize{} +is no longer accepted there);}{\small\par} +\item {\normalsize restricts the third item in }{\normalsize\texttt{cspec}}{\normalsize{} +to }{\normalsize\texttt{cols}}{\normalsize{} only (}{\normalsize\texttt{cstop}}{\normalsize{} +is no longer accepted there);}{\small\par} +\item {\normalsize allows an additional row, if wanted, between table title +and the column header row;}{\small\par} +\item {\normalsize removes the }{\normalsize\texttt{DEL}}{\normalsize{} column +function;}{\small\par} +\item {\normalsize amends documentation.}{\small\par} +\end{itemize} +\end{itemize} +\end{shaded}% +\end{minipage} + +\tableofcontents{} +\end{abstract} + +\chapter{Introduction} + +Entering +\begin{lyxcode} +~\textbackslash usepackage\{numerica-tables\} +\end{lyxcode} +\noindent in the preamble of a document gives access to a command +\verb`\nmcTabulate` for creating tables of function values in a wide +variety of styles. (Since \verb`numerica-tables` requires \textendash{} +and loads \textendash{} the \verb`numerica` package, all commands +of that package are also available.) All tables are `formal tables' +in the sense of the \texttt{booktabs} package, which is loaded automatically. +Such tables have no vertical rules and few horizontal rules. + +\section{Table structure} + +I take as my source of models of mathematical tables those presented +in \emph{Handbook of Mathematical Functions}, edited by Milton Abramowitz +and Irene A. Segun, Dover, 1965, not because the typesetting is elegant +(it often isn't) but because \emph{HMF} displays a wide variety of +table styles. The editors of that volume were faced with a host of +different problems requiring a host of different solutions. The \verb`\nmcTabulate` +command aims to reproduce most of those different solutions, within +\verb`booktabs` elegance. + +To create a table we need to specify a function to tabulate. The values +this function takes will generally depend on a primary parameter and, +possibly, a number of secondary parameters (which is where much of +the complexity comes from). Mathematical tables are structured in +\emph{columns}. We (nearly always) read \emph{down} a column as the +primary parameter is incremented, generally in regular steps. We need +to decide on the range of values the primary parameter will take and +how fine-grained the tabulation will be \textendash{} what the step +size of its increments will be. Assigning different values to a second +parameter generates a second, third,\ldots{} column. Sometimes rather +than a second parameter, a second, third, \ldots{} function of the +first parameter is tabulated in the successive columns. + +In this document the first parameter is called the \emph{row variable} +\textendash{} its value determines which row we are in; the second +parameter, if present, is called the \emph{column variable \textendash{} +}its value determines which column we are in. A table generally (but +not always) presents the values of the row variable in the first column, +the \emph{row-variable column}, sometimes in distinctive type (e.g. +bolded). The values of the column variable are presented in a \emph{header +row} above the table body of function values. Above the header row +there may be a \emph{title row} and perhaps a \emph{subtitle row} +where other explanatory material can be displayed. Sometimes there +is a \emph{footer row} beneath the table body. Vertical rules are +absent, horizontal rules used sparingly \textendash{} for example, +at the top and bottom of the table, or under the header row, but not +in the body of the table. + +\section{Shared syntax} + +The \verb`\nmcTabulate` command (short-name form \verb`\tabulate`) +shares the syntax of \verb`\nmcEvaluate` (see \texttt{numerica.pdf}). +When all options are used the command looks like +\begin{lyxcode} +\noindent \textbackslash nmcTabulate{*}{[}settings{]}\{expr.\}{[}vv-list{]}{[}num.~format{]} +\end{lyxcode} +\begin{enumerate} +\item \verb`*` optional switch; if present ensures a single number output +with no formatting, or an appropriate error message if the single +number cannot be produced; see §\ref{sec:Star-option}; +\item \verb`[settings]` comma-separated list of \emph{key=value }settings, +at the heart of creating a table of function values; see Chapter~\ref{chap:=00005CnmcTabulate-settings}; +\item \verb`{expr.}` mandatory argument specifying the mathematical expression +or expressions in \LaTeX{} form to be tabulated; +\item \verb`[vv-list]` comma-separated list of \emph{variable=value }items, +in particular containing the initial value of the row variable (and +column variable if one is used); +\item \verb`[num. format]` optional format specification for presentation +of the numerical results (rounding, padding with zeros, scientific +notation); see §\ref{subsec:Trailing-optional-argument}. +\end{enumerate} +Unlike \verb`\nmcEvaluate` (from\texttt{ }{\ttfamily\verb`numerica`}\texttt{)}, +for \verb`\nmcTabulate` +\begin{itemize} +\item math delimiters are irrelevant \textendash{} it makes no difference +to the display of the result whether the command wraps around math +delimiters, is wrapped within math delimters, or if there are no math +delimiters involved whatever; +\item the two apparently optional arguments straddling the main argument +(\verb`settings` and \verb`vv-list`) are \emph{essential}. Although +both are delimited by square brackets, that is in order to draw on +the code from {\ttfamily\verb`numerica`} for \verb`\nmcEvaluate`. +Each argument contains items \emph{necessary} for the construction +of any table of function values. +\end{itemize} + +\subsection{Settings inherited from \texttt{numerica}} + +\label{subsec:Inherited-settings} + +Most of the settings available to the command \verb`\nmcEvaluate` +from \verb`numerica` are also available to \verb`\nmcTabulate`. +To save switching between documents I reproduce the table of relevant +options found in \verb`numerica.pdf` (only the punctuation \verb`p` +setting is missing), although for discussion of the options you will +need to refer to that document. (Note that the setting \verb`vvmode` +of v.1 of \verb`numerica` is still available; it is equivalent to +the \verb`vv@` setting.) The \verb`dbg` (and \verb`view`) keys +have been disabled for \verb`\nmcTabulate` at present (but might +be enabled in the future). + +\begin{table}[h] +\noindent \centering{}\caption{\protect\label{tab:introSettingsInherited}Settings options inherited +from \texttt{\textbackslash nmcEvaluate}} +\noindent \begin{center} +\begin{tabular}{ll>{\raggedright}p{4cm}>{\raggedright}p{4cm}} +\toprule +{\small key} & {\small type} & {\small meaning} & {\small default}\tabularnewline +\midrule +{\small\texttt{dbg}} & {\small int} & {\small debug `magic' integer} & {\small\texttt{0}}\tabularnewline +{\small\texttt{view}} & & {\small equivalent to }{\small\texttt{dbg=1}} & \tabularnewline +{\small\texttt{\textasciicircum}} & {\small char} & {\small exponent mark for sci. notation input} & {\small\texttt{e}}\tabularnewline +{\small\texttt{xx}} & {\small int (}{\small\texttt{0}}{\small /}{\small\texttt{1}}{\small )} & {\small multi-token variable switch} & {\small\texttt{1}}\tabularnewline +{\small\texttt{()}} & {\small int (}{\small\texttt{0}}{\small /}{\small\texttt{1}}{\small /}{\small\texttt{2}}{\small )} & {\small trig. function arg. parsing} & {\small\texttt{0}}\tabularnewline +{\small\texttt{o}} & & {\small degree switch for trig. functions} & \tabularnewline +{\small\texttt{log}} & {\small num} & {\small base of logarithms for }{\small{\small\verb`\log`}} & {\small\texttt{10}}\tabularnewline +{\small\texttt{vv@}} & {\small int (0/1)} & {\small vv-list calculation mode} & {\small\texttt{0}}\tabularnewline +{\small\texttt{vvd}} & {\small tokens} & {\small vv-list display-style spec.} & {\small\texttt{\{,\}\textbackslash mskip 12mu plus 6mu minus 9mu(vv)}}\tabularnewline +{\small\texttt{vvi}} & {\small tokens} & {\small vv-list text-style spec.} & {\small\texttt{\{,\}\textbackslash mskip 36mu minus 24mu(vv)}}\tabularnewline +{*} & & {\small suppress equation numbering if }{\small\texttt{\textbackslash\textbackslash}}{\small{} +in }{\small\texttt{vvd}} & \tabularnewline +{\small\texttt{S+}} & {\small int} & {\small extra rounding for stopping criterion for sums} & {\small\texttt{2}}\tabularnewline +{\small\texttt{S?}} & {\small$\text{int}\ge0$} & {\small stopping criterion query terms for sums} & {\small\texttt{0}}\tabularnewline +{\small\texttt{P+}} & {\small int} & {\small extra rounding for stopping criterion for products} & {\small\texttt{2}}\tabularnewline +{\small\texttt{P?}} & {\small$\text{int}\ge0$} & {\small stopping criterion query terms for products} & {\small\texttt{0}}\tabularnewline +\bottomrule +\end{tabular} +\par\end{center} +\end{table} + + +\chapter{\texttt{\textbackslash nmcTabulate} settings} + +\label{chap:=00005CnmcTabulate-settings}In addition to the shared +settings, \verb`\nmcTabulate` has many settings specific to it. They +are discussed in groups in subsequent sections, some in more than +one place. For the main discussion of row-variable settings, see §\ref{sec:Row-variable-settings}; +for column-variable settings see §\ref{sec:Column-variable-settings}; +for whole-of-table formatting see §\ref{sec:Whole-of-table-formatting}; +for formatting the function values in table cells see §\ref{sec:Function-value-formatting}. + +\section{Row-variable settings} + +\label{sec:Row-variable-settings} +\begin{table}[b] +\centering{}\caption{Row-variable specification} +\begin{center} +\begin{tabular}{ll>{\raggedright}p{4cm}>{\raggedright}p{3cm}} +\toprule +{\small key} & {\small type} & {\small meaning} & {\small comment}\tabularnewline +\midrule +{\small\texttt{rvar}} & {\small token(s)} & {\small row-variable} & \tabularnewline +{\small\texttt{rstep}} & {\small real num.} & {\small step size} & \tabularnewline +{\small\texttt{rstop}} & {\small real num.} & {\small stop value} & \multirow{2}{3cm}{use only one of {\small\texttt{rstop}}{\small{} or }{\small\texttt{rows}}}\tabularnewline +{\small\texttt{rows}} & {\small int} & {\small number of rows} & \tabularnewline +{\small\texttt{rspec}} & {\small comma list} & {\small\texttt{\{rvar}}{\small , }{\small\texttt{step}}{\small , }{\small\texttt{rows\}}} & {\small short form spec.}\tabularnewline +\bottomrule +\end{tabular} +\par\end{center} +\end{table} +Deciding on a function to tabulate (entered in the main or mandatory +argument of \verb`\nmcTabulate`) will inevitably also mean deciding +on the tabulation variable, the \emph{row} variable, \verb`rvar`, +what value to start tabulating from (which is specified in the vv-list), +what value to tabulate to, \verb`rstop`, and how fine-grained the +tabulation is to be, the step size \verb`rstep`. + +The two tables in the first example below tabulate $\sin x$ and $\cos x$ +between $0$ and $1$ in increments of $0.2$. Note that the start +value of the tabulation variable is entered in the vv-list. The reason +for placing it there is that for more complicated functions other +parameters in the function and therefore in the vv-list may depend +on the row variable. Although it will often be the first entry in +the vv-list, it does not need to be. The initial value of the row +variable may depend on other quantities which must necessarily precede +it \textendash{} lie to the right of it \textendash{} in the list. + +In the vv-list, the start value of the row variable may be a \LaTeX{} +expression. Both \verb`rstep` and \verb`rstop` can also be \LaTeX{} +expressions. However, they are evaluated \emph{after} the vv-list +is evaluated and so may depend on the values of variables in the vv-list, +including the initial value of the row variable. + +The difference in appearance of the two tables below results from +padding with zeros in the second (the asterisk in the trailing optional +argument has the same effect in \verb`\nmcTabulate` as in \verb`\nmcEvaluate`). +As you can see, padding applies not only to the values of the function +but also to the values of the row variable \textendash{} and makes +an obvious improvement to the table's appearance. +\begin{verbatim} + \tabulate[rvar=x,rstep=0.2,rstop=1] + { \sin x }[x=0]\qquad + \tabulate[rvar=x,rstep=0.2,rstop=1] + { \cos x }[x=0][*] +\end{verbatim} +$\Longrightarrow$ \tabulate[rvar=x,rstep=0.2,rstop=1] + { \sin x }[x=0] \qquad + \tabulate[rvar=x,rstep=0.2,rstop=1] + { \cos x }[x=0][*]\medskip{} + +Sometimes (perhaps often) it may prove more convenient to specify +the number of rows, \verb`rows`, explicitly rather than a stop value. +Only one of \verb`rows` and \verb`rstop` should be given, but if +both (inadvertently) are present, it is the value of \verb`rows` +that prevails. The first of the following three tables shows an example +of use. + +The second and third tables use an abbreviated form of the row-variable +specification, \verb`rspec`. This is a three-element comma list, +\verb`{rvar,rstep,rows}`. The second table gives a straightforward +example of use. In the third table a \LaTeX{} expression has been inserted +for \verb`rows` in the \verb`rspec` comma list. Like \verb`rstep` +and \verb`rstop`, \verb`rows` can be a \LaTeX{} expression, but it +is evaluated \emph{before} the vv-list and therefore, unlike \verb`rstep` +and \verb`rstop`, cannot depend on quantites specified there like +the row variable. +\begin{verbatim} + \tabulate[rvar=x,rstep=0.2,rows=6] + { \sin x/\cos x }[x=0][*] \qquad + \tabulate[rspec={x,0.2,6}] + { \tan x }[x=0][*] \qquad + \tabulate[rspec={x,0.2,1+(1/0.2)}] + { \sqrt{\sec^2 x - 1} }[x=0][*] +\end{verbatim} +$\Longrightarrow$ \tabulate[rvar=x,rstep=0.2,rows=6] + { \sin x/\cos x }[x=0][*] \qquad + \tabulate[rspec={x,0.2,6}] + { \tan x }[x=0][*] \qquad + \tabulate[rspec={x,0.2,1+(1/0.2)}] + { \sqrt{\sec^2 x - 1} }[x=0][*]\medskip{} + +\noindent\begin{minipage}[t]{1\columnwidth}% +\begin{shaded}% +In version 1 of \verb`numerica` (when \verb`\nmcTabulate` became +available with the package option \verb`tables`), the third item +in \verb`rspec` was not restricted to \verb`rows` but could also +be \verb`rstop`; parentheses placed around the third item assigned +it to \verb`rows` rather than \verb`rstop`. On reflection, this +now seems obscure and open to error. In v.2 of \verb`numerica-tables` +(in fact its first version as a separate package) the third item of +\verb`rspec` is restricted to \verb`rows` only, which no longer +needs to be parenthesized.\end{shaded}% +\end{minipage} + +\subsection{Row-variable column formatting} + +\label{subsec:Row-var-col-formatting}The padding option ({*}) of +the trailing optional argument is one way of formatting the row-variable +column, but to how many decimal places? Aligned left or right or centred? +Under what heading \textendash{} the example tables so far have simply +used the row variable for the header? And should the row variable +column be at the left of the table, or the right \textendash{} or +both? These and related questions are answered by assigning values +to the keys listed in Table~\ref{tab:Formatting-the-row-variable}. +\begin{table}[H] +\centering{}\caption{\protect\label{tab:Formatting-the-row-variable}Formatting the row-variable +column} +\begin{center} +\begin{tabular}{ll>{\raggedright}p{4cm}l} +\toprule +{\small key} & {\small type} & {\small meaning} & {\small default}\tabularnewline +\midrule +{\small\texttt{rround}} & {\small int} & {\small rounding} & {\small\texttt{1}}\tabularnewline +{\small\texttt{ralign}} & {\small char (}{\small\texttt{r/c/l}}{\small )} & {\small horizontal alignment} & {\small\texttt{r}}\tabularnewline +{\small\texttt{rfont}} & {\small chars} & {\small font (}{\small\verb`\math<chars>`}{\small )} & \tabularnewline +{\small\texttt{rhead}} & {\small tokens} & {\small header} & {\small\texttt{rvar}}\tabularnewline +{\small\texttt{rhnudge}} & int & {\small nudge header }{\small{\small\verb`<int>`}}{\small{} mu} & {\small\texttt{0}}\tabularnewline +{\small\texttt{rpos}} & {\small int (}{\small\texttt{0}}{\small\ldots}{\small\texttt{4}}{\small )} & {\small column position(s) } & {\small\texttt{1}}\tabularnewline +{\small\texttt{rvar'}} & {\small tokens} & {\small 2nd row-variable col. spec. } & {\small\texttt{rvar}}\tabularnewline +{\small\texttt{rhead'}} & {\small tokens} & {\small header of 2nd rv col. (if it exists)} & {\small\texttt{rvar'}}\tabularnewline +{\small\texttt{rhnudge'}} & int & {\small nudge 2nd rv col. header }{\small{\small\verb`<int>`}}{\small{} +mu} & {\small\texttt{0}}\tabularnewline +\bottomrule +\end{tabular} +\par\end{center} +\end{table} + + +\subsubsection{Rounding: \texttt{rround}} + +After studying the previous tables, we might decide to adjust the +step size, say from $0.2$ to $0.25$. But changing \texttt{rstep} +to the new value gives a disconcerting result (the first table below). +\texttt{numerica-tables} uses a default rounding value of $1$ for +the row variable and has rounded $0.25$ down to $0.2$ and $0.75$ +up to $0.8$ accordingly. The second table corrects matters by adjusting +the row-variable rounding (\texttt{rround}) to \texttt{2}. +\begin{verbatim} + \tabulate[rvar=x,rstep=0.25,rstop=1] + { \sin x }[x=0][*] (Eh???) \quad + \tabulate[rvar=x,rstep=0.25,rstop=1,rround=2] + { \sin x }[x=0][*] +\end{verbatim} +$\Longrightarrow$ \tabulate[rvar=x,rstep=0.25,rstop=1] + { \sin x }[x=0][*](Eh???) \quad + \tabulate[rvar=x,rstep=0.25,rstop=1,rround=2] + { \sin x }[x=0][*] + +\subsubsection{Alignment: \texttt{ralign}} + +By default, the alignment of all columns is to the right, as in the +previous examples. This lends itself to neat output when padding with +zeros is activated (the \verb`*` in the trailing argument) and when +some values are negative \textendash{} minus signs can interfere +with neat output in left or centred alignments. But in a case like +the second table in the last example, you might prefer to centre the +headers for both the row and function-value columns. These alignments +are independently set. For the row-variable column the default alignment +is to the right \texttt{ralign=r}; \texttt{ralign=l} (lowercase L) +aligns entries in the row-variable column to the left, and \texttt{ralign=c} +centres entries in the row-variable column. The tables of the next +example use a \texttt{c} alignment to centre the row-variable column +header. The third of those tables shows how minus signs spoil the +effect. + +\subsubsection{Font: \texttt{rfont}} + +In the second table below bolding by means of the setting \verb`rfont=bf` +has been applied to emphasize the distinction between the row-variable +values and the function values. Possible values for this key are those +characters that can be adjoined to \verb`\math` to give a meaningful +result. Thus other valid values are \verb`it` (italic), \verb`sf` +(sans serif), \verb`tt` (typewriter); \verb`frak` (Fraktur); also +\verb`rm` (roman) is available, but that is the default. + +\subsubsection{Row-variable header: \texttt{rhead}} + +In the second and third tables, the header for the row-variable column +has also been bolded. The default header is the row-variable symbol. +That can be replaced by giving a value to the key \texttt{rhead}. +I have used \texttt{rhead=\textbackslash boldsymbol\{x\}} (rather +than \verb`\mathbf{x}`) in order to get an italicized bold symbol. +Note that you do not need to include math delimiters in the specification. +It is assumed that \verb`rhead` will sit between \verb`$ $` delimiters +which are inserted automatically by \verb`numerica-tables`. +\begin{verbatim} + \tabulate + [rvar=x,rstep=0.25,rstop=1, + rround=2,ralign=c] + { \sin x }[x=0][*]\qquad + \tabulate + [rvar=x,rstep=0.25,rstop=1,rround=2, + ralign=c,rfont=bf,rhead=\boldsymbol{x}] + { \sin x }[x=0][*]\qquad + \tabulate + [rvar=x,rstep=0.25,rstop=0.5,rround=2, + ralign=c,rfont=bf,rhead=\boldsymbol{x}] + { \sin x }[x=-0.5][*] +\end{verbatim} +$\Longrightarrow$ \tabulate + [rvar=x,rstep=0.25,rstop=1, + rround=2,ralign=c] + { \sin x }[x=0][*]\qquad + \tabulate + [rvar=x,rstep=0.25,rstop=1, + rround=2,ralign=c,rfont=bf,rhead=\boldsymbol{x}] + { \sin x }[x=0][*]\qquad + \tabulate + [rvar=x,rstep=0.25,rstop=0.5,rround=2, + ralign=c,rfont=bf,rhead=\boldsymbol{x}] + { \sin x }[x=-0.5][*]\medskip{} + +In these tables the row-variable column has been given a centred alignment. +The third table shows what goes wrong when \emph{some} values in the +row-variable column are negative. Better then is to use padding, a +right alignment (the default), and to use a phantom in the header. +The first table below does this. The second table incorporates kerning +into the header to achieve the same effect: +\begin{verbatim} + \tabulate + [rvar=x,rstep=0.25,rstop=0.5,rround=2, + rfont=bf,rhead=\boldsymbol{x}\hphantom{0}] + { \sin x }[x=-0.5][*]\qquad + \tabulate + [rvar=x,rstep=0.25,rstop=0.5,rround=2, + rfont=bf,rhead=\boldsymbol{x}\mkern 9 mu] + { \sin x }[x=-0.5][*] +\end{verbatim} +$\Longrightarrow$ \tabulate + [rvar=x,rstep=0.25,rstop=0.5,rround=2, + rfont=bf,rhead=\boldsymbol{x}\hphantom{0}] + { \sin x }[x=-0.5][*]\qquad + \tabulate + [rvar=x,rstep=0.25,rstop=0.5,rround=2, + rfont=bf,rhead=\boldsymbol{x}\mkern 9 mu] + { \sin x }[x=-0.5][*]\medskip{} + +(To my eye, aligning the $\boldsymbol{x}$ above the first column +of digits after the decimal point gives a better result than truly +centring it in the column; compare these examples with the first two +tables of the previous example.) + +\subsubsection{Nudging~the~header: \texttt{rhnudge}} + +However, you might prefer to avoid inserting positioning commands +into the actual row-variable header, obscuring its true content. You +can avoid doing this by setting the key \texttt{rhnudge}. + +The first table below reverts to the default right alignment, avoids +any positioning commands in the row-variable header, but instead nudges +it into position with the setting \texttt{rhnudge=9}. For positive +nudge values, nudging works in the \emph{opposite} sense to the alignment. +The units for nudging are mu (math units, 18 to a quad), but only +a number \textendash{} generally an integer \textendash{} should be +specified; the `mu' is supplied by \verb`numerica-tables`. + +In the second table below the row variable takes single digit integer +values, while the row-variable name now occupies more than one character. +With a right alignment the header would protrude out to the left. +By giving \texttt{rhnudge} a \emph{negative} value (\texttt{rhnudge=-12} +in the example) it is brought back to a centred position in the row-variable +column. +\begin{verbatim} + \tabulate + [rvar=x,rstep=0.25,rstop=0.5,rround=2, + rfont=bf,rhead=\boldsymbol{x},rhnudge=9] + { \sin x }[x=-0.5][4*]\qquad + \tabulate + [rvar=x_{\text{int}},rstep=1,rstop=4, + rround=0,rfont=bf,rhnudge=-12, + rhead=\boldsymbol{x_{\text{int}}}] + { \sin x_{\text{int}} }[x_{\text{int}}=0][4*] +\end{verbatim} +$\Longrightarrow$ \tabulate + [rvar=x,rstep=0.25,rstop=0.5,rround=2, + rfont=bf,rhead=\boldsymbol{x},rhnudge=9] + { \sin x }[x=-0.5][4*]\qquad + \tabulate + [rvar=x_{\text{int}},rstep=1,rstop=4, + rround=0,rfont=bf,rhnudge=-12, + rhead=\boldsymbol{x_{\text{int}}}] + { \sin x_{\text{int}} }[x_{\text{int}}=0][4*] + +\subsubsection{Position in the table: \texttt{rpos}} + +\label{subsec:Row-var-col-pos}By default, the row-variable column +is the \emph{first} column of the table. Its position is determined +by the value of the key \texttt{rpos}: +\begin{itemize} +\item \texttt{rpos=0}, suppressed (no row-variable column); +\item \texttt{rpos=1}, first column (the default); +\item \texttt{rpos=2}, last column; +\item \texttt{rpos=3}, first and last columns;\texttt{ } +\item \texttt{rpos=4}, first and last columns, with the values in the last +column a user-defined function of the first; see §\ref{subsec:Second-row-var-col}; +\item Any other integer acts like \texttt{rpos=1}. +\end{itemize} +An example with \texttt{rpos=3} is given shortly below, §\ref{subsec:Multiple-function-tables}. + +\subsubsection{\texttt{rvar'}, \texttt{rhead'}, \texttt{rhnudge'}} + +These settings become relevant only when \texttt{rpos=4}; see §\ref{subsec:Second-row-var-col}. + +\subsection{Adjoined multi-function tables} + +\label{subsec:Adjoining-tables}How might one tabulate multiple functions +simultaneously? \emph{HMF} has many, many examples where multiple +functions (like the trigonometric or the hyperbolic functions) are +tabulated in separate columns of the same table. + +With the settings described so far, one way is to adjoin single column +tables. In the tables below, which display as a single multi-columned +table, I have used three different \texttt{rpos} settings (\texttt{rpos=1} +is implicit in the first). This is one way to build a table that displays +as multi-column. If you use this method, note that the \texttt{\%} +comment characters are essential at the end of the last argument of +the \verb`\tabulate` commands if you want the tables to abut exactly. +Omitting them results in a space between the tables. +\begin{verbatim} + \tabulate + [rspec={x,0.2,6}] + { \sin x }[x=0][*]% + \tabulate + [rpos=0,rspec={x,0.2,6}] + { \cos x }[x=0][*]% + \tabulate + [rpos=2,rspec={x,0.2,6}] + { \tan x }[x=0][*] +\end{verbatim} +$\Longrightarrow$ \tabulate + [rspec={x,0.2,6}] + { \sin x }[x=0][*]% + \tabulate + [rpos=0,rspec={x,0.2,6}] + { \cos x }[x=0][*]% + \tabulate + [rpos=2,rspec={x,0.2,6}] + { \tan x }[x=0][*]\medskip{} + +However, tabulating more than one function at a time is too common +a need to have to resort to a fudge like adjoining tables. \verb`numerica-tables` +offers a systematic way of doing this; see §\ref{subsec:Multiple-function-tables}. + +\section{Column-variable settings} + +\label{sec:Column-variable-settings}When a function of \emph{two} +variables is being tabulated, we generally think of one variable as +the primary variable and the other as a parameter. To tabulate such +a function, one way to proceed, is to create and adjoin separate tables, +one per parameter value, but that is clumsy. A more systematic procedure +is to specify, in addition to the row variable, a \emph{column} variable +and its start, step and stop values. + +\begin{table}[t] +\caption{Column-variable specification} + +\centering{}\begin{center} +\begin{tabular}{ll>{\raggedright}p{4cm}l} +\toprule +{\small key} & {\small type} & {\small meaning} & {\small default}\tabularnewline +\midrule +{\small\texttt{cvar}} & {\small token(s)} & {\small column-variable} & \tabularnewline +{\small\texttt{cstep}} & {\small real num.} & {\small step size} & \tabularnewline +{\small\texttt{cstop}} & {\small real num.} & {\small stop value} & {\small either }{\small\texttt{cstop}}\tabularnewline +{\small\texttt{cols}} & {\small int} & {\small number of columns} & {\small or }{\small\texttt{cols}}\tabularnewline +{\small\texttt{cspec}} & {\small comma list} & {\small\texttt{\{cvar,cstep}}{\small ,}{\small\texttt{cols\}}} & {\small short form spec.}\tabularnewline +\bottomrule +\end{tabular} +\par\end{center} +\end{table} +In the following example \verb`cvar=k` is the column variable. I +have chosen a step size \verb`cstep=2` and a stop value \verb`cstop=9`. +As with the row variable, the start value ({\ttfamily\verb`k=3`}) +of the column variable is specified in the vv-list. Although in the +example these values are numbers, all three values could be \LaTeX{} +expressions that evaluate to numbers. In particular, the expressions +for step and stop values may include the row and column variables +(in the example $x$ and $k$) which are assigned their initial vv-list +values. Note also the setting for \verb`rhead` which shows the reader +of the table that the numerical values displayed in the column headers +are values of \verb`k`. This usage occurs throughout \emph{HMF}. +\begin{verbatim} + \tabulate + [rspec={x,0.2,6},rhead=x\backslash k, + cvar=k,cstep=2,cstop=9] + { \sin kx }[k=3,x=0][*] +\end{verbatim} +$\Longrightarrow$ \tabulate + [rspec={x,0.2,6},rhead=x\backslash k, + cvar=k,cstep=2,cstop=9] + { \sin kx }[k=3,x=0][*] \medskip{} + +Again, as with the row variable, rather than using an explicit stop +value\texttt{ }{\ttfamily\verb`cstop`}, you might prefer +to specify the number of columns, \verb`cols`, explicitly. I could +have replaced {\ttfamily\verb`cstop=9`} with \verb`cols=4` +to get the same result. Note that the number of columns specified +here is the number of \emph{function-value} columns; the row-variable +column is ignored for this count. + +It is worth pointing out explicitly that if \verb`cols` is specified, +then it is possible to have a \emph{zero} step size, \verb`cstep=0`. +An example where this is useful is presented in §\ref{subsec:Footer-functions}. +(A similar comment applies to \verb`rows` and \verb`rstep`.) + +And again, as with the row variable, it is possible to condense the +specification into a comma list with the key \verb`cspec`. This is +a $3$-element comma list of the form \verb`{cvar,cstep,cols}`.\footnote{This is a change from v.1 of \texttt{numerica}; see the boxed comment +at the end of §\ref{sec:Row-variable-settings}.} Thus, for the preceding table I could have written +\begin{verbatim} + \tabulate + [rspec={x,0.2,6},rhead=x\backslash k, + cvar=k,cstep=2,cols=4] + { \sin kx }[k=3,x=0][*] +\end{verbatim} +or +\begin{verbatim} + \tabulate + [rspec={x,0.2,6},rhead=x\backslash k, + cspec={k,2,4}] + { \sin kx }[k=3,x=0][*] +\end{verbatim} +and produced the same table. + +\verb`cstep`, \verb`cstop` and \verb`cols` can all be \LaTeX{} expressions. +The first two are evaluated \emph{after }the vv-list; \verb`cols` +is evaluated \emph{before }the vv-list. Hence \verb`cstep` and \verb`cstop` +may depend on the row and column variables, which are given their +initial values in the vv-list. + +\subsection{Column header formatting} + +\label{subsec:Column-header-formatting}There are four built-in style +settings for the header to the column-variable (or function-value) +columns (the `ch' prefix evoking `column header'). If these don't +meet your needs or otherwise satisfy, then it is possible to define +your own header to the function value columns using the key \verb`chead`. +First I discuss the built-in styles. + +\subsubsection{Header style: single-column case} + +\begin{table} +\centering{}\caption{Formatting the column-variable header} +\begin{center} +\begin{tabular}{ll>{\raggedright}p{4cm}l} +\toprule +{\small key} & {\small type} & {\small meaning} & {\small default}\tabularnewline +\midrule +{\small\texttt{chstyle}} & {\small int (0\ldots 4)} & {\small header style} & {\small\texttt{0}}\tabularnewline +{\small\texttt{ctitle}} & {\small tokens} & {\small single col. alternative header} & \tabularnewline +{\small\texttt{chead}} & {\small tokens} & {\small user-defined header} & \tabularnewline +{\small\texttt{calign}} & {\small char (r/c/l)} & {\small column alignment} & {\small\texttt{r}}\tabularnewline +{\small\texttt{chnudge}} & {\small int} & {\small nudge header }{\small{\small\verb`int`}}{\small{} mu} & {\small\texttt{0}}\tabularnewline +{\small\texttt{chround}} & {\small int} & {\small column header rounding} & {\small\texttt{0}}\tabularnewline +\bottomrule +\end{tabular} +\par\end{center} +\end{table} +When there is only one column of function values, the function being +tabulated is by default set as the header to the column. This corresponds +to setting \texttt{ctitle={*}} (see §\ref{subsec:Title:-ctitle-setting} +below). You may want some other header. Then give \texttt{ctitle} +some other value (although note that giving it the value \texttt{{*}{*}} +will set both the function and the vv-list as the header; again see +§\ref{subsec:Title:-ctitle-setting}). Whatever value you set, it +will be typeset between math delimiters (\verb`$` signs) and can +be nudged (see §\ref{subsec:Nudgingtheheaders:-chnudge}) left or +right to fine-tune its position in the column. (If you want an asterisk +as the header, you will need to place it between \emph{two} pairs +of braces, \texttt{ctitle=\{\{{*}\}\}}, to prevent it being misinterpreted +as the default setting.) + +If you want some more complicated header, perhaps not constrained +by the \verb`$` delimiters, then give \texttt{chead} a value. This +key I discuss below in §\ref{subsec:chead}. \texttt{chead} is entirely +up to the user to specify, including any math environment and positioning. + +If both \texttt{ctitle} and \texttt{chead} are given, the \texttt{chead} +value prevails. + +\subsubsection{Header~style: multi-column case} + +\texttt{chstyle=0} which is the default gives a header of the form +displayed in the last example, with only the column-variable \emph{value} +at the head of each column. This style generally requires the row-variable +header to indicate what the values denote, as in the example above +where \texttt{rhead=x\textbackslash backslash k}, the backslash separating +row from column variable. \emph{HMF} contains a multitude of instances +of this style; see Tables~9.7, 17.5, 21.1, 24.3, 27.4, etc. for examples. + +\texttt{chstyle=1} changes the header of the \emph{first} function +value column to the form \emph{variable=value} \textendash{} in the +example below, to $k=3$. This may be an appropriate choice when a +small rounding value is being used and the resulting columns are narrow. +I can find only one real instance in \emph{HMF}, Table~26.7. Note +that the row-variable setting \texttt{rhead} no longer needs the \texttt{\textbackslash backslash +k} part since the column variable is now explicitly indicated. (The +first table in the example below.) + +\texttt{chstyle=2} changes the header of all function-value columns +to the form \emph{variable=value}.\emph{ }In \emph{HMF} examples are +Tables~7.4, 7.9, 10.10, 16.6, etc. Again, the row-variable setting +\texttt{rhead} no longer needs the \texttt{\textbackslash backslash +k} part since the column variable is now explicitly indicated (the +second table in the example). +\begin{verbatim} + \tabulate + [rspec={x,0.2,6}, + cspec={k,2,3},chstyle=1] + { \sin kx }[k=3,x=0][3*]\quad + \tabulate + [rspec={x,0.2,6}, + cspec={k,2,3},chstyle=2] + { \sin kx }[k=3,x=0][3*] +\end{verbatim} +$\Longrightarrow$ \tabulate + [rspec={x,0.2,6}, + cspec={k,2,3},chstyle=1] + { \sin kx }[k=3,x=0][3*]\quad + \tabulate + [rspec={x,0.2,6}, + cspec={k,2,3},chstyle=2] + { \sin kx }[k=3,x=0][3*]\medskip{} + +\texttt{chstyle=3} fills each column-variable header with the expression +being tabulated but with the column variable replaced by its respective +values. See \emph{HMF} Tables~5.4, 8.1, 9.1, 19.1, etc. for examples. +Note that if the column-variable value is \verb`1`, the \verb`1` +will be displayed: +\begin{verbatim} + \tabulate + [rspec={x,0.2,6}, + cspec={k,2,3},chstyle=3] + { \sin kx }[k=1,x=0][4*] +\end{verbatim} +$\Longrightarrow$ \tabulate + [rspec={x,0.2,6}, + cspec={k,2,3},chstyle=3] + { \sin kx }[k=1,x=0][4*]\medskip{} + +In this last example you may not want the \verb`1` displayed. To +achieve that result put \texttt{chstyle=4}. This results in a header +as for \texttt{chstyle=3} but if the column variable takes the value +\verb`1`, it has an empty replacement: +\begin{verbatim} + \tabulate + [rspec={x,0.2,6}, + cspec={k,2,3},chstyle=4] + { \sin kx }[k=1,x=0][4*] +\end{verbatim} +$\Longrightarrow$ \tabulate + [rspec={x,0.2,6}, + cspec={k,2,3},chstyle=4] + { \sin kx }[k=1,x=0][4*] + +\subsubsection{User-defined header: \texttt{chead}} + +\label{subsec:chead}If the function in the last example were, for +instance, $k+\sin kx$, then neither replacing $k$ by \verb`1` nor +an empty replacement would be appropriate. In that case the only recourse +is to use the \verb`chead` key. Users can assign whatever value they +like to \verb`chead`. The assignment must contain the correct number +of tab characters (\verb`&`) for the \emph{column-variable columns +only}. It is a header only to the function-value columns. The user +will need to insert \verb`$` signs or other math delimiters as appropriate. +This differs from the practice for \verb`rhead`, but \verb`chead` +is potentially far more complicated. Thus for $k+\sin kx$, +\begin{verbatim} + \tabulate + [rspec={x,0.2,6}, + cspec={k,2,3}, + chead=$1+\sin x$&$3+\sin3x$&$5+\sin 5x$] + { k+\sin kx }[k=1,x=0][4*] +\end{verbatim} +$\Longrightarrow$ \tabulate + [rspec={x,0.2,6}, + cspec={k,2,3}, + chead=$1+\sin x$&$3+\sin3x$&$5+\sin 5x$] + { k+\sin kx }[k=1,x=0][4*]\medskip{} + +\noindent Non-empty content for the \verb`chead` key overrides any +\verb`chstyle` setting and, in the case of a table with only a single +function-value column, overrides any \verb`ctitle` setting.$ $ + +\subsubsection{Alignment: \texttt{calign}} + +The function-value columns are aligned right, \verb`calign=r`, by +default. Also available are \verb`calign=c` for centred alignment +and \verb`calign=l` (lowercase L) for left alignment. Using centred +alignment with {\ttfamily\verb`chstyle=2`} in a previous +example table gives +\begin{verbatim} + \tabulate + [rspec={x,0.2,6},ralign=c, + cspec={k,2,3},chstyle=2,calign=c] + { \sin kx }[k=3,x=0][*] +\end{verbatim} +$\Longrightarrow$ \tabulate + [rspec={x,0.2,6},rhead=x,ralign=c, + cspec={k,2,3},chstyle=2,calign=c] + { \sin kx }[k=3,x=0][*]\medskip{} + +\noindent The first column of function values looks better, but the +minus signs spoil the effect in the others. Handling signs in tables +is discussed below; see §\ref{subsec:Signs}. + +\subsubsection{Nudging~the~headers: \texttt{chnudge}} + +\label{subsec:Nudgingtheheaders:-chnudge}In left or right alignment +it is possible to nudge the headers in the opposite direction by giving +a numerical value to the the key \verb`chnudge`. The header is moved +by the specified number of mu (math units; 18 to a quad). Note that +the `mu' does not need to be written. {\ttfamily\verb`numerica-tables`} +provides that. In the next example I have chosen \verb`chnudge=12` +to nudge the column headers to the left to give a centred effect to +the header but leaving the function values with their (potentially) +awkward minus signs right aligned. +\begin{verbatim} + \tabulate + [rspec={x,0.2,6},ralign=c, + cspec={k,2,3},chstyle=2,chnudge=12] + { \sin kx }[k=3,x=0][*] +\end{verbatim} +$\Longrightarrow$ \tabulate + [rspec={x,0.2,6},ralign=c, + cspec={k,2,3},chstyle=2,chnudge=12] + { \sin kx }[k=3,x=0][*]\medskip{} + +The \verb`chnudge` value does not need to be positive. Negative nudges +can be useful when a column header is \emph{longer} than the rounded +function values. In the second example below, I've reduced the rounding +value for function values to $3$, and chosen an initial $k$ value +of $100$ to ensure this circumstance. To centre the column headers +I have used \verb`chnudge=-9`. +\begin{verbatim} + \tabulate + [rspec={x,0.2,6},ralign=c, + cspec={k,2,3},chstyle=2,chnudge=-9] + { \sin kx }[k=100,x=0][3*] +\end{verbatim} +$\Longrightarrow$ \tabulate + [rspec={x,0.2,6},ralign=c, + cspec={k,2,3},chstyle=2,chnudge=-9] + { \sin kx }[k=100,x=0][3*] + +\subsubsection{Rounding: \texttt{chround}} + +In the examples so far, the column variable has incremented in integer +steps. The default rounding value for the column variable is $0$ +(for the row variable it is $1$), so if it increments by some non-integer +amount, the result will be confusing \textendash{} if $k$ incremented +by, say, $0.25$, starting from $k=3$, then the next column would +also have a header $k=3$ (since $3.25$ with a rounding value $0$ +rounds to $3$). The appropriate key to remedy this state of affairs +is {\ttfamily\verb`chround`}. For a step size of $0.25$ +the appropriate setting is {\ttfamily\verb`chround=2`}. +\begin{verbatim} + \tabulate + [rspec={x,0.2,6},ralign=c, + cspec={k,0.25,3},chstyle=2,chround=2] + { \sin kx }[k=3,x=0][*] +\end{verbatim} +$\Longrightarrow$ \tabulate + [rspec={x,0.2,6},rhead=x,ralign=c, + cspec={k,0.25,3},chstyle=2,chround=2] + { \sin kx }[k=3,x=0][*] + +\section{Multiple functions in a single table} + +\label{subsec:Multiple-function-tables}As already noted in §\ref{subsec:Adjoining-tables}, +tabulating more than one function at a time is too common a need to +have to resort to a fudge like adjoining tables. There is a systematic +way of handling this task available in \verb`numerica-tables`. In +v.1 of \verb`numerica`, it sufficed to enter the functions in the +main argument separated by commas, and to \emph{precede the first +function with a comma}, which was the signal \texttt{numerica} needed +to make the internal adjustments for a multi-function table. In v.2 +of \verb`numerica-tables` this option is still available, but rather +than use a `trick' like preceding the first function with a comma, +the preferred option now is to use a new (with v.2) setting, \verb`multifn`. + +The first table below uses the old `trick' of starting the main +argument with a comma; the second table uses the \verb`multifn` setting +(and note in both the \verb`o` setting indicating that the arguments +of $\sin$ and $\cos$ are in degrees): +\begin{verbatim} + \tabulate[o, rround=0, + rvar=\theta,rstep=10,rstop=90] + { ,\sin \theta,\cos \theta }[\theta=0][*] + \quad + \tabulate[o,multifn,rpos=2,rround=0, + rvar=\theta,rstep=10,rstop=90] + { \sin \theta,\cos \theta }[\theta=0][*] +\end{verbatim} +$\Longrightarrow$ \tabulate[o,rvar=\theta,rstep=10,rstop=90, + rround=0] + { ,\sin \theta,\cos \theta }[\theta=0][*] + \quad + \tabulate[o,multifn,rpos=2,rvar=\theta,rstep=10, + rstop=90,rround=0] + { \sin \theta,\cos \theta }[\theta=0][*]\medskip{} + +These tables suggest a space saving possibility: since $\sin$ and +$\cos$ are complementary functions ($\cos\theta=\sin(90-\theta)$), +the values in the bottom half of the table duplicate values in the +top half, only with the columns reversed. This is the reason for the +space saving \texttt{rpos=4} setting (§\ref{subsec:Second-row-var-col}) +which enables complementary functions to be tabulated in `half tables' +(for examples see \emph{HMF} Tables 4.10\textendash 4.12 for the trigonometric +functions). + +A comma may not always be a convenient separator \textendash{} it +may occur in one of the functions being tabulated (perhaps in \verb`\max` +or \verb`\min`). By assigning a value to the setting \verb`multifn`, +\begin{lyxcode} +multifn=<char> +\end{lyxcode} +the assisgned character can be used to separate the functions. In +the following example, a semicolon is used. Further, the row-variable +column is duplicated on the right by using the \verb`rpos=3` setting, +and the table gives another illustration of the use of \verb`chead`: +\begin{verbatim} + \tabulate[o,multifn=;,rpos=3,rround=0, + rvar=\theta,rstep=10,rstop=90, + chead=max\hphantom{00} & min\hphantom{00}] + { \max(\sin \theta,\cos \theta); + \min(\sin \theta,\cos \theta) } + [\theta=0][*] +\end{verbatim} +$\Longrightarrow$ \tabulate[o,multifn=;,rpos=3,rvar=\theta, + rstep=10,rstop=90,rround=0, + chead=max\hphantom{00} & min\hphantom{00}] + { \max(\sin \theta,\cos \theta); + \min(\sin \theta,\cos \theta) } + [\theta=0][*] \medskip{} + +The glaring omission in the table is any explicit statement of what +the functions are that are being tabulated. Maximum and minimum, yes, +but of what? That is (potentially) remedied with the \verb`ctitle` +setting discussed next; see §\ref{subsec:Title:-ctitle-setting}. + +\section{Whole-of-table formatting} + +\label{sec:Whole-of-table-formatting}There are a number of settings +pertaining to the appearance of the table as a whole, things like +the position of the row-variable column, division of the function +values into blocks to aid readability, the presence of horizontal +rules or of a collective column title or of a footer row. I discuss +these here. + +\begin{table}[H] +\noindent \centering{}\caption{\protect\label{tab:Table-formatting-settings}Table formatting} +\noindent \begin{center} +\begin{tabular}{ll>{\raggedright}p{4cm}l} +\toprule +{\small key} & {\small type} & {\small meaning} & {\small default}\tabularnewline +\midrule +{\small\texttt{ctitle}} & {\small token(s)} & {\small collective title for function-value columns} & \tabularnewline +{\small\texttt{cmidrow}} & {\small token(s)} & {\small inter-header/title row for} {\small function-value columns} & \tabularnewline +{\small\texttt{rules}} & {\small char(s)} & {\small horizontal rules template} & {\small\texttt{ThB}}\tabularnewline +{\small\texttt{foot}} & {\small token(s)} & {\small content of footer line} & \tabularnewline +{\small\texttt{rpos}} & {\small int (}{\small\texttt{0}}{\small\ldots}{\small\texttt{4}}{\small )} & {\small row-variable column position(s)} & {\small\texttt{1}}\tabularnewline +{\small\texttt{rbloc}} & {\small comma list} & {\small division of rows into blocks} & \tabularnewline +{\small\texttt{rblocsep}} & {\small length} & {\small extra spacing between blocks of rows} & {\small\texttt{1 ex}}\tabularnewline +\bottomrule +\end{tabular} +\par\end{center} +\end{table} + + +\subsection{Title for function-value columns: \texttt{ctitle}} + +\label{subsec:Title:-ctitle-setting}The function-value columns have +individual headers, formatted in the various ways provided by the +settings discussed in previous sections, but it can also be helpful +to have a collective title for these columns. We saw the need in the +last example. The need is met with the \verb`ctitle` key. This can +be set to whatever you like (e.g. \texttt{ctitle=\textbackslash text\{Fred\}}) +but, to more purpose, I use the setting to clarify the last example: +\begin{verbatim} + \tabulate[o,multifn=;,rpos=3,rround=0, + rvar=\theta,rstep=10,rstop=90, + ctitle=\sin\theta{,}\,\cos\theta, + chead=max\hphantom{00} & min\hphantom{00}] + { \max(\sin \theta,\cos \theta); + \min(\sin \theta,\cos \theta) } + [\theta=0][*] +\end{verbatim} +$\Longrightarrow$ \tabulate[o,multifn=;,rpos=3,rround=0, + rvar=\theta,rstep=10,rstop=90, + ctitle=\sin\theta{,}\,\cos\theta, + chead=max\hphantom{00} & min\hphantom{00}] + { \max(\sin \theta,\cos \theta); + \min(\sin \theta,\cos \theta) } + [\theta=0][*]\medskip{} + +\noindent Now it is clearer what is being tabulated, although the +reader is still being asked to interpret rather than read what the +table is showing. + +There are two in-built settings for \verb`ctitle`: \verb`ctitle=*`, +which makes the formula the title, and \verb`ctitle=**`, which makes +a title of the formula and vv-list. Surely, \verb`ctitle=*` is what +we want: +\begin{verbatim} + \tabulate[o,multifn=;,rpos=3,rround=0, + rvar=\theta,rstep=10,rstop=90, + ctitle=*, + chead=max\hphantom{00} & min\hphantom{00}] + { \max(\sin \theta,\cos \theta); + \min(\sin \theta,\cos \theta) } + [\theta=0][*] +\end{verbatim} +$\Longrightarrow$ \tabulate[o,multifn=;,rpos=3,rround=0, + rvar=\theta,rstep=10,rstop=90, + ctitle=*, + chead=max\hphantom{00} & min\hphantom{00}] + { \max(\sin \theta,\cos \theta); + \min(\sin \theta,\cos \theta) } + [\theta=0][*]\medskip{} + +\noindent Well, that is clear but the length of the title distorts +the table. This is where the \verb`cmidrow` key can help (see below) +but we can also use an \verb`aligned` environment within \verb`ctitle`: +\begin{verbatim} + \tabulate[o,multifn=;,rpos=3,rround=0, + rvar=\theta,rstep=10,rstop=90, + ctitle={\begin{aligned} + \max(\sin\theta,\cos\theta)\\[-0.7ex] + \min(\sin\theta,\cos\theta) + \end{aligned}}, + chead=max\hphantom{00} & min\hphantom{00}] + { \max(\sin \theta,\cos \theta); + \min(\sin \theta,\cos \theta) } + [\theta=0][*] +\end{verbatim} +$\Longrightarrow$ \tabulate[o,multifn=;,rpos=3,rround=0, + rvar=\theta,rstep=10,rstop=90, + ctitle={\begin{aligned} + \max(\sin\theta,\cos\theta)\\[-0.7ex] + \min(\sin\theta,\cos\theta) + \end{aligned}}, + chead=max\hphantom{00} & min\hphantom{00}] + { \max(\sin \theta,\cos \theta); + \min(\sin \theta,\cos \theta) } + [\theta=0][*]\medskip{} + +The table is no longer distorted in width. Note the \verb`\\[-0.7ex]` +within the \verb`aligned` environment. This shrinks the vertical +space between the two lines of the title. Without it, the lines are +too far apart. + +\subsection{Inter-header/title row: \texttt{cmidrow}} + +Some tables need to fit more header material or title material into +their rows than can be comfortably accommodated there. For examples, +see \emph{HMF} Tables 7.9 (error function for complex arguments), +17.7 (Jacobian zeta function), 21.1 (eigenvalues of spheroidal wave +functions), and 26.7 (probability integrals). One way of handling +this problem is to resort to more complicated environments in header +and title rows. Another, more direct way, is to insert a row between +the header row and title row. + +I have chosen \verb`cmidrow` for the key name, in the sense of a +row `mid header and title rows'. The initial `c' emphasizes that +it is constrained to the span of the column-variable (or function-value) +columns only (like \verb`chead` and \verb`ctitle`). The entire content +is the responsibility of the user, +\begin{lyxcode} +cmidrow=<tokens> +\end{lyxcode} +including insertion of the necessary number of tab characters, \verb`&`, +and any math delimiters required. +\begin{verbatim} + \tabulate[o,multifn=;,rpos=3,rround=0, + rvar=\theta,rstep=10,rstop=90, + ctitle=\max(\sin\theta{,}\cos\theta), + cmidrow=\multicolumn{2}{c} + {$\min(\sin\theta,\cos\theta)$}, + chead=max\hphantom{00} & min\hphantom{00}] + { \max(\sin \theta,\cos \theta); + \min(\sin \theta,\cos \theta) } + [\theta=0][*] +\end{verbatim} +$\Longrightarrow$ \tabulate[o,multifn=;,rpos=3,rround=0, + rvar=\theta,rstep=10,rstop=90, + ctitle=\max(\sin\theta{,}\cos\theta), + cmidrow=\multicolumn{2}{c} + {$\min(\sin\theta,\cos\theta)$}, + chead=max\hphantom{00} & min\hphantom{00}] + { \max(\sin \theta,\cos \theta); + \min(\sin \theta,\cos \theta) } + [\theta=0][*]\medskip{} + +\noindent The display looks the same as in the previous example but +was obtained perhaps more straightforwardly. + +\subsection{Horizontal rules: \texttt{rules}} + +\label{subsec:Rules:-rules-setting}The \texttt{booktabs} package +which \texttt{numerica} uses is most emphatic that one should `1. +Never, ever use vertical rules. 2. Never use double rules.' Most +of the tables proper in \emph{HMF} lack rules of any kind although +closer inspection shows smaller tables within the text generally \emph{are} +delimited by horizontal rules (often also with vertical rules).\footnote{The tables in \emph{HMF} are often inelegantly typeset, and sometimes +ugly. For all that, I have used it as a valuable source for the variety +of structures that the editors found necessary, or at least useful, +for presenting a multitude of different kinds of numerical data.} I have used horizontal rules in the various examples in the present +document because these too are tables within text. Some form of delineation +seems necessary. + +\begin{table} +\noindent \centering{}\caption{\protect\label{tab:Rules}Rules. {\small (In the \textquoteleft span\textquoteright{} +column, \textquoteleft f-v\textquoteright =function-value; \textquoteleft r-v\textquoteright =row-variable; +\textquoteleft$<$~table\textquoteright{} indicates that the rule +spans the table but is trimmed at each end.)}} +\noindent \begin{center} +\begin{tabular}{lll>{\raggedright}p{3cm}l} +\toprule +{\small char} & {\small rule} & {\small position} & {\small span} & {\small default rule thickness}\tabularnewline +\midrule +{\small\texttt{T}} & {\small top} & {\small above table} & {\small table} & {\small\texttt{\textbackslash heavyrulewidth=.08em}}\tabularnewline +{\small\texttt{t}} & {\small title} & {\small below title} & {\small f-v cols} & {\small\texttt{\textbackslash cmidrulewidth =.03em}}\tabularnewline +{\small m} & {\small midrow} & {\small below midrow} & {\small f-v cols (if $1$ r-v col.)}{\small\par} + +{\small$<$ table (if $2$ r-v cols)} & {\small\texttt{\textbackslash cmidrulewidth =.03em}}\tabularnewline +{\small\texttt{h}} & {\small header} & {\small below header} & {\small table} & {\small\texttt{\textbackslash lightrulewidth=.05em}}\tabularnewline +{\small\texttt{f}} & {\small footer} & {\small above footer} & {\small table} & {\small\texttt{\textbackslash cmidrulewidth =.03em}}\tabularnewline +{\small\texttt{B}} & {\small bottom} & {\small below table} & {\small table} & {\small\texttt{\textbackslash heavyrulewidth=.08em}}\tabularnewline +\bottomrule +\end{tabular} +\par\end{center} +\end{table} +The \verb`rules` key enables precisely which rules are used to be +specified. The value of the key is a `word' \textendash{} a sequence +of letters \textendash{} where the characters have the significance +and default thicknesses (from \texttt{booktabs}) shown in Table~\ref{tab:Rules}. +The default setting is \texttt{rules=ThB}. To insert a rule beneath +the title, for example, change this to \texttt{rules=TthB}. If in +addition you are using a footer row and want a rule above it, then +the specification is \texttt{rules=TthfB} and if you are using a row +between header and title rows (a `midrow') and want a rule beneath +that too, then the spec. is \texttt{rules=TtmhfB}. To my eye that +is too many rules; at most only one of title and midrow rules should +be used. + +The midrow rule changes its behaviour depending on whether there are +two row-variable columns \textendash{} on the left and right of the +table \textendash{} or not. If there is only one row-variable column +then, like the title rule, the midrow rule spans only the function-value +columns. If there are two row-variable columns then the midrow rule +spans the table but is trimmed by 0.5 em at each end. That degree +of trim is the \verb`booktabs` default but can be changed by giving +a different value to \verb`\cmidrulekern` in the preamble, e.g. \verb`\cmidrulekern=1em`. +Note that the changed trim will also apply to the title rule. + +If you wish to change the thickness of a rule from its default, then +enter new values for any or all of {\small\texttt{\textbackslash heavyrulewidth}}, +{\small\texttt{\textbackslash lightrulewidth}}, {\small\texttt{\textbackslash cmidrulewidth}} +in the preamble. The values listed in Table~\ref{tab:Rules} are +the default values in the \texttt{booktabs} package (except for the +midrow and footer rules, which \texttt{booktabs} does not cover; in +\texttt{numerica-tables} these rules are assigned a thickness of {\small\texttt{\textbackslash cmidrulewidth}}). + +In the example table below, a rule for the column title has been specified +(the \verb`t` in the setting \verb`rules=TthB`). Also note the use +of \texttt{ctitle={*}{*}}. The fornula contains an extra parameter +$a$, assigned a value in the vv-list. It now makes sense to display +the vv-list in the column title (but note the braces around \texttt{k} +and \texttt{x} in the vv-list so that they don't display). +\begin{verbatim} + \tabulate + [rspec={x,0.25,5},rround=2,rhnudge=9, + cspec={k,0.25,3},chstyle=2,chround=2, + ctitle=**,rules=TthB] + { a\sin kx }[a=2/\pi,{k}=3,{x}=0][*] +\end{verbatim} +$\Longrightarrow$ \tabulate + [rspec={x,0.25,5},rround=2,rhnudge=9, + cspec={k,0.25,3},chstyle=2,chround=2, + ctitle=**,rules=TthB] + { a\sin kx }[a=2/\pi,{k}=3,{x}=0][*] + +\subsection{Footer row: \texttt{foot} setting} + +Some tables have a footer row and \verb`numerica-tables` allows such +a row to be inserted, but its entire content, with one exception, +is the responsibility of the user, including insertion of the necessary +number of tab characters \verb`&`. This will be $1$ less than the +total number of columns (including row-variable columns) in the table +\textendash{} or some adjustment thereof if you use \verb`\multicolumn`. +You can put into the footer what you wish: +\begin{lyxcode} +foot=<tokens> +\end{lyxcode} +(\emph{HMF} uses the footer mainly for cryptic descriptions of the +accuracy and needs of interpolation methods.) + +The one exception is when \texttt{foot={*}}. This will fill the footer +with the header, but \emph{reversed}. This is useful for tabulating +complementary functions like the sine and cosine or, more generally, +$f(x)$ and $g(x)$ where $g(x)=f(k-x)$ for some constant $k$. Values +for the complementary function are read from the bottom up and require +a reversed row-variable column on the right of the table; see §\ref{subsec:Second-row-var-col}. + +\subsubsection{Footer functions} + +\label{subsec:Footer-functions}It is also possible to use the footer +for displaying the values of certain column functions. {\ttfamily\verb`numerica-tables`} +provides four of these. They can be used in the footer (and only in +the footer): \verb`SUM`, \verb`AVE` (average), \verb`MAX` and \verb`MIN`. +These functions act on the function values of the column they are +in. They \emph{do not} combine mathematically: entering \verb`MAX-MIN` +in the footer of a given column will produce a footer entry containing +two values (those of \verb`MAX` and \verb`MIN`) separated by a minus +sign. The numerical output from each function is automatically wrapped +in math delimiters (\verb`$`) so that minus signs display correctly. + +\noindent\begin{minipage}[t]{1\columnwidth}% +\begin{shaded}% +In v.1 of \verb`numerica`, tables supported \emph{five} footer functions. +The fifth was \verb`DEL=MAX-MIN`. It is no longer supported. First, +the name was unclear and in any case, it is easy to calculate from +\verb`MAX` and \verb`MIN`.\end{shaded}% +\end{minipage} + +In the following example, I have chosen a column variable step size +of zero. This is possible because in the column spec., I have also +specified the exact number of columns. Zeroing the step size means +the same set of figures can be used for the four footer functions +to act on. +\begin{verbatim} + \tabulate + [rspec={x,0.25,(5)},rround=2,rhnudge=9, + cspec={k,0,4},ctitle=**, + chead=SUM\;&AVE\;&MAX\;&MIN\;, + rules=TthfB, + foot=&SUM&AVE&MAX&MIN ] + { a\sin kx }[a=2/\pi,k=3.5,{x}=0][*] +\end{verbatim} +$\Longrightarrow$ \tabulate + [rspec={x,0.25,(5)},rround=2,rhnudge=9, + cspec={k,0,4},calign=r,ctitle=**, + chead=SUM\;&AVE\;&MAX\;&MIN\;, + rules=TthfB, + foot=&SUM&AVE&MAX&MIN ] + { a\sin kx }[a=2/\pi,k=3.5,{x}=0][*] + +\subsection{Second row-variable column: \texttt{rpos=4}} + +\label{subsec:Second-row-var-col}In §\ref{subsec:Row-var-col-pos} +I discussed the settings \verb`rpos=0,1,2` and in §\ref{subsec:Multiple-function-tables} +gave an example of using {\ttfamily\verb`rpos=3`} where +repeating the row-variable column on the right is helpful. There is +another value available for this key, \verb`rpos=4`. Like {\ttfamily\verb`rpos=3`} +this adds the row-variable column to both left and right sides of +the table, but for the right column the values are a function of those +in the left column ({\ttfamily\verb`rpos=3`} corresponds +to the function being the identity). The value given to the key \verb`rvar'` +determines the function used and the value given to the key \verb`rhead'` +determines the header for the right-hand row-variable column. If \verb`rhead'` +is omitted it defaults to a blank header, unless the \verb`rvar'` +setting is also omitted, when \verb`rpos=4` behaves like \verb`rpos=3`. + +For example, the sine and cosine are complementary functions; when +working in degrees, $\cos\theta=\sin(90-\theta)$. We can exploit +this fact to halve the table size needed to tabulate the two functions. +The example also gives an illustration of the use of an expression +in the third element of \verb`rspec`. +\begin{verbatim} + \tabulate[o,multifn,rpos=4, + rspec={\theta,5,1+45/5},rround=0, + chnudge=14,rvar'=90-\theta, + rules=ThfB,foot=*] + { \sin\theta,\cos\theta }[\theta=0][*] +\end{verbatim} +$\Longrightarrow$ \tabulate[o,multifn,rpos=4, + rspec={\theta,5,1+45/5},rround=0, + chnudge=14,rvar'=90-\theta, + rules=ThfB,foot=*] + { \sin\theta,\cos\theta }[\theta=0][*]\medskip{} + +\noindent The values of sines from $0$ to $45$ degrees are read +downwards from the first column of function values, and from 45 to +90 degrees are read upwards from the second column of function values. +For cosines it is downwards from the second column and upwards from +the first column. The reversed footer line indicates the change of +columns to use. In the example note +\begin{itemize} +\item the setting of \verb`rvar'` to a function (\verb`90-\theta`) of +the row variable (\verb`\theta`); +\item the blank header for the \verb`rvar'` column (since no value was +set for \verb`rhead'`); +\item the footer setting \verb`foot=*` to obtain the reversed header in +the footer; +\item the rule \emph{above} the footer row specified by the \verb`f` added +to the \verb`rules` setting, \verb`rules=ThfB`. +\end{itemize} +Note also the degree setting \verb`o` in the settings option. + +Although there is a significant space saving with tables like this +(see \emph{HMF} Tables 4.10, 4.11, 4.12), they are not `kind to the +reader'. They require a certain concentration to read and in my view +should be avoided unless space is seriously constrained. \emph{HMF} +Tables 6.1 and 6.2 are tables of the gamma function and its relatives +where $y=x-1$ is used in the row-variable column on the right (stemming +from $y!=\Gamma(x-1)$); \emph{HMF }Table 6.5 in effect uses $\langle1/x\rangle$ +(the nearest integer to $1/x$) for the row variable on the right. + +\subsection{Separating blocks of rows: \texttt{rbloc}} + +Readability of long columns of figures can be aided by breaking the +columns into blocks with extra white space between blocks of rows. +This is achieved with the \texttt{rbloc} key: +\begin{lyxcode} +rbloc~=~<comma~list~of~positive~integers> +\end{lyxcode} +specifies how many rows belong to each block. For example, \verb`rbloc={5,5,6}` +breaks the table into blocks of $5$ rows, $5$ rows, then $6$ rows. +If the number of rows in the table is greater than the sum of the +entries in the comma list, then division into blocks continues as +specified by the last entry in the comma list. Thus \texttt{rbloc=5} +(strictly \texttt{rbloc=\{5\}} but the braces can be omitted in this +case since no comma is enclosed) divides a table into blocks of $5$ +rows; \texttt{rbloc=\{1,5\}} divides a table into $1$ row followed +by blocks of $5$ rows. A division of this kind may be appropriate +when, say, the row variable runs from $0$ to $1$ in increments of +$0.1$ \textendash{} there are $11$ rows of which the first (when +the row variable is zero) may have distinctive values. + +\noindent\begin{minipage}[t]{1\columnwidth}% +\begin{shaded}% + +\subsubsection*{The pull of the nice round number} + +However, this is not how \emph{HMF} sets out its tables.\emph{ }The +dominant practice in \emph{HMF} is division into blocks of (generally) +$5$ rows, many of which start with a zero value for the row variable. +Rather than isolate this initial value, they include it in the first +block of $5$, then continue with blocks of $5$ until a single isolated +row is left at the bottom of the page or the table. There seems to +be a psychological need to finish a page or table with the row variable +set to a nice round number. Thus: tabulate from $0$ to $10$ rather +than $0$ to $9$, from $0$ to $1$ rather than $0$ to $0.9$, and +even from $0$ to $30$ or $0$ to $2$ rather than $0$ to $29$ +or $0$ to $1.9$. Using blocks of $5$ the consequence is that there +is always an isolated line at the end \textendash{} a kind of punctuation +mark to signal the end of the page or the table.\end{shaded}% +\end{minipage} + +\medskip{} +In the next example I have divided the columns into blocks of $5$ +rows by means of the setting \texttt{rbloc=5}. +\begin{verbatim} + \tabulate[o,rspec={\theta,10,1+90/10}, + rround=0,rbloc=5] + { ,\sin\theta, \cos\theta }[\theta=0][*] +\end{verbatim} +$\Longrightarrow$ \tabulate[o,rspec={\theta,10,1+90/10}, + rround=0,rbloc=5] + { ,\sin \theta, \cos \theta}[\theta=0][*] + +\subsubsection{Adjusting the extra space\texttt{ rblocsep} } + +By default \texttt{numerica} sets the extra space between blocks of +rows at \verb`1 ex`. This value can easily by changed with the setting +\texttt{rblocsep=<length>}. The units need to be included in the specification. + +\section{Formatting function values} + +\label{sec:Function-value-formatting} +\begin{table} +\noindent \centering{}\caption{\protect\label{tab:Function-value-formatting}Formatting function +values} +\noindent \begin{center} +\begin{tabular}{cc>{\raggedright}p{4cm}c} +\toprule +{\small key} & {\small type} & {\small meaning} & {\small default}\tabularnewline +\midrule +{\small\texttt{(pad)}} & {\small int} & {\small (t-notation) phantom padding} & \tabularnewline +{\small\texttt{signs}} & {\small int} & {\small sign handling for function-values} & {\small\texttt{0}}\tabularnewline +{\small\texttt{diffs}} & {\small int} & {\small insert differences \& pre-pad with zeros} & {\small\texttt{0}}\tabularnewline +{\small\texttt{Q?}} & {\small tokens} & {\small special cell conditional} & \tabularnewline +{\small\texttt{A!}} & {\small tokens} & {\small special cell formatting} & \tabularnewline +\bottomrule +\end{tabular} +\par\end{center} +\end{table} +In the examples used so far, function values have been limited to +a narrow range, generally $[-1,1]$. What happens when function values +span orders of magnitude? + +\subsection{Trailing optional argument} + +\label{subsec:Trailing-optional-argument}The primary tool for function-value +formatting is the trailing optional argument of the \verb`\tabulate` +command where the rounding value is specified, padding with zeros +is set or not (generally \emph{set}), and scientific notation is set +or not. Elegant scientific notation, set with an \texttt{x} in the +trailing optional argument, is generally not appropriate for use in +tables; see the first table below. Repeating the \texttt{x} \textendash{} +\verb`xx` \textendash{} in the trailing optional argument (the second +table) so that scientific notation extends to numbers in the range +$[1,10)$ helps, particularly with the \emph{left} alignment chosen +for the function-value column, but the result is wasteful of space +and the repetition of the `$\times10$' is distracting and would +be more so for a larger table. The \texttt{x} specification should +be used in tables, if at all, only for small tables \textendash{} +a few function values at most. +\begin{verbatim} + \tabulate[rspec={x,1,2*3+1},rround=0] + { e^x}[x=-5][*x]\qquad + \tabulate[rspec={x,1,2*3+1},rround=0,calign=l] + { e^x}[x=-3][*xx] +\end{verbatim} +$\Longrightarrow$ \tabulate[rspec={x,1,2*3+1},rround=0] + { e^x}[x=-3][*x]\qquad + \tabulate[rspec={x,1,2*3+1},rround=0,calign=l] + { e^x}[x=-3][*xx] + +\subsubsection{The \texttt{t} option} + +\emph{HMF} uses a special notation for coping with function values +spanning orders of magnitude. This notation can be invoked by inserting +\texttt{t} in the trailing optional argument. Repeating the previous +two tables, and adding a \texttt{chnudge} value, gives a more compact +and visually appealing result: +\begin{verbatim} + \tabulate[rspec={x,1,2*3+1},rround=0,chnudge=24] + { e^x}[x=-3][*t]\qquad + \tabulate[rspec={x,1,2*3+1},rround=0,chnudge=24] + { e^x}[x=-3][*tt] +\end{verbatim} +$\Longrightarrow$ \tabulate[rspec={x,1,2*3+1},rround=0,chnudge=24] + { e^x}[x=-3][*t]\qquad + \tabulate[rspec={x,1,2*3+1},rround=0,chnudge=24] + { e^x}[x=-3][*tt] + +\subsection{Padding the exponent: \texttt{(pad)}} + +In the second table of the last example some might quibble at the +lack of alignment of the left parentheses. \emph{HMF} tends to align +these and \verb`numerica-tables` offers the setting +\begin{lyxcode} +(pad)~=~<integer> +\end{lyxcode} +to achieve the effect. (The parentheses are part of the key \textendash{} +a reminder of the \verb`t`-form of scientific notation.) \texttt{<integer>} +is the number of digits/characters to pad to. Repeating the last two +tables with the setting \texttt{(pad)=2} produces the following results: +\begin{verbatim} + \tabulate[rspec={x,1,2*3+1},rround=0, + chnudge=24,(pad)=2] + { e^x}[x=-3][*t]\qquad + \tabulate[rspec={x,1,2*3+1},rround=0, + chnudge=24,(pad)=2] + { e^x}[x=-3][*tt] +\end{verbatim} +$\Longrightarrow$ \tabulate[rspec={x,1,2*3+1},rround=0, + chnudge=24,(pad)=2] + { e^x}[x=-3][*t]\qquad + \tabulate[rspec={x,1,2*3+1},rround=0, + chnudge=24,(pad)=2] + { e^x}[x=-3][*tt]\medskip{} + +Note that this setting is relevant only when the \texttt{t} option +is used in the trailing number-formatting argument of the \verb`\tabulate` +command. Examples in \emph{HMF} of the style exemplified by the first +table are, among others, Tables 8.6, 9.2, 20.1, and of the style exemplified +by the second table, among many, Tables 9.9, 10.5, 13.1, 14.1, 19.1. + +\subsection{Accommodating signs: \texttt{signs}} + +\label{subsec:Signs}Instead of $e^{x}$ as the test function, use +$e^{x}-1.$ Now there are positive, zero and negative function values +to contend with. Recall that in the \verb`t`-notation the \emph{exponent} +is the parenthesized integer part of a number, the \emph{significand} +the following decimal figures. \verb`numerica-tables` offers the +\verb`signs` key to align (or not) the exponents. The setting is +\begin{lyxcode} +signs~=~<integer> +\end{lyxcode} +There are four effective values for \texttt{<integer>} and the do-nothing +default (\texttt{signs=0}): +\begin{itemize} +\item \texttt{signs=2 }inserts a $+$ sign between exponent and significand +of every non-negative number; +\item \texttt{signs=1 }inserts a $+$ sign between exponent and significand +of every non-negative number that immediately precedes or follows +a negative number; +\item \texttt{signs=-1 }inserts a $+$ sign between exponent and significand +of any non-negative number that immediately precedes or follows a +negative number, and inserts a \emph{phantom} $+$ sign between exponent +and significand of every other non-negative number; +\item \texttt{signs=-2 }inserts a \emph{phantom} $+$ sign between exponent +and significand of every non-negative number; +\end{itemize} +In the following examples with \verb`signs=-2`, \verb`signs=-1` +and \verb`signs=2`, all give acceptable results. +\begin{verbatim} + \tabulate[rspec={x,1,2*3+1},rround=0, + (pad)=2,signs=-2] + { e^x-1}[x=-3][4*tt]\qquad + \tabulate[rspec={x,1,2*3+1},rround=0, + (pad)=2,signs=-1] + { e^x-1}[x=-3][4*tt]\qquad + \tabulate[rspec={x,1,2*3+1},rround=0, + (pad)=2,signs=2] + { e^x-1}[x=-3][4*tt] +\end{verbatim} +$\Longrightarrow$ \tabulate[rspec={x,1,2*3+1},rround=0, + (pad)=2,signs=-2] + { e^x-1}[x=-3][4*t']\qquad + \tabulate[rspec={x,1,2*3+1},rround=0, + (pad)=2,signs=-1] + { e^x-1}[x=-3][4*t']\qquad + \tabulate[rspec={x,1,2*3+1},rround=0, + (pad)=2,signs=2] + { e^x-1}[x=-3][4*t']\medskip{} + +\noindent In \emph{HMF} Table 23.2 illustrates \verb`signs=-2`; Tables +10.1, 13.1, 14.1, 19.1 among many others illustrate \verb`signs=-1`; +and Tables 9.4, 10.6, 20.2, 22.11 among others illustrate \verb`signs=2`. + +\verb`signs=1`, however, is an inappropriate setting for these function +values in the \verb`t`-notation: +\begin{verbatim} + \tabulate[rspec={x,1,2*3+1},rround=0, + (pad)=2,signs=1] + { e^x-1}[x=-3][4*tt] \qquad +\end{verbatim} +$\Longrightarrow$ \tabulate[rspec={x,1,2*3+1},rround=0, + (pad)=2,signs=1] + { e^x-1}[x=-3][4*tt]\medskip{} + +But the \verb`signs` key is not limited to the \verb`t`-notation. +In the following tables where the notation is not used, positive values +for the key, including \verb`signs=1`, give good results (I've included +also the default setting \textendash{} the third table): +\begin{verbatim} + \tabulate[rspec={x,0.1,9},(pad)=2,signs=2] + { 10\sin 5x}[x=-0.4][*4]\qquad + \tabulate[rspec={x,0.1,9},(pad)=2,signs=1] + { 10\sin 5x}[x=-0.4][*4]\qquad + \tabulate[rspec={x,0.1,9},(pad)=2] + { 10\sin 5x}[x=-0.4][*4] +\end{verbatim} +$\Longrightarrow$ \tabulate[rspec={x,0.1,9},(pad)=2,signs=2] + { 10\sin 5x}[x=-0.4][*4]\qquad + \tabulate[rspec={x,0.1,9},(pad)=2,signs=1] + { 10\sin 5x}[x=-0.4][*4]\qquad + \tabulate[rspec={x,0.1,9},(pad)=2] + { 10\sin 5x}[x=-0.4][*4]\medskip{} + +\noindent \emph{HMF} seems to use \verb`signs=2` when the sign of +the function values changes every few entries and \verb`signs=1` +when there are runs of entries of the same sign. Over the range tabulated +here for $10\sin5x$, they would use the middle table of the three, +\verb`signs=1`. + +\subsection{Differences: \texttt{diffs}} + +In fine-grained tables where function values change only slowly from +entry to entry it can be helpful to include a difference entry between +function-value entries as an aid to interpolation (and a test of eyesight). +By entering +\begin{lyxcode} +diffs~=~<non-negative~integer> +\end{lyxcode} +the \verb`\tabulate` command will include differences in a table. +The \texttt{<non-negative integer>} is the maximum number of digits +in a difference. +\begin{verbatim} + \tabulate[rspec={x,0.01,1+(1.05-1)/0.01},rround=2, + rhnudge=9,chnudge=21,diffs=3] + { \sinh x }[x=1][*4] +\end{verbatim} +$\Longrightarrow$ \tabulate[rspec={x,0.01,1+(1.05-1)/0.01},rround=2, + rhnudge=9,chnudge=21,diffs=3] + { \sinh x }[x=1][*4]\medskip{} + +I have deliberately chosen the function and settings here \textendash{} +particularly \texttt{diffs=3} \textendash{} to give a good result. +With the default right alignment of the function-value columns, it +is easy to get this wrong. The evidence will be either in the misalignment +of the first row of function values or unnecessary padding of differences +with leading zeros. It is a good idea to create your table first, +see how function values change between successive rows and judge how +many digits there will be in a difference. In the following examples +I have deliberately put \texttt{diffs=2} and \texttt{diffs=4} to show +the effect of a misjudgement. In the first table the first row of +function values is misaligned by one character. (\texttt{diffs=1} +would have produced a two-character misalignment.) In the second table +the unnecessary fourth digit for the differences results in pre-padding +with $0$. + +In the second table the function $-\sinh x$ is \emph{decreasing}, +showing how it is the \emph{absolute value of the difference} between +successive function values that is tabulated. A difference is always +a non-negative value. +\begin{verbatim} + \tabulate[rspec={x,0.01,1+(1.05-1)/0.01},rround=2, + rhnudge=9,chnudge=21,diffs=2] + { \sinh x }[x=1][*4]\qquad + \tabulate[rspec={x,0.01,1.05},rround=2, + rhnudge=9,chnudge=30,diffs=4] + { -\sinh x }[x=1][*4] +\end{verbatim} +$\Longrightarrow$ \tabulate[rspec={x,0.01,1+(1.05-1)/0.01},rround=2, + rhnudge=9,chnudge=21,diffs=2] + { \sinh x }[x=1][*4]\qquad + \tabulate[rspec={x,0.01,1+(1.05-1)/0.01},rround=2, + rhnudge=9,chnudge=21,diffs=4] + { -\sinh x }[x=1][*4]\medskip{} + +\noindent When the \texttt{diffs} setting is too small, function values +in the first row are misaligned, the amount depending on how much +too small. (A left alignment of the function value column is another +way of tackling this issue.) When the \texttt{diffs} setting is too +big, alignment is fine but differences are padded with unnecessary +leading zeros, meaning the column header will need a bigger nudge +to bring \emph{it} into alignment. + +\subsection{Formatting special values: \texttt{Q?} and \texttt{A!}} + +You may wish to highlight or display in some special way a particular +function value or values. \verb`\nmcTabulate` has two related settings +that enable this: \texttt{Q?=<tokens>} and \texttt{A!=<tokens>}. As +the names suggest: Question? and Answer! + +The question should be an expression that \texttt{l3fp} can digest +and produce a boolean answer to (1 for `true' or 0 for `false'). +\emph{This is not a \LaTeX{} expression}; this is an \verb`l3fp` expression.\footnote{Documentation about \texttt{l3fp }can be found in \texttt{interface3.pdf}, +which is part of the \texttt{l3kernel} bundle.} \verb`numerica-tables` uses \texttt{@} to denote the current function +value, so queries like \texttt{Q?=@<0} (Is the current function value +negative?) or \texttt{Q?=\{}@\texttt{>=pi\}} (Is the current function +value greater than or equal to $\pi$?) are valid questions. (Note +the braces in the second question, used to hide the equality sign.) +Other possible useful components of such questions are \texttt{exp(1)} +for the number $e$, || for logical Or, \texttt{\&\&} for logical +And, and \texttt{!} for logical Not,\texttt{ }as well as the familiar +arithmetic symbols, \texttt{+},\texttt{ -},\texttt{ {*}},\texttt{ +/} and \texttt{\textasciicircum}, relation symbols \texttt{<},\texttt{ +>},\texttt{ =} and their combinations like \texttt{!=},\texttt{ >=},\texttt{ +<=} etc., and parentheses. In addition to these components, \texttt{numerica-tables} +offers \texttt{MAX} and \texttt{MIN} which are the maximum and minimum +function values tabulated, so that, e.g., \texttt{Q?=\{@=MIN\}} (note +the braces) is the question: Is the current function value equal to +the minimum function value for the whole table? + +The answer must be in the form of a \LaTeXe{} formatting statement, +again using \texttt{@} to denote the current function value. Thus +\texttt{A!=\textbackslash mathbf\{@\}} is a valid answer; so is \texttt{A!=\textbackslash color\{red\}\{@\}} +(provided you have \texttt{\textbackslash usepackage\{color\}} in +the preamble); and so is \texttt{A!=(@)}. Another valid answer is +\texttt{A!=} , meaning that function values satisfying the \texttt{Q?} +question are omitted from the output. + +This can be useful to suppress `irrelevant' values in a particular +context. For example, suppose we wish to focus on the values of $\cos(m\pi/n)$ +lying between $0$ and $\tfrac{1}{2}$ inclusive for certain values +of $m$ and $n$. Rather than cluttering the table with values outside +that interval, we suppress them (the two occurrences of `\texttt{1e-14}' +in the query are there to prevent rounding errors confusing the result): +\begin{verbatim} + \tabulate + [rspec={n,1,1+(15-4)},rround=0,rpos=2,rules=Tth, + cspec={m,1,1+(5-2)},ctitle=*,chstyle=2, + Q?={@<-1e-14||@>0.5+1e-14},A!=] + { \cos(m\pi/n) }[n=4,m=2][*4] +\end{verbatim} +$\Longrightarrow$ \tabulate + [rspec={n,1,1+(15-4)},rround=0,rpos=2,rules=Tth, + cspec={m,1,1+(5-2)},ctitle=*,chstyle=2, + Q?={@<-1e-14||@>0.5+1e-14},A!=] + { \cos(m\pi/n) }[n=4,m=2][*4] + +\section{Star option: \texttt{\textbackslash nmcTabulate{*}}} + +\label{sec:Star-option}If the \verb`Q?` question is satisfied by +at least one function value then adding a star (asterisk) to the \verb`\tabulate` +command will display the first such instance. Like other starred commands +in the \verb`numerica` suite (\verb`\eval*`, \verb`info*`, \verb`\macros*`, +\verb`\constants*`, \verb`\iter*`, \verb`\solve*` and \verb`\recur*`), + \verb`\tabulate*` outputs a single number. Using the star means +you do not need an answering \verb`A!` to the query \verb`Q?` since +no formatting of table values is involved. +\begin{verbatim} + \tabulate* + [rspec={n,1,1+(15-4)},cspec={m,1,1+(5-2)}, + Q?={@<-1e-14||@>0.5+1e-14}] + { \cos(m\pi/n) }[n=4,m=2][*4] +\end{verbatim} +$\Longrightarrow$ \tabulate* + [rspec={n,1,1+(15-4)},cspec={m,1,1+(5-2)}, + Q?={@<-1e-14||@>0.5+1e-14}] + { \cos(m\pi/n) }[n=4,m=2][*4]. Indeed, if you omit the \verb`Q?` and \verb`A!` settings from +the previous table so that all function values are visible then this +is the value that follows $0.5000$ in the \texttt{m=2} column \textendash{} +the first function value encountered either less than $0$ or greater +than $0.5$. + +\subsection{Errors} + +If \emph{no} function value satisfies the query then a message is +generated: +\begin{verbatim} + \tabulate* + [rspec={n,1,1+(15-4)},cspec={m,1,1+(5-2)}, + Q?=@>1] + { \cos(m\pi/n) }[n=4,m=2][*4] +\end{verbatim} +$\Longrightarrow$ \tabulate* + [rspec={n,1,1+(15-4)},cspec={m,1,1+(5-2)}, + Q?=@>1] + { \cos(m\pi/n) }[n=4,m=2][*4] + +And if there is no query at all when the star option is chosen, another +message is shown: +\begin{verbatim} + \tabulate* + [rspec={n,1,1+(15-4)},cspec={m,1,1+(5-2)}] + { \cos(m\pi/n) }[n=4,m=2][*4] +\end{verbatim} +$\Longrightarrow$ \tabulate* + [rspec={n,1,1+(15-4)},cspec={m,1,1+(5-2)}] + { \cos(m\pi/n) }[n=4,m=2][*4] + +\subsection{Scientific notation} + +If you want the number output in scientific notation when the star +option is chosen, then enter the exponent mark in the trailing number-format +option. This is straightforward for a letter like the commonly used +\texttt{e}, but remember that if it is the \texttt{x} option that +you enter, then you will need to place the \verb`\tabulate*` command +between math delimiters, otherwise the \verb`\times` symbol resulting +from the \texttt{x} option will generate a \LaTeX{} error (`Missing +\$ inserted'): +\begin{verbatim} + $ + \tabulate* + [rspec={n,1,1+(15-4)},cspec={m,1,1+(5-2)}, + Q?={@<-1e-14||@>0.5+1e-14},A!=] + { \cos(m\pi/n) }[n=4,m=2][*4x] + $ +\end{verbatim} +$\Longrightarrow$ $ + \tabulate* + [rspec={n,1,1+(15-4)},cspec={m,1,1+(5-2)}, + Q?={@<-1e-14||@>0.5+1e-14},A!=] + { \cos(m\pi/n) }[n=4,m=2][*4x] + $. + +\subsection{Nesting} + +A \verb`\tabulate` command can be nested within other commands from +the wider \verb`numerica` package, and those other commands can be +nested within a \verb`\tabulate` command. + +\subsubsection{Nesting of \texttt{\textbackslash nmcTabulate}} + +Occasionally one might want to extract a value \textendash{} perhaps +a maximum or minimum \textendash{} from a table to insert in another +command. This can be done by nesting a \verb`\tabulate*` command +with an appropriate \verb`Q?` setting within the other command. In +fact, from v.2 of \verb`numerica` we can omit (or forget to include) +the star. All we require is that the \verb`Q?` setting is satisfied +by at least one function value. +\begin{verbatim} + \eval{$ + (\tabulate + [rspec={n,1,15},cspec={m,1,5}, + Q?={@=MAX}] + { \cos(m\pi/n) }[n=4,m=2][*4])\sinh t + + (\tabulate + [rspec={n,1,15},cspec={m,1,5}, + Q?={@=MIN}] + { \sin(m\pi/n) }[n=4,m=2][*4])\cosh t + $}[t=2][4] +\end{verbatim} +$\Longrightarrow$ \eval{$ + (\tabulate + [rspec={n,1,15},cspec={m,1,5}, + Q?={@=MAX}] + { \cos(m\pi/n) }[n=4,m=2][*4])\sinh t + + (\tabulate + [rspec={n,1,15},cspec={m,1,5}, + Q?={@=MIN}] + { \sin(m\pi/n) }[n=4,m=2][*4])\cosh t + $}[t=2][4]. + +Evaluating the tables +\begin{verbatim} + \tabulate + [rspec={n,1,15},rround=0,rpos=2,rules=Tth, + cspec={m,1,5},ctitle=*,chstyle=2] + { \cos(m\pi/n) }[n=4,m=2][*4] +\end{verbatim} +for the cosine and +\begin{verbatim} + \tabulate + [rspec={n,1,15},rround=0,rpos=2,rules=Tth, + cspec={m,1,5},ctitle=*,chstyle=2] + { \sin(m\pi/n) }[n=4,m=2][*4] +\end{verbatim} +for the sine and checking the entries shows that indeed the maximum +and minimum values are $0.9397$ and $-1.0000$ respectively. + +If the \verb`Q?` setting is not satisfied by any function value an +error message is shown; e.g., +\begin{verbatim} + \eval{$ + (\tabulate + [rspec={n,1,15},cspec={m,1,5}, + Q?=@>2] + { \cos(m\pi/n) }[n=4,m=2][*4])\sinh t + $}[t=2][4] +\end{verbatim} +$\Longrightarrow$ \eval{$ + (\tabulate + [rspec={n,1,15},cspec={m,1,5}, + Q?=@>2] + { \cos(m\pi/n) }[n=4,m=2][*4])\sinh t + $}[t=2][4] + +\noindent Here, `settings (1)' tells us that the message refers +to the (or a) command at the first level of nesting. + +\subsubsection{Nesting within \texttt{\textbackslash nmcTabulate}} + +Perhaps a more likely situation is to want to nest other commands +within a \verb`\tabulate` command, in particular those from the associated +package \verb`numerica-` \verb`plus`. In the documentation for that +package, as an illustration of the use of those commands, I describe +how they can be used to numerically investigate the timing of signals +between points fixed on a rotating disk. and in particular how to +look for three-point circuits with the property that, despite the +rotation, signals take the same time traversing the circuit in one +direction as the other. + +I show a complicated expression below involving a \verb`\tabulate` +command wrapped around a \verb`\solve` command (from \verb`numerica-plus`) +wrapped around four \verb`\iter*` commands (also from \verb`numerica-plus`). +I also show the table resulting from it all. On my High St laptop +the table takes perhaps two minutes to compile \textendash{} I haven't +timed it exactly but it is well over a minute. Two minutes is the +blink of an eye in a lifetime but an age sitting staring at a computer +screen. Hence I compiled the table separately, saved it to file using +the \verb`\reuse` command (see the discussion below, §\ref{sec:reuse-setting}) +and pasted the saved result into this document. + +To explain the expression: suppose the three points on the disk have +polar coordinates $(r,\pm\theta)$ and $(a,0)$ in a co-rotating coordinate +system. In the underlying inertial system, the signal speed is $c$ +and the angular velocity $\omega$. The cosine rule for solving triangles +gives for the travel times $t$ between the points +\[ +t=c^{-1}\sqrt{r^{2}+a^{2}-2ra\cos(\theta\pm\omega t)} +\] + and +\[ +t=c^{-1}r\sqrt{2-2\cos(2\theta\pm\omega t)} +\] +where the plus sign is for a signal in the direction of rotation and +the minus sign for a signal against the rotation. Thus the travel +times are fixed points of the expressions on the right. Fixed points +are found with the \verb`\iter*` command, which is where those terms +of the expression come from. The \verb`\solve` command is then used +to find, for a given value of $\theta$, a value of $r$ for which +the difference of the travel times is zero for the circuit traversed +in the two directions. Finally, the \verb`\tabulate` command creates +a table of $r$ values for different values of the row-variable $\theta$ +and column variable $a$. + +As noted earlier, it takes a long time to compile this expression +on an `ordinary' laptop, and so I have compiled the expression separately +and pasted the result into this document: +\begin{verbatim} + + \tabulate[rspec={\theta,0.2,5},chstyle=2, + cspec={a,5,3},ctitle=r_{\Delta t=0}] + { \solve[var=r,vvi=,+=1] + {% circuit 1231 + 2\times\iter*[var=t,+=1]{ + c^{-1}\sqrt{a^2+r^2- + 2ar\cos(\theta-\omega t)} }[4] + + \iter*[var=t,+=1]{ + c^{-1}r\sqrt{2-2\cos(2\theta+\omega t)} }[4] + % circuit 1321 + - 2\times\iter*[var=t,+=1]{ + c^{-1}\sqrt{a^2+r^2- + 2ar\cos(\theta+\omega t)} }[4] + - \iter*[var=t,+=1]{ + c^{-1}r\sqrt{2-2\cos(2\theta-\omega t)} }[4] + }[3] + }[ c=30,r=a+10,a=10, + \theta=0.2,\omega=0.2,t=1 ][3*] +\end{verbatim} +$\Longrightarrow$ \begin {tabular}{rccc} +\toprule +&\multicolumn {3}{c}{$r_{\Delta t=0}$}\tabularnewline +$\theta $&$a=10$&$a=15$&$a=20$\tabularnewline +\midrule +${0.2}$&$10.21$&$15.31$&$20.43$\tabularnewline +${0.4}$&$10.87$&$16.33$&$21.82$\tabularnewline +${0.6}$&$12.15$&$18.31$&$24.55$\tabularnewline +${0.8}$&$14.46$&$21.88$&$29.59$\tabularnewline +${1.0}$&$18.82$&$28.86$&$39.82$\tabularnewline +\bottomrule +\end {tabular} +\begin{verbatim} + +\end{verbatim} + +\section{Table placement} + +\label{sec:Table-placement}There is only one setting in this category +that is part of \texttt{numerica-tables} as such, the tabular vertical +alignment option; see §\ref{subsec:Verticalalignment}. But \LaTeX{} +allows one to insert vertical space with its \verb`\bigskip`, \verb`\medskip`, +\verb`\smallskip`, usually about one line space, a half line space, +and a quarter line space (with stretch and shrink), and \verb`booktabs` +provides \verb`\abovetopsep` and \verb`\belowbottomsep`, both set +by default to \verb`0ex` (or any other unit you care to use) and +easily changed by writing, e.g., \verb`\abovetopsep=1.25ex` if you +want to insert \verb`1.25ex` of space above the table (perhaps to +fit captions). + +\subsection{Vertical~alignment} + +\label{subsec:Verticalalignment}By writing\texttt{ } +\begin{lyxcode} +valign~=~<char>~ +\end{lyxcode} +where \texttt{<char>} is one of \texttt{t}, \texttt{m} or \texttt{b} +the vertical alignment of the table can be set relative to the text +baseline.\texttt{ valign=t }aligns the top of the table with the text +baseline, \texttt{valign=b} the bottom of the table with the text +baseline, \texttt{valign=m} aligns the middle of the table with the +text baseline. By default \texttt{valign=m} is set. Repeating an example +from earlier (§\ref{sec:Row-variable-settings}) I have added letters +A, B, C to show where the baseline is. In the first table the top +of the table aligns with the baseline; in the second table (default +case) the middle of the table aligns with the baseline; in the third +table, the bottom of the table aligns with the baseline. +\begin{verbatim} + A \tabulate[valign=t,rvar=x,rstep=0.2,rows=6] + { \sin x/\cos x }[x=0][*] \qquad + B \tabulate[rspec={x,0.2,1+(1/0.2)}] + { \tan x }[x=0][*] \qquad + C \tabulate[valign=b,rspec={x,0.2,(6)}] + { \sqrt{\sec^2 x - 1} }[x=0][*] +\end{verbatim} +$\Longrightarrow$ A \tabulate[valign=t,rvar=x,rstep=0.2,rows=6,rstop=2] + { \sin x/\cos x }[x=0][*] \qquad + B \tabulate[rspec={x,0.2,1+(1/0.2)}] + { \tan x }[x=0][*] \qquad + C \tabulate[valign=b,rspec={x,0.2,6}] + { \sqrt{\sec^2 x - 1} }[x=0][*]\medskip{} + +As explained in §\ref{subsec:Adjoining-tables}, tables can be adjoined +to give the appearance of a single larger table. If tables with different +numbers of rows are adjoined in this manner, then a middle alignment +fails and a top alignment is necessary (so that the header rows of +the tables align). + +\section{The \texttt{reuse} setting} + +\label{sec:reuse-setting}By entering +\begin{lyxcode} +reuse~=~<non-negative~integer> +\end{lyxcode} +it is possible to specify what is saved when the \verb`\tabulate` +command is followed by a \verb`\reuse` command. +\begin{itemize} +\item \texttt{reuse=0} saves the table as displayed (the default); +\item \texttt{reuse=n} saves the $n$-th \emph{column} of function values +\begin{itemize} +\item if \texttt{rpos} is non-zero: in a comma-separated list of braced +pairs \texttt{\{row-variable value,function value}\}; +\item if \texttt{rpos=0}: in a comma-separated list of function values. +\end{itemize} +\item \texttt{reuse=-n} saves the $n$-th \emph{row} of function values +in a comma-separated list that includes the row-variable value in +its appropriate position(s) if \texttt{rpos} is non-zero. +\end{itemize} +In the following example the third row is saved to the control sequence +\verb`\rowiii` by using the setting \verb`reuse=-3`. +\begin{verbatim} + \tabulate + [rspec={x,0.25,5},rround=2,rhead=x, + ralign=r,rhnudge=9, + cspec={k,0.25,3},chstyle=2, + chround=2,calign=r,ctitle=**, + rules=TthB,reuse=-3] + { a\sin kx }[a=2/\pi,{k}=3,{x}=0][*] + \reuse{rowiii} +\end{verbatim} +$\Longrightarrow$ \tabulate + [rspec={x,0.25,(5)},rround=2, + rhead=x,ralign=r,rhnudge=9, + cspec={k,0.25,(3)},chstyle=2, + chround=2,calign=r,ctitle=**,rules=TthB,reuse=-3] + { a\sin kx }[a=2/\pi,{k}=3,{x}=0][*] + \reuse[renew]{rowiii}\medskip{} + +\noindent Now test the content of the control sequence +\begin{lyxcode} +\noindent \verb`\rowiii`~$\Longrightarrow$~\rowiii ~ +\end{lyxcode} +\noindent You can see that indeed the third row has been `captured +for posterity'. + +Alternatively, we could save the second column of function values +in the control sequence \verb`\colii`: +\begin{verbatim} + \tabulate[rspec={x,0.25,5},rround=2,rhead=x, + ralign=r,rhnudge=9, + cspec={k,0.25,3},chstyle=2, + chround=2,calign=r,ctitle=**, + rules=TthB,reuse=2] + { a\sin kx }[a=2/\pi,{k}=3,{x}=0][*] + \reuse{colii} +\end{verbatim} +$\Longrightarrow$ \tabulate + [rspec={x,0.25,(5)},rround=2, + rhead=x,ralign=r,rhnudge=9, + cspec={k,0.25,(3)},chstyle=2, + chround=2,calign=r,ctitle=**, + rules=TthB,reuse=2] + { a\sin kx }[a=2/\pi,{k}=3,{x}=0][*] + \reuse[renew]{colii}\medskip{} + +Now to see what is saved in \verb`\colii` I use \TeX 's \verb`\meaning` +command to show that it is indeed braced pairs: +\begin{verbatim} + \meaning \colii +\end{verbatim} +$\Longrightarrow$ \meaning\colii + +Finally, let's use the default \verb`reuse` setting (\verb`reuse=0`) +by not entering an explicit \verb`reuse` setting at all. This should +save the whole table: +\begin{verbatim} + \tabulate[rspec={x,0.25,5},rround=2,rhead=x, + ralign=r,rhnudge=9, + cspec={k,0.25,3},chstyle=2, + chround=2,calign=r,ctitle=**, + rules=TthB] + { a\sin kx }[a=2/\pi,{k}=3,{x}=0][*] + \reuse{wholetable} +\end{verbatim} +$\Longrightarrow$ \tabulate[rspec={x,0.25,5},rround=2,rhead=x, + ralign=r,rhnudge=9, + cspec={k,0.25,3},chstyle=2, + chround=2,calign=r,ctitle=**, + rules=TthB] + { a\sin kx }[a=2/\pi,{k}=3,{x}=0][*] + \reuse[renew]{wholetable}\medskip{} + + +\noindent Now check that the whole table has been saved:\medskip{} + +\noindent \verb`\wholetable` $\Longrightarrow$\wholetable\medskip{} + +\noindent and, indeed it has. + +\chapter{Reference summary} + +\section{Commands defined in \texttt{numerica-tables}} + +\texttt{\textbackslash nmcTabulate, \textbackslash tabulate} + +\section{Settings for \texttt{\textbackslash nmcTabulate}} + +\subsubsection*{Row-variable specification §\ref{sec:Row-variable-settings}} +\begin{center} +\begin{center} +\begin{tabular}{ll>{\raggedright}p{4cm}>{\raggedright}p{3cm}} +\toprule +{\small key} & {\small type} & {\small meaning} & {\small comment}\tabularnewline +\midrule +{\small\texttt{rvar}} & {\small token(s)} & {\small row-variable} & \tabularnewline +{\small\texttt{rstep}} & {\small real num} & {\small step size} & \tabularnewline +{\small\texttt{rstop}} & {\small real num} & {\small stop value} & \multirow{2}{3cm}{either {\small\texttt{rstop}}{\small{} or }{\small\texttt{rows}}{\small , +not both}}\tabularnewline +{\small\texttt{rows}} & {\small int} & {\small number of rows} & \tabularnewline +{\small\texttt{rspec}} & {\small comma list} & {\small\texttt{\{start}}{\small , }{\small\texttt{step}}{\small , }{\small\texttt{rows\}}} & {\small short form spec.}\tabularnewline +\bottomrule +\end{tabular} +\par\end{center} +\par\end{center} + +\subsubsection*{Row-variable column formatting §\ref{subsec:Row-var-col-formatting}} +\begin{center} +\begin{center} +\begin{tabular}{ll>{\raggedright}p{4cm}l} +\toprule +{\small key} & {\small type} & {\small meaning} & {\small default}\tabularnewline +\midrule +{\small\texttt{rround}} & {\small int} & {\small rounding} & {\small\texttt{1}}\tabularnewline +{\small\texttt{ralign}} & {\small char (}{\small\texttt{r/c/l}}{\small )} & {\small horizontal alignment} & {\small\texttt{r}}\tabularnewline +{\small\texttt{rfont}} & {\small chars} & {\small font (}{\small\verb`\math<chars>`}{\small )} & \tabularnewline +{\small\texttt{rhead}} & {\small tokens} & {\small header} & {\small\texttt{rvar}}\tabularnewline +{\small\texttt{rhnudge}} & int & {\small nudge header }{\small{\small\verb`rhnudge`}}{\small{} +mu} & {\small\texttt{0}}\tabularnewline +{\small\texttt{rpos}} & {\small int (}{\small\texttt{0}}{\small\ldots}{\small\texttt{4}}{\small )} & {\small column position(s)} & {\small\texttt{1}}\tabularnewline +{\small\texttt{rvar'}} & {\small token(s)} & {\small 2nd row-variable col. spec.} & {\small\texttt{rvar}}\tabularnewline +{\small\texttt{rhead'}} & {\small token(s)} & {\small header of 2nd r-v col. (if it exists)} & {\small\texttt{rvar'}}\tabularnewline +{\small\texttt{rhnudge'}} & int & {\small nudge 2nd r-v col. header }{\small{\small\verb`rhnudge'`}}{\small{} +mu} & {\small\texttt{0}}\tabularnewline +\bottomrule +\end{tabular} +\par\end{center} +\par\end{center} + +\subsubsection*{Column-variable specification §\ref{sec:Column-variable-settings}.} +\begin{center} +\begin{center} +\begin{tabular}{ll>{\raggedright}p{4cm}l} +\toprule +{\small key} & {\small type} & {\small meaning} & {\small default}\tabularnewline +\midrule +{\small\texttt{cvar}} & {\small token(s)} & {\small column-variable} & \tabularnewline +{\small\texttt{cstep}} & {\small real num} & {\small step size} & \tabularnewline +{\small\texttt{cstop}} & {\small real num} & {\small stop value} & {\small either }{\small\texttt{cstop}}\tabularnewline +{\small\texttt{cols}} & {\small int} & {\small number of columns} & {\small or }{\small\texttt{cols}}{\small , not both}\tabularnewline +{\small\texttt{cspec}} & {\small comma list} & {\small\texttt{\{cvar,cstep}}{\small ,}{\small\texttt{cols\}}} & {\small short form spec.}\tabularnewline +\bottomrule +\end{tabular} +\par\end{center} +\par\end{center} + +\subsubsection*{Column-variable header formatting §\ref{subsec:Column-header-formatting}.} +\begin{center} +\begin{center} +\begin{tabular}{ll>{\raggedright}p{4cm}l} +\toprule +{\small key} & {\small type} & {\small meaning} & {\small default}\tabularnewline +\midrule +{\small\texttt{chstyle}} & {\small int (}{\small\texttt{0}}{\small\ldots}{\small\texttt{4}}{\small )} & {\small header style} & {\small\texttt{0}}\tabularnewline +{\small\texttt{ctitle}} & {\small token(s)} & {\small single col. alternative header} & \tabularnewline +{\small\texttt{chead}} & {\small token(s)} & {\small user-defined header} & \tabularnewline +{\small\texttt{calign}} & {\small char (r/c/l)} & {\small column alignment} & {\small\texttt{r}}\tabularnewline +{\small\texttt{chnudge}} & {\small int} & {\small nudge header }{\small{\small\verb`chnudge`}}{\small{} +mu} & {\small\texttt{0}}\tabularnewline +{\small\texttt{chround}} & {\small int} & {\small column header rounding} & {\small\texttt{0}}\tabularnewline +\bottomrule +\end{tabular} +\par\end{center} +\par\end{center} + +\subsubsection*{Function-value formatting §\ref{sec:Function-value-formatting}.} +\noindent \begin{center} +\noindent \begin{center} +\begin{tabular}{cc>{\raggedright}p{4cm}c} +\toprule +{\small key} & {\small type} & {\small meaning} & {\small default}\tabularnewline +\midrule +{\small\texttt{(pad)}} & {\small int} & {\small (t-notation) phantom padding} & \tabularnewline +{\small\texttt{signs}} & {\small int} & {\small sign handling for function-values} & {\small\texttt{0}}\tabularnewline +{\small\texttt{diffs}} & {\small int} & {\small insert differences \& pre-pad with zeros} & {\small\texttt{0}}\tabularnewline +{\small\texttt{Q?}} & {\small tokens} & {\small special cell conditional} & \tabularnewline +{\small\texttt{A!}} & {\small token(s)} & {\small special cell formatting} & \tabularnewline +\bottomrule +\end{tabular} +\par\end{center} +\par\end{center} + +\subsubsection*{\newpage Whole-of-table formatting §\ref{sec:Whole-of-table-formatting}.} +\noindent \begin{center} +\noindent \begin{center} +\begin{tabular}{ll>{\raggedright}p{4cm}l} +\toprule +{\small key} & {\small type} & {\small meaning} & {\small default}\tabularnewline +\midrule +{\small\texttt{ctitle}} & {\small token(s)} & {\small collective title for function-value columns} & \tabularnewline +{\small\texttt{cmidrow}} & {\small token(s) } & {\small inter-header/title row} & \tabularnewline +{\small\texttt{rules}} & {\small char(s)} & {\small horizontal rules template} & {\small\texttt{ThB}}\tabularnewline +{\small\texttt{foot}} & {\small token(s)} & {\small content of footer line} & \tabularnewline +{\small\texttt{rpos}} & {\small int (}{\small\texttt{0}}{\small\ldots}{\small\texttt{4}}{\small )} & {\small row-variable column position(s)} & {\small\texttt{1}}\tabularnewline +{\small\texttt{rbloc}} & {\small comma list} & {\small division of rows into blocks} & \tabularnewline +{\small\texttt{rblocsep}} & {\small length} & {\small extra spacing between blocks of rows} & {\small\texttt{1 ex}}\tabularnewline +\bottomrule +\end{tabular} +\par\end{center} +\par\end{center} + +\subsubsection*{Miscellaneous settings §\ref{subsec:Multiple-function-tables}, \ref{subsec:Verticalalignment}.} +\noindent \begin{center} +\noindent \begin{center} +\begin{tabular}{cc>{\raggedright}p{4cm}c} +\toprule +{\small key} & {\small type} & {\small meaning} & {\small default}\tabularnewline +\midrule +{\small\texttt{multifn}} & {\small char} & {\small multi-function separator} & {\small\texttt{,}}\tabularnewline +{\small\texttt{valign}} & {\small char (t/m/b)} & {\small vertical alignment} & {\small\texttt{m}}\tabularnewline +\bottomrule +\end{tabular} +\par\end{center} +\par\end{center} +\end{document} |